slapd - ldapadd - already served by a preceding mdb database

514 views
Skip to first unread message

Chiarello Ernest

unread,
Sep 30, 2015, 5:28:31 AM9/30/15
to georche...@googlegroups.com
bonjour à toutes et à tous,

une erreur peut survenir lors de la configuration de l'annuaire LDAP de
georchestra telle que définie sur
https://github.com/georchestra/georchestra/blob/15.06/doc/setup/openldap.md

en effet, dès lors que la machine sur laquelle s'effectue l'installation
a une adresse IP définie dans le DNS, alors l'annuaire LDAP installé par
"apt-get install slapd" concerne le nom du domaine dans lequel se trouve
la machine. seul le mot de passe de l'administrateur LDAP est demandé.

en revanche, si l'adresse IP n'est pas définie dans le DNS, alors
l'annuaire LDAP concernera le domaine nodomain.org.

conséquence : si le domaine choisi par "apt-get install slapd" contient
le même nom de domaine que georchestra, alors il y aura un échec lors de
l'ajout de bootstrap.ldif ! :-(

démonstration par l'exemple.

1) vérifions d'abord que notre IP est bien définie dans le DNS :

[echiarello@Service-info12 ~]$ dig -x 193.55.67.152

; <<>> DiG 9.9.7-P3 <<>> -x 193.55.67.152
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53025
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;152.67.55.193.in-addr.arpa. IN PTR

;; ANSWER SECTION:
152.67.55.193.in-addr.arpa. 86400 IN PTR atelier2.univ-fcomte.fr.

notre machine s'appelle donc atelier2.univ-fcomte.fr. c'est une debian
8.1, vierge de toute installation de slapd avant ce test.

2) on constate, après installation de slapd, que l'annuaire LDAP
concerne le domaine univ-fcomte.fr :

root@atelier2:~# grep -r univ-fcomte /etc/ldap
/etc/ldap/slapd.d/cn=config/olcDatabase={1}mdb.ldif:olcSuffix:
dc=univ-fcomte,dc=fr
/etc/ldap/slapd.d/cn=config/olcDatabase={1}mdb.ldif:olcRootDN:
cn=admin,dc=univ-fcomte,dc=fr

3) on corrige alors bootstrap.ldif pour remplacer de
"dc=georchestra,dc=org" par "dc=univ-fcomte,dc=fr".

root@atelier2:~# grep -r univ-fcomte /tmp/
/tmp/bootstrap.ldif:olcSuffix: dc=univ-fcomte,dc=fr
/tmp/bootstrap.ldif:olcRootDN: cn=admin,dc=univ-fcomte,dc=fr
/tmp/bootstrap.ldif:olcAccess: to attrs=userPassword by
dn="cn=admin,dc=univ-fcomte,dc=fr" write by anonymous auth by self write
by * none
/tmp/bootstrap.ldif:olcAccess: to * by
dn="cn=admin,dc=univ-fcomte,dc=fr" write by * read

4) mais l'intégration de bootstrap.ldif échoue : >:o

root@atelier2:~# ldapadd -Y EXTERNAL -H ldapi:/// -f /tmp/bootstrap.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "olcDatabase=mdb,cn=config"
ldap_add: Other (e.g., implementation specific) error (80)
additional info: <olcSuffix> namingContext "dc=univ-fcomte,dc=fr"
already served by a preceding mdb database

CQFD...

y a plus qu'à corriger la doc, mais je ne vois pas comment le faire de
manière simple.

la solution de contournement, c'est de reconfigurer l'annuaire LDAP avec
le domaine nodomain.org, ou autre chose qui n'existe pas.

root@atelier2:~# dpkg-reconfigure slapd
répondre aux questions :
- nodomain.org
- my-organisation

vérifier que nodomain concerne la base olcDatabase{1} :

root@atelier2:~# grep -r nodomain /etc/ldap
/etc/ldap/slapd.d/cn=config/olcDatabase={1}mdb.ldif:olcSuffix:
dc=nodomain,dc=org
/etc/ldap/slapd.d/cn=config/olcDatabase={1}mdb.ldif:olcRootDN:
cn=admin,dc=nodomain,dc=org

intégrer le bootstrap.ldif :

root@atelier2:~# ldapadd -Y EXTERNAL -H ldapi:/// -f /tmp/bootstrap.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "olcDatabase=mdb,cn=config"

vérifier que univ-fcomte.fr concerne bien la base olcDatabase{2} :

root@atelier2:~# grep -r univ-fcomte /etc/ldap
/etc/ldap/slapd.d/cn=config/olcDatabase={2}mdb.ldif:olcSuffix:
dc=univ-fcomte,dc=fr
/etc/ldap/slapd.d/cn=config/olcDatabase={2}mdb.ldif:olcAccess: {0}to
attrs=userPassword by dn="cn=admin,dc=univ-fcomte,dc=fr" wr
/etc/ldap/slapd.d/cn=config/olcDatabase={2}mdb.ldif:olcAccess: {3}to *
by dn="cn=admin,dc=univ-fcomte,dc=fr" write by * read
/etc/ldap/slapd.d/cn=config/olcDatabase={2}mdb.ldif:olcRootDN:
cn=admin,dc=univ-fcomte,dc=fr

voilà voilà...

seuls les novices peuvent rencontrer ce genre de problème, et ceux qui
réinstallent from scratch.

qu'en pensez-vous ?


Ernest.


--
Ernest CHIARELLO -Ernest.C...@univ-fcomte.fr
UMR6049 ThéMA -- CNRS / université de Franche-Comté
32 rue Mégevand 25030 Besançon cedex

Tel : 03 81 66 54 80 Mob : 07 82 99 11 08


Chiarello Ernest

unread,
Oct 1, 2015, 5:04:42 AM10/1/15
to georche...@googlegroups.com
il faudrait chercher du côté de debconf pour trouver une solution :

https://docs.switzernet.com/3/public/101010-ldap/

un extrait : 

"Lors de la configuration de slapd, debconf demande simplement le mot de passe administrateur de l’annuaire. Il utilise ensuite le nom de domaine configuré sur la machine pour définir la racine de l’annuaire LDAP. Par exemple, si la machine locale s’appelle ldap.switzernet.com, debconf va construire une arborescence LDAP ayant pour racine dc=switzernet,dc=com."

un lien pour les geeks : http://www.delafond.org/traducmanfr/deb/man7/debconf.7


Ernest.

Julien Sabatier

unread,
Oct 2, 2015, 4:00:11 AM10/2/15
to georchestra-dev
Ou alors en supprimant l'arborescence créé lors de l'installation du paquet slapd :

service slapd stop
rm /etc/ldap/slapd.d/cn\\=config/olcDatabase\\=\\{1\\}mdb.ldif
rm /var/lib/ldap/*
service slapd start

Et ensuite on peut faire l'install décrite dans la doc sans soucis
Reply all
Reply to author
Forward
0 new messages