L'erreur no global superior knowledge
signifie que vous slapd
ne savez pas où placer votre nouvelle entrée. Cela signifie généralement que vous n'avez pas défini de base de données appropriée. Avec les systèmes plus récents (ceux utilisant cn=config
au lieu de slapd.conf
), vous ajouteriez généralement d'abord une nouvelle base de données ou modifiez une entrée de base de données existante à l'aide de ldapadd
ou ldapmodify
. Par exemple, sur mon système Fedora 17, l'installation par défaut configure une base de données comme celle-ci pour l'hébergement 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
Pour héberger votre organisation ( o=myorganization, c=fr
), je devrais créer le fichier LDIF suivant:
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
Et je chargerais alors ces modifications comme ceci:
ldapmodify -Y EXTERNAL -H ldapi:/// -f mychanges.ldif
Cela fonctionne en raison des olcAccess
lignes suivantes déjà présentes dans la configuration:
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
Cela accorde root
, en contactant slapd
via le ldapi:///
socket, un accès sans mot de passe à l' cn=config
arborescence.
Je chargerais ensuite dans mon entrée de niveau supérieur:
dn: o=myorganization, c=fr
objectclass: organization
o: myorganization
En exécutant:
ldapadd -Y EXTERNAL -H ldapi:/// -f myobject.ldif
Cela fonctionne parce que j'ai ajouté une ACL similaire à cette base de données. Notez que je n'avais pas besoin de commencer c=fr
ici, car la base de données est définie pour conteniro=myorganization,c=fr