Calendar Davical/LDAP身份验证-创建新用户时发生数据库错误

Calendar Davical/LDAP身份验证-创建新用户时发生数据库错误,calendar,ldap,webdav,Calendar,Ldap,Webdav,我已经安装了Davical 1.1.1,并且可以正常使用默认身份验证。我正在尝试使用OpenLDAP 2.3服务器启用LDAP身份验证。身份验证似乎工作正常(日志显示我从LDAP服务器获得了正确的名称和电子邮件地址),但当Davical尝试创建新用户时,我收到了一个数据库错误。无论我是尝试使用LDAP凭据登录到web面板,还是以管理员身份登录并使用工具页面同步LDAP用户,都会发生同样的情况 以下是LDAP登录尝试的日志: [25-Mar-2013 15:53:30 America/New_Yo

我已经安装了Davical 1.1.1,并且可以正常使用默认身份验证。我正在尝试使用OpenLDAP 2.3服务器启用LDAP身份验证。身份验证似乎工作正常(日志显示我从LDAP服务器获得了正确的名称和电子邮件地址),但当Davical尝试创建新用户时,我收到了一个数据库错误。无论我是尝试使用LDAP凭据登录到web面板,还是以管理员身份登录并使用工具页面同步LDAP用户,都会发生同样的情况

以下是LDAP登录尝试的日志:

[25-Mar-2013 15:53:30 America/New_York] davical: LOG: Principal: Query: QF: SQL error "42846" - ERROR: cannot cast type text to bit"
[25-Mar-2013 15:53:30 America/New_York] davical: LOG: Principal: Query: QF: INSERT INTO dav_principal (username,email,user_active,modified,fullname,type_id,default_privileges) VALUES(:username,:email,:user_active,:modified,:fullname,:type_id,cast(:default_privileges as text)::BIT(24))
[25-Mar-2013 15:53:30 America/New_York] davical: LOG: Principal: Query: QF:     ":username" => "jon_williams"
[25-Mar-2013 15:53:30 America/New_York] davical: LOG: Principal: Query: QF:     ":email" => "jon@myserver.com"
[25-Mar-2013 15:53:30 America/New_York] davical: LOG: Principal: Query: QF:     ":user_active" => "1"
[25-Mar-2013 15:53:30 America/New_York] davical: LOG: Principal: Query: QF:     ":modified" => "2013-03-22 17:12:37"
[25-Mar-2013 15:53:30 America/New_York] davical: LOG: Principal: Query: QF:     ":fullname" => "Jon"
[25-Mar-2013 15:53:30 America/New_York] davical: LOG: Principal: Query: QF:     ":type_id" => "1"
[25-Mar-2013 15:53:30 America/New_York] davical: LOG: Principal: Query: QF:     ":default_privileges" => "000000000001111000000000"
[25-Mar-2013 15:53:30 America/New_York] davical: LOG: index.php: Query: QF: SQL error "42804" - ERROR: column "user_no" is of type integer but expression is of type boolean HINT: You will need to rewrite or cast the expression."
[25-Mar-2013 15:53:30 America/New_York] davical: LOG: index.php: Query: QF: INSERT INTO collection (user_no, parent_container, dav_name, dav_etag, dav_displayname, is_calendar, is_addressbook, default_privileges, created, modified, resourcetypes) VALUES( :user_no, :parent_container, :collection_path, :dav_etag, :di
[25-Mar-2013 15:53:30 America/New_York] davical: LOG: index.php: Query: QF: splayname, :is_calendar, :is_addressbook, :privileges::BIT(24), current_timestamp, current_timestamp, :resourcetypes );
[25-Mar-2013 15:53:30 America/New_York] davical: LOG: index.php: Query: QF:     ":user_no" => ""
[25-Mar-2013 15:53:30 America/New_York] davical: LOG: index.php: Query: QF:     ":parent_container" => "/jon_williams/"
[25-Mar-2013 15:53:30 America/New_York] davical: LOG: index.php: Query: QF:     ":dav_etag" => "-1"
[25-Mar-2013 15:53:30 America/New_York] davical: LOG: index.php: Query: QF:     ":collection_path" => "/jon_williams/calendar/"
[25-Mar-2013 15:53:30 America/New_York] davical: LOG: index.php: Query: QF:     ":displayname" => " calendar"
[25-Mar-2013 15:53:30 America/New_York] davical: LOG: index.php: Query: QF:     ":resourcetypes" => "<DAV::collection/><urn:ietf:params:xml:ns:caldav:calendar/>"
[25-Mar-2013 15:53:30 America/New_York] davical: LOG: index.php: Query: QF:     ":is_calendar" => "1"
[25-Mar-2013 15:53:30 America/New_York] davical: LOG: index.php: Query: QF:     ":is_addressbook" => ""
[25-Mar-2013 15:53:30 America/New_York] davical: LOG: index.php: Query: QF:     ":privileges" => ""
[25-Mar-2013 15:53:31 America/New_York] davical: ***: ERROR:AwlDBDialect: Named parameter '0' does not begin with a colon.
[25-Mar-2013 15:53:31 America/New_York] davical: ***: ERROR:AwlDBDialect: Named parameter '1' does not begin with a colon.
[25-Mar-2013 15:53:31 America/New_York] davical: LOG: Session: Query: QF: SQL error "08P01" - ERROR: bind message supplies 0 parameters, but prepared statement "pdo_pgsql_stmt_090efd34" requires 2"
[25-Mar-2013 15:53:31 America/New_York] davical: LOG: Session: Query: QF: UPDATE usr SET last_used = (SELECT session_start FROM session WHERE session.user_no = ? ORDER BY session_id DESC LIMIT 1) WHERE user_no = ?;
[25-Mar-2013 15:53:31 America/New_York] davical: LOG: Session: Query: QF:     "0" => ""
[25-Mar-2013 15:53:31 America/New_York] davical: LOG: Session: Query: QF:     "1" => ""
[25-Mar-2013 15:53:31 America/New_York] davical: LOG: Login: Query: QF: SQL error "42804" - ERROR: column "user_no" is of type integer but expression is of type boolean HINT: You will need to rewrite or cast the expression."
[25-Mar-2013 15:53:31 America/New_York] davical: LOG: Login: Query: QF: INSERT INTO session (session_id, user_no, session_key) VALUES( ?, ?, ? )
[25-Mar-2013 15:53:31 America/New_York] davical: LOG: Login: Query: QF:     "0" => "41"
[25-Mar-2013 15:53:31 America/New_York] davical: LOG: Login: Query: QF:     "1" => ""
[25-Mar-2013 15:53:31 America/New_York] davical: LOG: Login: Query: QF:     "2" => "d0f33746419fc250d60890666ee5a1fb"
[25-Mar-2013 15:53:31 America/New_York] davical: Login failure: ERR: Could not create new session.
[25-Mar-2013 15:53:30 America/New_York]davical:LOG:Principal:Query:QF:SQL错误“42846”-错误:无法将类型文本转换为位”
[25-Mar-2013 15:53:30 America/New_York]davical:LOG:Principal:Query:QF:INSERT in dav_Principal(用户名、电子邮件、活动用户、修改后的全名、全名、键入用户名、默认权限)值(:用户名、:电子邮件、:活动用户、修改后的全名、键入用户名、强制转换(:默认权限为文本)::位(24))
[2013年3月25日15:53:30美国/纽约]davical:LOG:Principal:Query:QF:“:username”=>“jon_williams”
[2013年3月25日15:53:30美国/纽约]大卫卡尔:日志:负责人:查询:QF::电子邮件“=>”jon@myserver.com"
[2013年3月25日15:53:30美国/纽约]davical:LOG:Principal:Query:QF:“:user\u active”=>“1”
[2013年3月25日15:53:30美国/纽约]davical:LOG:Principal:Query:QF:“:modified”=>“2013-03-22 17:12:37”
[2013年3月25日15:53:30美国/纽约]davical:LOG:Principal:Query:QF:“:fullname”=>“Jon”
[2013年3月25日15:53:30美国/纽约]davical:LOG:Principal:Query:QF:“:type_id”=>“1”
[2013年3月25日15:53:30美国/纽约]davical:LOG:Principal:Query:QF:“:default\u privileges”=>“00000000000111100000000”
[25-Mar-2013 15:53:30 America/New_York]davical:LOG:index.php:Query:QF:SQL错误“42804”-错误:列“user_no”的类型为整数,但表达式的类型为布尔提示:您需要重写或强制转换表达式。”
[25-Mar-2013 15:53:30 America/New_York]davical:LOG:index.php:Query:QF:INSERT-INTO collection(用户号、父容器、dav名、dav名、dav名、dav名、显示名、is日历、is地址簿、默认权限、创建、修改、资源类型)值(:用户号、:父容器、:集合路径、:dav名、:di
[2013年3月25日15:53:30美国/纽约]davical:LOG:index.php:Query:QF:splayname、:is\u calendar、:is\u addressbook、:privileges::BIT(24)、current\u timestamp、current\u timestamp、:resourcetypes);
[2013年3月25日15:53:30美国/纽约]davical:LOG:index.php:Query:QF:“:user\u no”=>”
[2013年3月25日15:53:30美国/纽约]davical:LOG:index.php:Query:QF:“:parent\u container”=>“/jon\u williams/”
[2013年3月25日15:53:30美国/纽约]davical:LOG:index.php:Query:QF:“:dav_etag=>”-1”
[2013年3月25日15:53:30美国/纽约]davical:LOG:index.php:Query:QF:“:collection\u path”=>“/jon\u williams/calendar/”
[2013年3月25日15:53:30美国/纽约]davical:LOG:index.php:Query:QF:“:displayname”=>“日历”
[2013年3月25日15:53:30美国/纽约]davical:LOG:index.php:Query:QF:“:resourcetypes=>”
[2013年3月25日15:53:30美国/纽约]davical:LOG:index.php:Query:QF:“:is_calendar”=>“1”
[2013年3月25日15:53:30美国/纽约]davical:LOG:index.php:Query:QF:“:is_addressbook”=>”
[2013年3月25日15:53:30美国/纽约]davical:LOG:index.php:Query:QF:“:特权”=>”
[25-Mar-2013 15:53:31 America/New_York]davical:**:错误:AwlDBDialect:命名参数“0”不以冒号开头。
[25-Mar-2013 15:53:31 America/New_York]davical:**:错误:AwlDBDialect:命名参数“1”不以冒号开头。
[2013年3月25日15:53:31美国/纽约]大卫卡尔:日志:会话:查询:QF:SQL错误“08P01”-错误:绑定消息提供了0个参数,但准备好的语句“pdo_pgsql_stmt_090efd34”需要2个参数
[2013年3月25日15:53:31美国/纽约]大卫卡尔:日志:会话:查询:QF:更新usr集合上次使用=(选择会话从会话开始,其中Session.user\u no=?按会话id描述限制1排序),其中user\u no=?;
[2013年3月25日15:53:31美国/纽约]davical:LOG:Session:Query:QF:“0=>”“
[2013年3月25日15:53:31美国/纽约]davical:LOG:Session:Query:QF:“1=>”“
[25-Mar-2013 15:53:31 America/New_York]davical:LOG:Login:Query:QF:SQL错误“42804”-错误:列“user_no”的类型为整数,但表达式的类型为布尔提示:您需要重写或强制转换表达式。”
[2013年3月25日15:53:31美国/纽约]大卫卡尔:日志:登录:查询:QF:插入会话(会话id、用户号、会话密钥)值(?、、?)
[2013年3月25日15:53:31美国/纽约]大卫卡尔:日志:登录:查询:QF:“0”=>“41”
[2013年3月25日15:53:31美国/纽约]大卫卡尔:日志:登录:查询:QF:“1”=>“
[2013年3月25日15:53:31美国/纽约]大卫卡尔:日志:登录:查询:QF:“2”=>“D0F33746419FC250D6089066EE5A1FB”
[2013年3月25日15:53:31美国/纽约]大卫卡尔:登录失败:错误:无法创建新会话。
这里似乎有两个错误-一个是在尝试为用户创建主体时,另一个是在尝试创建默认集合集时。在后一种情况下,主体似乎没有返回“user_no”用于新集合的值

Davical LDAP文档()指出“user_no”的映射字段应该对应于LDAP中的Unix uid,但是我们的LDAP服务器不使用uid编号,所以我从配置文件中删除了这个映射。以下是当前的配置(更改域名以保护无辜者):

表示删除
user\u no
字段映射(通过注释/删除
user\u no'=>uidNumber'
行)是告诉DAViCAL no通过与LDAP中的Unix uid匹配本地用户。或者您希望本地DAViCAL用户具有相同的ID
<?php
  $c->domain_name = "calendar.myserver.com";
  $c->admin_email = 'webmaster@myserver.com';
  $c->pg_connect[] = 'dbname=davical port=5432 user=davical_app';

  $c->authenticate_hook['call'] = 'LDAP_check';
  $c->do_not_sync_from_ldap = array('admin' => true);
  $c->authenticate_hook['config'] = array(
    'host'          => 'ldaps://www.myserver.com:636', //host name of your LDAP Server
    'bindDN'        => 'cn=Manager,dc=myserver,dc=com', //DN to bind request to this server (if required)
    'passDN'        => 'nice_try', //Password of request bind
    'baseDNUsers'   => 'ou=people,dc=myserver,dc=com', //where to look for valid user
    'filterUsers' => 'objectClass=inetOrgPerson', //filter which must validate a user according to RFC4515, i.e. surrounded by brackets
    'protocolVersion' => 3, // important for simple auth (no sasl)
    'mapping_field' => array(
                             'username' => 'uid',
                             'modified'  => 'modifyTimestamp',
                             'fullname' => 'cn', // "Common Name"
                             'email'    => 'mail'), //used to create the user based on his LDAP properties
    'format_updated'=> array('Y' => array(0,4),
                             'm' => array(4,2),
                             'd' => array(6,2),
                             'H' => array(8,2),
                             'M' => array(10,2),
                             'S' => array(12,2)), // map LDAP "modifyTimestamp" field to SQL "updated" field
     'scope' => 'subtree' // Search scope to use, defaults to subtree ( applies to BOTH user and group mappings )
                           // Allowed values: base, onelevel, subtree.
  );
  include('drivers_ldap.php');