Der Fehler no global superior knowledge
bedeutet, dass Sie slapd
nicht wissen, wo Sie Ihren neuen Eintrag ablegen sollen. Dies bedeutet normalerweise, dass Sie keine geeignete Datenbank definiert haben. Bei neueren Systemen (solche, die cn=config
anstelle von verwenden slapd.conf
) fügen Sie normalerweise zuerst eine neue Datenbank hinzu oder ändern einen vorhandenen Datenbankeintrag mit ldapadd
oder ldapmodify
. Auf meinem Fedora 17-System richtet die Standardinstallation beispielsweise eine Datenbank wie diese für das Hosting ein dc=my-domain,dc=com
:
dn: olcDatabase={2}hdb
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
structuralObjectClass: olcHdbConfig
creatorsName: cn=config
olcSuffix: dc=my-domain,dc=com
olcRootDN: cn=Manager,dc=my-domain,dc=com
Um Ihre Organisation ( o=myorganization, c=fr
) zu hosten , müsste ich die folgende LDIF-Datei erstellen:
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: o=myorganization, c=fr
-
replace: olcRootDN
olcRootDN: cn=Manager,o=myorganization,c=fr
-
replace: olcAccess
olcAccess: {0}to *
by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" write
by dn.base="cn=Manager,o=myorganization,c=fr" write
by * none
Und ich würde dann diese Modifikationen wie folgt laden:
ldapmodify -Y EXTERNAL -H ldapi:/// -f mychanges.ldif
Dies funktioniert aufgrund der folgenden olcAccess
Zeilen, die bereits in der Konfiguration vorhanden sind:
dn: olcDatabase={0}config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcAccess: {0}to *
by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
by * none
Dadurch root
wird slapd
über den ldapi:///
Socket ein kennwortfreier Zugriff auf den cn=config
Baum gewährt .
Ich würde dann meinen Top-Level-Eintrag laden:
dn: o=myorganization, c=fr
objectclass: organization
o: myorganization
Durch Ausführen von:
ldapadd -Y EXTERNAL -H ldapi:/// -f myobject.ldif
Dies funktioniert, weil ich dieser Datenbank eine ähnliche ACL hinzugefügt habe. Beachten Sie, dass ich hier nicht anfangen musste c=fr
, da die Datenbank für das Halten definiert isto=myorganization,c=fr