¿Por qué este comando ldapadd se cierra con un error de "Sintaxis no válida"?

15

Soy muy nuevo en openldap pero extremadamente versado en el entorno linux / unix. Estoy tratando de configurar mi primer entorno openldap de prueba usando la guía aquí . También he leído la mayor parte de la guía de administración aquí y tengo que admitir que es mucho para asimilar.

Entonces, siguiendo la guía de configuración básica de ubuntu, creé un archivo ldif que se ve así:

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

Cada vez que intenté agregarlo usando:

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

Obtuve el siguiente error:

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

Los resultados en Google para este error no muestran sugerencias útiles. ¿Qué podría estar haciendo mal aquí?

hax0r_n_code
fuente
¿Qué sucede si no tienes el guión en tu dominio? Eso podría estar causándolo ...
Nathan C
@NathanC intentará cambiar eso ahora ...
hax0r_n_code
@NathanC lo mismo ... supongo que no puede encontrar posixGroup. ¿Cómo consulto los objectClasses disponibles ?
hax0r_n_code
@NathanC también no tengo este /etc/ldap/slapd.d/directorio. Instalé openldap desde la fuente.
hax0r_n_code
No estoy lo suficientemente familiarizado con openldap para responder ... Sin embargo, alguien más aquí podría estarlo.
Nathan C

Respuestas:

12

Sin duda, su problema es que necesita cargar el nisesquema en su servidor LDAP. Cómo hacerlo depende de si está utilizando el slapd.confarchivo de configuración heredado o la configuración dinámica más reciente alojada cn=configy respaldada por un slapd.ddirectorio.

Utilizando slapd.conf

Necesitará includela definición de esquema en su slapd.confagregando una línea a lo largo de las líneas de:

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

Esto supone que el nis.schemaarchivo se encuentra en esa ruta; si no, modifique la ruta de manera apropiada.

Deberá reiniciar slapdpara activar el nuevo esquema.

Utilizando slapd.d

(Incluyo esto para completar, aunque no es directamente relevante para su configuración actual).

Para cargar un esquema en slapdsi está utilizando la cn=configconfiguración dinámica , lo utilizaría ldapadd. Dependiendo de cómo estén configuradas sus ACL, el comando podría verse así:

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

Esto supone que su ejecución slapdtiene una ACL que permite la autenticación de "credenciales de pares" root. Si eso no funciona, deberá proporcionar un DN y contraseña de enlace apropiados con -Dy -W.

No es necesario reiniciar en este caso.

larsks
fuente
¡Gracias! Si descargué e instalé la última versión de openldap¿ por qué no estaría configurado para usar slapd.d?
hax0r_n_code
¿Quizás el instalador usa de manera predeterminada el archivo de configuración heredado? En cualquier caso, la documentación tiene instrucciones para convertir de slapd.confa slapd.d.
larsks
Esta respuesta fue muy útil. Tuve que agregar algunos esquemas necesarios para que funcione para mí. ¡Gracias por la respuesta!
Senthil Kumar
1
¿Cómo sabías que faltaba el nis.schema y no otro esquema? ¿Cómo analizaste el error?
Mike Shultz
1
El error es quejarse de la clase de objeto para cn = ingenieros, que es "posixGroup". A partir de esto, es relativamente fácil averiguar en qué esquema se define esa clase de objeto.
larsks
1

Recientemente encontré este problema mientras seguía el tutorial del Servidor OpenLDAP de Ubuntu . Lo resolví eliminando todo el espacio en blanco al final de mis filas.

jamzsabb
fuente
1
Muchas gracias por esto, ¡solo tuve problemas con este error!
TylerDurden
1

Lo soluciono eliminando lo file.ldifque quiero cargar en openldap (por ejemplo :) data.ldifporque el editor de texto a viveces inserta caracteres invisibles por error o error y esto afecta a su archivo ldif. Así que elimínelo y cree otro e intente cargar cada declaración uno por uno y verifique con el comando ldapsearch -x -h nameofyourserver -b “dc=whateveris,dc=com”, adiós y espero ayudarlo con esto.

hansel1
fuente