ldap_add 错误 (80)处理程序退出时返回 1

ldap_add 错误 (80)处理程序退出时返回 1

我正在尝试跟随教程设置一个基本的 LDAD 服务器(OpenLDAP)用于客户端身份验证,但我卡在了添加后端配置的步骤上。

我已经按照指定方式创建了 backend.ldif 文件,并尝试使用以下命令添加它:

sudo ldapadd -Y EXTERNAL -H ldapi:/// -f backend.ldif

但我明白:

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=module,cn=config"
ldap_add: Other (e.g., implementation specific) error (80)
    additional info: <olcModuleLoad> handler exited with 1

完整的 LDIF 为:

#Load dynamic backend modules
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulepath: /usr/lib/ldap
olcModuleload: back_hdb

# Database settings
dn: olcDatabase=hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcSuffix: dc=mydomain,dc=us
olcDbDirectory: /var/lib/ldap
olcRootDN: cn=admin,dc=mydomain,dc=us
olcRootPW: dmx512
olcDbConfig: set_cachesize 0 2097152 0
olcDbConfig: set_lk_max_objects 1500
olcDbConfig: set_lk_max_locks 1500
olcDbConfig: set_lk_max_lockers 1500
olcDbIndex: objectClass eq
olcLastMod: TRUE
olcDbCheckpoint: 512 30
olcAccess: to attrs=userPassword by dn="cn=admin,dc=mydomain,dc=us" write by anonymous auth by self write by * none
olcAccess: to attrs=shadowLastChange by self write by * read
olcAccess: to dn.base="" by * read
olcAccess: to * by dn="cn=admin,dc=mydomain,dc=us" write by * read

关于如何排除故障有什么建议吗?我对 LDAP 服务器一无所知,这是我的第一次。

更新:

我已重新开始安装全新 11.04 Server。

我已完成以下操作:

hostname ldap.mycompany.com
nano /etc/hosts (set to ldap.mycompany.com)
nano /etc/hostname (set to ldap.mycompany.com)
sudo apt-get install slapd ldap-utils

我尝试加载第一个模式:

sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/cosine.ldif

我得到:

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=cosine,cn=schema,cn=config"
ldap_add: Other (e.g., implementation specific) error (80)
    additional info: olcAttributeTypes: Duplicate attributeType: "0.9.2342.19200300.100.1.2"

我尝试了下面建议的命令:

root@ldap:~# cat /etc/ldap/slapd.d/cn\=config/cn\=module\{0\}.ldif
dn: cn=module{0}
objectClass: olcModuleList
cn: module{0}
olcModulePath: /usr/lib/ldap
olcModuleLoad: {0}back_hdb
structuralObjectClass: olcModuleList
entryUUID: 3bedbe64-e4b2-1030-832a-17900c7b3644
creatorsName: cn=config
createTimestamp: 20120206020131Z
entryCSN: 20120206020131.785958Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20120206020131Z

但是这次它抱怨的不是模块,而是“重复的属性类型”。

所以我需要一个命令“显示已加载的属性类型”来查看“余弦”是否已经在列表中?

好的,我假设:

sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/cosine.ldif
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/nis.ldif
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/inetorgperson.ldif

是不必要的,因为它们都产生相同的错误。

所以我继续添加 ~/backend.ldif。我从顶部删除了加载模块行,因为模块似乎已经加载。

现在,当我尝试添加:

sudo ldapadd -Y EXTERNAL -H ldapi:/// -f backend.ldif

我得到:

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "olcDatabase=hdb,cn=config"
ldap_add: Other (e.g., implementation specific) error (80)
    additional info: <olcSuffix> namingContext "dc=mycompany,dc=us" already served by a preceding hdb database

这没有任何意义,因为这是计算机上唯一的数据库,而且这是我添加到其中的第一个条目。

答案1

错误消息表明该back_hdb模块已包含在配置中。您可以使用命令验证这一点

cat /etc/ldap/slapd.d/cn\=config/cn\=module\{0\}.ldif

如果其中包含类似以下内容的行,则表示已包含:

olcModulePath: /usr/lib/ldap
olcModuleLoad: {0}back_hdb 

如果是这种情况,只需删除前六行backend.ldif并重试。

如果你想从头开始,你可以使用命令

apt-get purge slapd ldap-utils

摆脱包括所有数据文件在内的完整 ldap 安装。

之后,你需要使用相应的命令重新安装 OpenLDAP

apt-get install slapd ldap-utils

顺便说一句,我只是按照这个教程(同时使用其脚本中的所有默认值),并且在新创建的 Lucid VM 上运行良好。


编辑

好的,您在另一篇文章中谈到了 10.04。事实上,slapd与 10.04 相比,11.04 中的自动配置要好得多。它为您做的是教程中有关架构文件和 backend.ldif 的所有内容,甚至前端的一部分:您可以从 fronted.ldif 中删除以下几行,然后尝试从那里继续:

# Create top-level object in domain
dn: dc=tuxnetworks,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: Tuxnetworks
dc: Tuxnetworks
description: LDAP Server 

# Admin user.
dn: cn=admin,dc=tuxnetworks,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword: mypassword 

进一步提示:OpenLDAP ( cn=config) 的后端配置只不过是与 LDAP 结构等同的文件系统结构中的 LDIF 文件集合。您可以在 中自行浏览/etc/ldap/slapd.d。10.04 只提供了最低限度的运行条件slapd,而 11.04 已准备好一切,以便您可以立即开始。

答案2

将 .la 添加到 back_hdb 的末尾

LDIF 现在应为

#Load dynamic backend modules
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulepath: /usr/lib/ldap
olcModuleload: back_hdb.la

# Database settings
dn: olcDatabase=hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcSuffix: dc=mydomain,dc=us
olcDbDirectory: /var/lib/ldap
olcRootDN: cn=admin,dc=mydomain,dc=us
olcRootPW: dmx512
olcDbConfig: set_cachesize 0 2097152 0
olcDbConfig: set_lk_max_objects 1500
olcDbConfig: set_lk_max_locks 1500
olcDbConfig: set_lk_max_lockers 1500
olcDbIndex: objectClass eq
olcLastMod: TRUE
olcDbCheckpoint: 512 30
olcAccess: to attrs=userPassword by dn="cn=admin,dc=mydomain,dc=us" write by anonymous auth by self write by * none
olcAccess: to attrs=shadowLastChange by self write by * read
olcAccess: to dn.base="" by * read
olcAccess: to * by dn="cn=admin,dc=mydomain,dc=us" write by * read

解释如下: http://ubuntuforums.org/archive/index.php/t-1594138.html

相关内容