Por que esse comando ldapadd é encerrado com um erro "Sintaxe inválida"?

15

Eu sou muito novo no openldap, mas extremamente versado no ambiente linux / unix. Estou tentando configurar meu primeiro ambiente openldap de teste usando o guia aqui . Eu também li a maior parte do guia de administração aqui e tenho que admitir, é muito para absorver.

Então, seguindo o guia de configuração básica do ubuntu, criei um arquivo ldif parecido com este:

dn: ou=People,dc=example,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Groups,dc=example,dc=com
objectClass: organizationalUnit
ou: Groups

dn: cn=engineers,ou=Groups,dc=example,dc=com
objectClass: posixGroup
cn: engineers
gidNumber: 5000

dn: uid=john,ou=People,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: john
sn: Doe
givenName: John
cn: John Doe
displayName: John Doe
uidNumber: 10000
gidNumber: 5000
userPassword: johnldap
gecos: John Doe
loginShell: /bin/bash
homeDirectory: /home/john

Sempre que eu tentava adicioná-lo usando:

$ ldapadd -x -D cn=admin,dc=example,dc=com -W -f add_content.ldif

Estou tendo o erro a seguir:

adding new entry "cn=engineers,ou=Groups,dc=my-domain,dc=com"
ldap_add: Invalid syntax (21)
    additional info: objectClass: value #0 invalid per syntax

adding new entry "uid=john,ou=People,dc=my-domain,dc=com"
ldap_add: Invalid syntax (21)
    additional info: objectClass: value #0 invalid per syntax

Os resultados no google para esse erro não trazem sugestões úteis. O que eu poderia estar fazendo de errado aqui?

hax0r_n_code
fonte
O que acontece se você não tiver o traço em seu domínio? Que poderia estar causando-lo ...
Nathan C
@NathanC vai tentar mudar isso agora ...
hax0r_n_code
@ NathanC mesma coisa ... meu palpite é que ele não pode encontrar posixGroup. Como faço para consultar os objectClasses disponíveis ?
precisa saber é o seguinte
@ NathanC também não tenho esse /etc/ldap/slapd.d/diretório. Eu instalei o openldap da fonte.
hax0r_n_code
Eu não estou familiarizado o suficiente com o openldap para responder ... talvez alguém aqui esteja.
C # de Nathan C

Respostas:

12

Seu problema é, sem dúvida, que você precisa carregar o nisesquema no servidor LDAP. Como fazer isso depende se você está usando o slapd.confarquivo de configuração herdado ou a configuração dinâmica mais recente hospedada cn=confige apoiada por um slapd.ddiretório.

Usando slapd.conf

Você precisará includeda definição do esquema no seu slapd.confadicionando uma linha ao longo das linhas de:

include /usr/local/etc/openldap/schema/nis.schema

Isso pressupõe que o nis.schemaarquivo esteja localizado nesse caminho; caso contrário, modifique o caminho adequadamente.

Você precisará reiniciar slapdpara ativar o novo esquema.

Usando slapd.d

(Estou incluindo isso para garantir a integridade, embora não seja diretamente relevante para sua configuração atual).

Para carregar um esquema, slapdse você estiver usando a cn=configconfiguração dinâmica , você usaria ldapadd. Dependendo de como suas ACLs estão configuradas, o comando pode ser assim:

ldapadd -Y EXTERNAL -H ldapi:// -f /usr/local/etc/openldap/schema/nis.ldif

Isso pressupõe que sua execução slapdtenha uma ACL permitindo autenticação de "credenciais de mesmo nível" root. Se isso não funcionar, você precisará fornecer um DN e senha de ligação adequados usando -De -W.

Não é necessário reiniciar neste caso.

larsks
fonte
Obrigado! Se eu baixei e instalei a versão mais recente, openldappor que não estaria configurado para usar slapd.d?
hax0r_n_code
Talvez o instalador tenha como padrão usar o arquivo de configuração herdado? De qualquer forma, a documentação possui instruções para converter de slapd.confpara slapd.d.
Larsks
Esta resposta foi muito útil. Eu tive que adicionar alguns esquemas necessários para fazê-lo funcionar para mim. Obrigado pela resposta!
Senthil Kumar
1
Como você sabia que estava faltando o nis.schema e não outro esquema? Como você analisou o erro?
Mike Shultz
1
O erro está reclamando da classe de objeto para cn = engineer, que é "posixGroup". A partir disso, é relativamente fácil descobrir em qual esquema essa classe de objeto está definida.
Larsks 6/06/15
1

Recentemente, encontrei esse problema ao seguir o tutorial do Ubuntu OpenLDAP Server . Resolvi removendo todo o espaço em branco das minhas linhas.

jamzsabb
fonte
1
Muito obrigado por isso, eu apenas lutei com esse erro!
tylerdurden
1

Eu o corrigi excluindo o file.ldifque eu quero cobrar no openldap (por exemplo:) data.ldifporque o editor de texto viàs vezes insere caracteres invisíveis por erro ou bug e isso afeta o seu arquivo ldif. Então exclua-o e crie outro e tente carregar cada instrução uma por uma e verifique com o comando ldapsearch -x -h nameofyourserver -b “dc=whateveris,dc=com”adeus e espero ajudá-lo com isso.

hansel1
fonte