O erro no global superior knowledge
significa que slapd
não sabe onde colocar sua nova entrada. Isso normalmente significa que você não definiu um banco de dados apropriado. Com sistemas mais recentes (aqueles que usam em cn=config
vez de slapd.conf
), você normalmente adiciona um novo banco de dados ou modifica uma entrada existente usando ldapadd
ou ldapmodify
. Por exemplo, no meu sistema Fedora 17, a instalação padrão configura um banco de dados como este para hospedagem 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 hospedar sua organização ( o=myorganization, c=fr
), eu precisaria criar o seguinte arquivo 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 então eu carregaria essas modificações assim:
ldapmodify -Y EXTERNAL -H ldapi:/// -f mychanges.ldif
Isso funciona devido às seguintes olcAccess
linhas já presentes na configuração:
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
Isso concede root
, slapd
através do ldapi:///
soquete, acesso sem senha à cn=config
árvore.
Eu carregaria minha entrada de nível superior:
dn: o=myorganization, c=fr
objectclass: organization
o: myorganization
Correndo:
ldapadd -Y EXTERNAL -H ldapi:/// -f myobject.ldif
Isso funciona porque eu adicionei uma ACL semelhante a esse banco de dados. Observe que não precisei começar c=fr
aqui, porque o banco de dados está definido para contero=myorganization,c=fr