我刚刚在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
Run Code Online (Sandbox Code Playgroud)
现在我的ldap树看起来像这样:

然后我尝试添加一个新的inetOrgPerson使用Apache Directory Studio,但我收到此错误:
[LDAP: error code 80 - index generation failed]
Run Code Online (Sandbox Code Playgroud)
然后我尝试使用相同的东西phpLDAPadmin,但我得到了这个错误:
Impossible d'ajouter l'objet au serveur LDAP.
LDAP dit :: Other (e.g., implementation specific) error
Erreur numéro :: 0x50 (LDAP_OTHER)
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个我命名的文件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
Run Code Online (Sandbox Code Playgroud)
我试图通过终端使用此命令添加此条目:
sudo ldapadd -x -D cn=Manager,dc=tpw,dc=uca,dc=ma -W -f xx.ldif
Run Code Online (Sandbox Code Playgroud)
但我得到了这个错误:
ldap_add: Other (e.g., implementation specific) error (80)
additional info: index generation failed
Run Code Online (Sandbox Code Playgroud)
我怎么解决这个问题 ?
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
Run Code Online (Sandbox Code Playgroud)
第一件事是 init.ldif 文件似乎配置错误:
缺少domainComponent “uca”(dc=uca),应该有一个条目( dcObject或domain objectClass)来定义保存域名组件的属性。
dcObject旨在用于具有适当结构对象类的条目。例如,如果域代表特定组织,则条目将具有其结构对象类“organization”,并且“dcObject”类将是辅助类。
域是一个结构对象类,用于不存储其他信息的条目。域对象类通常用于占位符或其域与现实世界实体不对应的条目。
在 .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
Run Code Online (Sandbox Code Playgroud)
第二件事:显然你已经陷入了指数问题。我认为您确实想使用索引,但如果没有,请查找并删除以indexslapd.conf 开头的任何行,例如 :
index objectClass eq。
请记住slapindex在对 slapd.conf 中的索引定义进行每次更改后停止并运行 slapd,并确保在运行 slap 命令之前已断开所有 ldap 客户端的连接以防止出现database already in use消息。
| 归档时间: |
|
| 查看次数: |
6822 次 |
| 最近记录: |