Błąd no global superior knowledge
oznacza, że slapd
nie wiadomo, gdzie umieścić nowy wpis. Zazwyczaj oznacza to, że nie zdefiniowałeś odpowiedniej bazy danych. W przypadku nowszych systemów (tych używających cn=config
zamiast slapd.conf
) zazwyczaj należy najpierw dodać nową bazę danych lub zmodyfikować istniejącą pozycję bazy danych za pomocą ldapadd
lub ldapmodify
. Na przykład w moim systemie Fedora 17 domyślna instalacja konfiguruje bazę danych podobną do hostowania 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
Aby hostować Twoją organizację ( o=myorganization, c=fr
), musiałbym utworzyć następujący plik LDIF:
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
Następnie załadowałbym te modyfikacje w następujący sposób:
ldapmodify -Y EXTERNAL -H ldapi:/// -f mychanges.ldif
Działa to z powodu następujących olcAccess
linii już obecnych w konfiguracji:
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
Zapewnia to root
kontakt slapd
z ldapi:///
gniazdem bez dostępu do hasła do cn=config
drzewa.
Następnie załadowałbym mój wpis najwyższego poziomu:
dn: o=myorganization, c=fr
objectclass: organization
o: myorganization
Biegiem:
ldapadd -Y EXTERNAL -H ldapi:/// -f myobject.ldif
To działa, ponieważ dodałem podobną listę ACL do tej bazy danych. Zauważ, że nie musiałem zaczynać c=fr
tutaj, ponieważ baza danych jest zdefiniowana do przechowywaniao=myorganization,c=fr