El error no global superior knowledge
significa que slapd
no sabe dónde colocar su nueva entrada. Esto generalmente significa que no ha definido una base de datos adecuada. Con los sistemas más nuevos (los que usan en cn=config
lugar de slapd.conf
), normalmente primero debe agregar una nueva base de datos o modificar una entrada de la base de datos existente usando ldapadd
o ldapmodify
. Por ejemplo, en mi sistema Fedora 17, la instalación predeterminada configura una base de datos como esta para alojar 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
Para alojar su organización ( o=myorganization, c=fr
), necesitaría crear el siguiente archivo 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
Y luego cargaría estas modificaciones de esta manera:
ldapmodify -Y EXTERNAL -H ldapi:/// -f mychanges.ldif
Esto funciona debido a las siguientes olcAccess
líneas ya presentes en la configuración:
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
Esto otorga root
, contactando a slapd
través del ldapi:///
zócalo, acceso sin contraseña al cn=config
árbol.
Luego cargaría en mi entrada de nivel superior:
dn: o=myorganization, c=fr
objectclass: organization
o: myorganization
Mediante la ejecución:
ldapadd -Y EXTERNAL -H ldapi:/// -f myobject.ldif
Esto funciona porque he agregado una ACL similar a esta base de datos. Tenga en cuenta que no necesitaba comenzar c=fr
aquí, porque la base de datos está definida para contenero=myorganization,c=fr