Der Fehler no global superior knowledgebedeutet, dass Sie slapdnicht wissen, wo Sie Ihren neuen Eintrag ablegen sollen. Dies bedeutet normalerweise, dass Sie keine geeignete Datenbank definiert haben. Bei neueren Systemen (solche, die cn=configanstelle von verwenden slapd.conf) fügen Sie normalerweise zuerst eine neue Datenbank hinzu oder ändern einen vorhandenen Datenbankeintrag mit ldapaddoder 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 olcAccessZeilen, 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 rootwird slapdüber den ldapi:///Socket ein kennwortfreier Zugriff auf den cn=configBaum 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