L'errore no global superior knowledge
indica che slapd
non sa dove inserire la nuova voce. Ciò significa in genere che non è stato definito un database appropriato. Con i sistemi più recenti (quelli che utilizzano cn=config
invece di slapd.conf
), in genere aggiungere prima un nuovo database o modificare una voce di database esistente utilizzando ldapadd
o ldapmodify
. Ad esempio, sul mio sistema Fedora 17, l'installazione predefinita imposta un database come questo per l'hosting 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
Per ospitare la tua organizzazione ( o=myorganization, c=fr
), avrei bisogno di creare il seguente file 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
E poi caricare queste modifiche in questo modo:
ldapmodify -Y EXTERNAL -H ldapi:/// -f mychanges.ldif
Questo funziona a causa delle seguenti olcAccess
righe già presenti nella configurazione:
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
Ciò garantisce root
, contattando slapd
tramite il ldapi:///
socket, l'accesso senza password cn=config
all'albero.
Vorrei quindi caricare nella mia voce di livello superiore:
dn: o=myorganization, c=fr
objectclass: organization
o: myorganization
Eseguendo:
ldapadd -Y EXTERNAL -H ldapi:/// -f myobject.ldif
Questo funziona perché ho aggiunto un ACL simile a questo database. Si noti che non avevo bisogno di iniziare c=fr
qui, perché il database è definito per contenereo=myorganization,c=fr