我刚刚在Ubuntu Server 12.10上安装了OpenLDAP,并使用slapadd -c -l init.ldif
添加了一个ldif文件,如下所示:
dn:dc=tpw,dc=uca,dc=ma
dc: tpw
objectClass: dcObject
objectClass: top
objectClass: domain
dn: ou=people,dc=tpw,dc=uca,dc=ma
ou: people
objectClass: organizationalUnit
objectClass: top
dn: ou=groupes,dc=tpw,dc=uca,dc=ma
ou: groupes
objectClass: organizationalUnit
objectClass: top
dn: uid=admin,ou=people,dc=tpw,dc=uca,dc=ma
uid: admin
sn: Admin
cn: Admin
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
userPassword:: e1NIQX0wRFBpS3VOSXJyVm1EOElVQ3V3MWhReE5xWmM9
mail: admin@uca.ma
givenName: admin
dn: cn=GI,ou=groupes,dc=tpw,dc=uca,dc=ma
uniquemember: uid=admin,ou=people,dc=tpw,dc=uca,dc=ma
cn: GI
objectClass: groupOfUniqueNames
objectClass: top
dn: cn=GP,ou=groupes,dc=tpw,dc=uca,dc=ma
uniquemember: uid=admin,ou=people,dc=tpw,dc=uca,dc=ma
cn: GP
objectClass: groupOfUniqueNames
objectClass: top
dn: cn=GT,ou=groupes,dc=tpw,dc=uca,dc=ma
uniquemember: uid=admin,ou=people,dc=tpw,dc=uca,dc=ma
cn: GT
objectClass: groupOfUniqueNames
objectClass: top
现在我的ldap树看起来像这样:
然后我尝试使用inetOrgPerson
添加新的Apache Directory Studio
,但我收到了此错误:
[LDAP: error code 80 - index generation failed]
然后我使用phpLDAPadmin
尝试了同样的事情,但是我收到了这个错误:
Impossible d'ajouter l'objet au serveur LDAP.
LDAP dit :: Other (e.g., implementation specific) error
Erreur numéro :: 0x50 (LDAP_OTHER)
然后我创建了一个名为xx.ldif
的文件:
dn: uid=xx,ou=people,dc=tpw,dc=uca,dc=ma
cn: XX
givenname: xx
mail: xx@edu.uca.ma
objectclass: inetOrgPerson
objectclass: organizationalPerson
objectclass: person
objectclass: top
sn: XX
uid: xx
userpassword: toor
我尝试通过终端使用此命令添加此条目:
sudo ldapadd -x -D cn=Manager,dc=tpw,dc=uca,dc=ma -W -f xx.ldif
但我收到了这个错误:
ldap_add: Other (e.g., implementation specific) error (80)
additional info: index generation failed
我该如何解决这个问题?
PS:在另一个场景中,我删除了我的数据库,我修改了文件init.ldif,其中包含了我要添加的所有条目,我添加了条目xx,然后我使用slapadd命令导入了我的文件,但是在此我每次要添加新条目时都必须删除数据库,这是不切实际的。这是命令slapindex
:
WARNING!
Runnig as root!
There's a fair chance slapd will fail to start.
Check file permissions!
5370d6f9 /etc/ldap/slapd.conf: line 95: rootdn is always granted unlimited privileges.
5370d6f9 /etc/ldap/slapd.conf: line 112: rootdn is always granted unlimited privileges.
5370d6f9 hdb_db_open: database "dc=tpw,dc=uca,dc=ma": database already in use.
5370d6f9 backend_startup_one (type=hdb, suffix="dc=tpw,dc=uca,dc=ma"): bi_db_open failed! (-1)
slap_startup failed
答案 0 :(得分:1)
所以请用slapindex给你的提示。不要以root身份运行slapd,修复第95行和第112行,不要运行slapd两次,或修复导致它认为数据库已被使用的任何内容。
答案 1 :(得分:1)
第一件事是init.ldif文件似乎配置错误:
domainComponent “uca”(dc = uca)丢失,应该有一个条目( dcObject 或 domain objectClass)定义包含域名组件的此属性。
dcObject 旨在用于具有适当结构对象类的条目。例如,如果域表示特定组织,则该条目将具有作为其结构对象类的“组织”,并且“dcObject”类将是辅助类。
domain 是一个结构对象类,用于没有存储其他信息的条目。域对象类通常用于占位符或其域与实际实体不对应的条目。
在.ldif文件中,你可以用这些2替换第一个条目“dn:dc = tpw,dc = uca,dc = ma”(然后再次删除数据库并重做slapadd命令):
dn: dc=uca,dc=ma
objectClass: top
objectClass: organization
objectClass: dcObject
dc: uca
o: an organization name (mandatory with 'organization' objectClass)
dn: dc=tpw,dc=uca,dc=ma
objectClass: top
objectClass: domain
dc: tpw
第二件事:显然你已陷入索引问题。我想你确实想要使用索引,但如果没有,请从slapd.conf中找到并删除以index
开头的任何行,例如: :
index objectClass eq
。
请记住在slapd.conf中的索引定义发生每次更改后停止slapd并运行slapindex
,并确保在运行slap命令之前已断开所有ldap客户端以阻止database already in use
消息。
答案 2 :(得分:0)
虽然这与OP的问题无关,但我遇到了类似的错误:
bdb_db_open: database already in use
要么
hdb_db_open: database "dc=XXX,dc=XXX,dc=XXX": database already in use.
我们的Openshift节点之一发生故障,PVC的(安装)/var/lib/ldap/
__db.001,__ db.002和__db.003已被锁定。搜寻了几个小时后,我发现的唯一解决方案是执行以下操作(注意,由于它是OpenShift,因此我必须使用调试容器来获取外壳程序)。
mkdir /var/lib/ldap/backup
mv /var/lib/ldap/__db.* /var/lib/ldap/backup
尝试并重新启动slapD,如果仍然像使用OpenLDap实例之一那样失败,请移动alock文件
mv /var/lib/ldap/__db.* /var/lib/ldap/backup
重新启动slapD或在我们的实例中删除OpenShift pod并重新创建它。现在一切都可能像对我们一样起作用-希望这可以帮助遇到同一问题的其他人。