向OpenLDAP添加条目

问题描述 投票:5回答:3

我刚刚在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: [email protected]
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树看起来像这样:

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9sOUhNZC5wbmcifQ==” alt =“在此处输入图像说明”>

然后我尝试使用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: [email protected]
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命令导入了文件,但是采用这种方式每当我想添加新条目时,都必须删除数据库,这不切实际。

Edit1:

这是命令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
ldap openldap
3个回答
1
投票

第一件事是init.ldif文件似乎配置错​​误:

  • domainComponent“ uca”(dc = uca)丢失,应该有一个条目(dcObjectdomain objectClass)来定义该属性,该属性包含域的组件名称。

  • dcObject旨在用于具有适当结构对象类的条目。例如,如果域代表一个特定的组织,则该条目的结构对象类将为“组织”,而“ dcObject”类将为辅助类。

  • domain是用于不存储其他信息的条目的结构对象类。域对象类通常用于占位符或域不对应于真实世界实体的条目。

在您的.ldif文件中,您可以将第一个条目“ dn:dc = tpw,dc = uca,dc = ma”替换为2(然后再次删除数据库并重做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消息。


1
投票

因此,请使用slapindex给您的提示。不要以root用户身份运行slapd,不要修改95和112行,也不要运行slapd两次,也不要修复导致数据库认为已经在使用的内容。


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,因此我必须使用调试容器来获取Shell)。mkdir /var/lib/ldap/backupmv /var/lib/ldap/__db.* /var/lib/ldap/backup尝试重新启动slapD,如果仍然像使用OpenLDap实例之一那样失败,请移动alock文件mv /var/lib/ldap/__db.* /var/lib/ldap/backup重新启动slapD或在我们的实例中删除OpenShift pod并重新创建它。现在一切都可能像对我们一样工作-希望这可以帮助遇到同一问题的其他任何人。

© www.soinside.com 2019 - 2024. All rights reserved.