Pourquoi cette commande ldapadd se ferme-t-elle avec une erreur de «syntaxe non valide»?

15

Je suis très nouveau sur openldap mais extrêmement bien versé dans l'environnement linux / unix. J'essaie de configurer mon tout premier environnement openldap de test en utilisant le guide ici . J'ai également lu la plupart du guide d'administration ici et je dois admettre que c'est beaucoup à prendre.

Donc, en suivant le guide de configuration de base ubuntu, j'ai créé un fichier ldif qui ressemble à ceci:

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

Chaque fois que j'essayais de l'ajouter en utilisant:

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

J'obtiens l'erreur suivante:

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

Les résultats dans google pour cette erreur ne contiennent aucune suggestion utile. Que pourrais-je faire de mal ici?

hax0r_n_code
la source
Que se passe-t-il si vous n'avez pas le tiret dans votre domaine? Cela pourrait en être la cause ...
Nathan C
@NathanC va essayer de changer ça maintenant ...
hax0r_n_code
@NathanC même chose ... je suppose qu'il ne peut pas trouver posixGroup. Comment rechercher les objectClasses disponibles ?
hax0r_n_code
@NathanC aussi je n'ai pas ce /etc/ldap/slapd.d/répertoire. J'ai installé openldap à partir des sources.
hax0r_n_code
Je ne suis pas assez familier avec openldap pour répondre ... quelqu'un d'autre pourrait être bien.
Nathan C

Réponses:

12

Votre problème est sans aucun doute que vous devez charger le nisschéma dans votre serveur LDAP. La procédure à suivre varie selon que vous utilisez le slapd.conffichier de configuration hérité ou la nouvelle configuration dynamique hébergée dans cn=configet sauvegardée par un slapd.drépertoire.

En utilisant slapd.conf

Vous aurez besoin de includela définition de schéma dans votre slapd.confen ajoutant une ligne le long des lignes de:

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

Cela suppose que le nis.schemafichier se trouve sur ce chemin; sinon, modifiez le chemin d'accès de manière appropriée.

Vous devrez redémarrer slapdpour activer le nouveau schéma.

En utilisant slapd.d

(J'inclus ceci pour être complet, bien que ce ne soit pas directement pertinent pour votre configuration actuelle).

Pour charger un schéma dans slapdsi vous utilisez la cn=configconfiguration dynamique , vous devez utiliser ldapadd. Selon la configuration de vos ACL, la commande peut ressembler à ceci:

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

Cela suppose que votre exécution slapddispose d'une liste de contrôle d'accès permettant l'authentification des «informations d'identification de l'homologue» root. Si cela ne fonctionne pas, vous devrez fournir un DN de liaison et un mot de passe appropriés à l'aide de -Det -W.

Aucun redémarrage n'est requis dans ce cas.

larsks
la source
Je vous remercie! Si j'ai téléchargé et installé la dernière version de openldappourquoi ne serais-je pas configuré pour l'utiliser slapd.d?
hax0r_n_code
Peut-être que le programme d'installation utilise par défaut le fichier de configuration hérité? Dans tous les cas, la documentation contient des instructions pour la conversion de slapd.confvers slapd.d.
larsks
Cette réponse a été très utile. J'ai dû ajouter quelques schémas requis pour que cela fonctionne pour moi. Merci d'avoir répondu!
Senthil Kumar
1
Comment saviez-vous que c'était le nis.schema qui manquait et pas un autre schéma? Comment avez-vous analysé l'erreur?
Mike Shultz
1
L'erreur se plaint de la classe d'objets pour cn = ingénieurs, qui est "posixGroup". À partir de cela, il est relativement facile de déterminer dans quel schéma cette classe d'objets est définie.
larsks
1

J'ai récemment rencontré ce problème en suivant le didacticiel Ubuntu OpenLDAP Server . Résolu en supprimant tous les espaces de fin de mes lignes.

jamzsabb
la source
1
Merci beaucoup pour cela, j'ai juste eu du mal avec cette erreur!
TylerDurden
1

Je le corrige en supprimant le file.ldifque je veux charger dans openldap (par exemple:) data.ldifcar l'éditeur de texte viinsère parfois un caractère invisible par erreur ou bogue et cela affecte votre fichier ldif. Alors supprimez-le et vous en créez un autre et essayez de télécharger chaque déclaration une par une et vérifiez avec la commande ldapsearch -x -h nameofyourserver -b “dc=whateveris,dc=com”, au revoir et j'espère vous aider avec cela.

hansel1
la source