Le modèle actuel grand public semble être http://www.plaxo.com/
Ça ne fonctionne pour l'instant que sous Windows avec Outlook, mais il y a un hack pour l'utiliser avec Linux: Plaxo on Linux? Il y a aussi une mailing list de développement Plaxo Developers forum Il y aura une API pour permettre à d'autres applications de se connecter à plaxo. Sortie prévue pour le 2e trimestre 2005. Il y a aussi des gens qui n'apprécient pas: Had enough of Plaxo, et al.
Je vais suivre pas à pas le tutoriel suivant: Building an Address Book with OpenLDAP, 27/03/2003
aptitude install slapd ldap-utils
vi ou.ldif
contenant:
dn: ou=Contacts, dc=zongo, dc=tla objectClass: top objectClass: organizationalUnit ou: Contacts
Puis j'ai eu des problèmes (d'authentification je crois, sans doute le -x, cf. infra) et je me suis dégonflé.
11/09/06: je reprends les choses en main avec le même tutoriel: Building an Address Book with OpenLDAP.
J'ajoute une ligne
rootpw secret
et je redémarre slapd:
sudo /etc/init.d/slapd restart
et j'ai l'erreur suivante:
Stopping OpenLDAP: slapd. Starting OpenLDAP: running BDB recovery, slapd - failed. The operation failed but no output was produced. For hints on what went wrong please refer to the system's logfiles (e.g. /var/log/syslog) or try running the daemon in Debug mode like via "slapd -d 16383" (warning: this will create copious output).
Je regarde dans /var/log/syslog:
Sep 11 10:32:05 narsil slapd[14999]: daemon: IPv6 socket() failed errno=97 (Address family not supported by protocol)
C'est pas grave: http://www.openldap.org/faq/data/cache/652.html
Par contre, la première ligne:
Starting OpenLDAP: running BDB recovery, slapd - failed.
c'est plus grave: il ne tourne pas. Lorsque j'enlève la ligne avec rootpw, ça refonctionne:
ldapsearch -x -b "dc=zongo,dc=be" # extended LDIF # # LDAPv3 # base <dc=zongo,dc=be> with scope sub # filter: (objectclass=*) # requesting: ALL # # zongo.be dn: dc=zongo,dc=be objectClass: top objectClass: dcObject objectClass: organization o: ZongoNation dc: zongo # admin, zongo.be dn: cn=admin,dc=zongo,dc=be objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator # search result search: 2 result: 0 Success # numResponses: 3 # numEntries: 2
Il fallait mettre ces 2 lignes sous la 1ere ligne commençant par directory:
rootdn "cn=admin,dc=zongo,dc=be" rootpw secret
source: Very basic how-to/introduction for Open LDAP (slapd) as addressbook
Comme j'ai perdu le mot de passe admin, je reconfigure:
sudo /usr/sbin/dpkg-reconfigure -plow slapd
Mais rien n'y fait: quand j'essaye de créer le carnet d'adresse, ça foire:
ldapadd -D 'dc=zongo, dc=be' -f directory.ldif -W Enter LDAP Password: SASL/DIGEST-MD5 authentication started ldap_sasl_interactive_bind_s: Internal (implementation specific) error (80) additional info: SASL(-13): user not found: no secret in database
C'est parce que j'essaye de m'authentifier avec SASL, pour éviter cela, il faut utiliser le paramètre -x (source), ce qui donne:
ldapadd -x -D 'dc=zongo, dc=be' -f directory.ldif -W Enter LDAP Password: ldap_bind: Invalid credentials (49)
C'est parce que j'avais pas mis cn=admin:
ldapadd -x -D 'cn=admin,dc=zongo, dc=be' -f directory.ldif -W Enter LDAP Password: adding new entry "dc=zongo, dc=be" ldap_add: Invalid syntax (21) additional info: objectClass: value #2 invalid per syntax
Donc, il y a une erreur dans mon fichier directory.ldif:
dn: dc=zongo, dc=be objectClass: top objectClass: dcObject objectClass: organisation dc: zongo o: Zongo Nation dn: ou=addressbook, dc=zongo, dc=be objectClass: top objectClass: organizationalUnit ou: addressbook
En remplaçant organisation par organization, ça passe mieux, mais il me dit qu'il existe déjà:
ldap_add: Already exists (68)
Donc je commente avec # les 6 premières lignes, je relance la commande, et c'est bon: l'output est:
adding new entry "ou=addressbook, dc=zongo, dc=be"
Vérification:
ldapsearch -x -b "dc=zongo,dc=be"# extended LDIF # # LDAPv3 # base <dc=zongo,dc=be> with scope sub # filter: (objectclass=*) # requesting: ALL # # zongo.be dn: dc=zongo,dc=be objectClass: top objectClass: dcObject objectClass: organization o: Zongo Nation dc: zongo # admin, zongo.be dn: cn=admin,dc=zongo,dc=be objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator # addressbook, zongo.be dn: ou=addressbook,dc=zongo,dc=be objectClass: top objectClass: organizationalUnit ou: addressbook # search result search: 2 result: 0 Success # numResponses: 4 # numEntries: 3
Je peux enfin continuer le tutoriel…
Il faut ensuite créer une fiche, contact.ldif:
dn: cn=Carl Devos,ou=addressbook,dc=zongo,dc=be objectClass: top objectClass: person objectClass: organizationalPerson objectClass: inetOrgPerson cn: Carl Devos gn: Carl sn: Devos mail: carl@devos.com postalAddress: Chaussee de Watermael 79 l: Auderghem ou: addressbook postalCode: 1160 telephoneNumber: 02/5150456 mobile: 0484/246007 homePhone: 02/6486410
Finalement, il faut l'ajouter dans le répertoire:
ldapadd -x -D 'cn=admin,dc=zongo,dc=be' -f contact.ldif -W Enter LDAP Password: adding new entry "cn=Carl Devos,ou=addressbook,dc=zongo,dc=be"
N.B:
o:
Il reste à y accéder à distance. Donc, il faut que j'essaye d'abord en ligne de commande depuis une machine distante:
ldapsearch -x -h 192.168.44.101 -b "dc=zongo,dc=be"
Et ça marche.
Alors, j'ai essayé avec MozillaThunderbird, et ça marche aussi.
hostname: nom ou IP de la machine Base DN: ou=addressbook,dc=zongo,dc=be Port Number: 389
C'est fait, vérifier:
cf. Evolution]]
J'ai essayé avec Addressbook (macos X), ça marche également (il faut faire une recherche pour qu'il affiche qqch).
Il faut refaire tourner le script de squirrelmail ( source):
sudo /usr/share/squirrelmail/config/conf.pl
Ensuite, il faut décommenter (enlever le #) dans la ligne suivante de /etc/ldap/slapd.conf (http://www.openldap.org/lists/openldap-software/200212/msg00168.html source):
#allow bind_v2
Finalement, redémarrer le service:
sudo /etc/init.d/slapd restart
Pour essayer: Compose → Addresses → sélectionner l'addressbook LDAP dans la dropdown box → list all.
Problème: toutes les applications ne mappent pas les schemas de la même façon.
Il faut maintenant choisir un schema qui convienne aux applications que je vais utiliser pour me connecter à l'annuaire, à savoir MailApp, Evolution et peut-être bien mutt.
J'ai essayé avec mozillaOrgPerson.schema (copié dans /etc/ldap/schema/, puis ajouté un include dans /etc/ldap/slapd.conf, puis redémarrer le service). Mais ça marche pas avec address book.
inetorgperson:
dn:cn=Lucas Dandois,ou=addressbook,dc=zongo,dc=be cn: Lucas Dandois givenName: Lucas sn: Dandois l: Bruxelles postalCode: 1030 street: Av du Suffrage universel 35 mobile: 0485/997418 mail: lucas.dandois@gmail.com objectClass: top objectClass: inetOrgPerson
marche avec address book et thunderbird
Faire une table avec tous les attributs de inetorgperson et voir si ça marche dans thunderbird, addressbook et evolution.
#!/usr/bin/perl # importcsv.pl : Create LDIF file from CSV addressbook # Marcel Gagné, Oct 10, 2001 open (LDIF,"+>/tmp/loadfile.ldif"); ## This is our temporary LDIF file. $csv_file = @ARGV[0]; open (CSVFILE,"$csv_file"); ## Open the CSV file. while ($line = <CSVFILE>) { chomp $line; ($dn, $ou, $objectClass, $cn, $givenName, $sn, $o, $l, $postalCode, $street, $telephoneNumber, $facsimileTelephoneNumber, $mobile, $mail, $description, $homePhone, $displayName, $homePostalAddress, $initials, $postOfficeBox, $title, $labeledURI, $jpegPhoto) = split (";", $line, 23); printf LDIF ("%s","dn: $dn\n"); printf LDIF ("%s","ou: $ou\n"); printf LDIF ("%s","objectclass: $objectClass\n"); printf LDIF ("%s","cn: $cn\n"); printf LDIF ("%s","givenName: $givenName\n"); printf LDIF ("%s","sn: $sn\n"); printf LDIF ("%s","o: $o\n"); printf LDIF ("%s","l: $l\n"); printf LDIF ("%s","postalCode: $postalCode\n"); printf LDIF ("%s","street: $street\n"); printf LDIF ("%s","telephoneNumber: $telephoneNumber\n"); printf LDIF ("%s","facsimileTelephoneNumber: $facsimileTelephoneNumber\n"); printf LDIF ("%s","mobile: $mobile\n"); printf LDIF ("%s","mail: $mail\n"); printf LDIF ("%s","description: $description\n"); printf LDIF ("%s","homePhone: $homePhone\n"); printf LDIF ("%s","displayName: $displayName\n"); printf LDIF ("%s","homePostalAddress: $homePostalAddress\n"); printf LDIF ("%s","initials: $initials\n"); printf LDIF ("%s","postOfficeBox: $postOfficeBox\n"); printf LDIF ("%s","title: $title\n"); printf LDIF ("%s","labeledURI: $labeledURI\n"); printf LDIF ("%s","jpegPhoto: $jpegPhoto\n"); } close CSVFILE; exit (0);
rendre exécutable:
chmod u+x importcsv.pl
usage:
./importcsv.pl ldap.csv
Le résultat dans /tmp/loadfile.ldif.
( source)
Extrait du fichier .csv (une ligne, sans photo):
cn=Firstname Lastname,ou=addressbook,dc=zongo,dc=be;;top | inetOrgPerson;Firstname Lastname;Firstname;Lastname;Organisation;city;1000;adress 1;02/5555555;02/ 5998877;0495/123456;email@example.com | email2@example.com;description;02/6602145;Display name;homePostalAddress1;Initials1;2000;title;uri;
Depuis que je suis passé au Mac Mini Intel, je n'ai pas remis l'annuaire LDAP. Ce 7 avril 2010, je tente le coup.
Installer slapd et phpldapadmin:
sudo install slapd ldap-utils phpldapadmin
Dans /etc/ldap/slapd.conf, ajouter sous la ligne commençant par directory:
rootdn "cn=admin,dc=example,dc=com" rootpw secret
où secret est le mot de passe de l'administrateur de la base (et changer example et com).
Redémarrer slapd:
sudo /etc/init.d/slapd restart
Dans /etc/apache2/sites-enabled/000-default, rajouter dans le domaine après DocumentRoot la ligne:
Include /etc/phpldapadmin/apache.conf
Relancer Apache2:
sudo /etc/init.d/apache reload
Dans /etc/phpldapadmin/config.php, commenter la ligne 170 (pour ne pas avoir example.com comme base), ce qui donne:
#$ldapservers->SetValue($i,'server','base',array('dc=example,dc=com']];
phpldapadmin est maintenant accessible, il est possible de s'identifier.
Ensuite, il faut importer le fichier LDIF. Problème: il y a des champs en trop, il faut les enlever pour chaque fiche…
Pour l'addressbook, ces lignes dans un fichier directory.ldif:
dn: ou=addressbook,dc=zongo,dc=be objectClass: top objectClass: organizationalUnit ou: addressbook
Insérer:
ldapadd -x -D 'cn=admin,dc=zongo, dc=be' -f directory.ldif -W
Pour les fiches, les mettre dans un fichier séparé par une ligne vide:
dn: cn=Ana Heredia,ou=addressbook,dc=zongo,dc=be ou: addressbook objectClass: top objectClass: inetOrgPerson cn: Ana Heredia givenName: Ana sn: Heredia mail: heredia.a@gmail.com dn: cn=Anne Charlier,ou=addressbook,dc=zongo,dc=be cn: Anne Charlier givenName: Anne sn: Charlier l: Bousignies Sur Roc postalCode: 59149 street: Grand Place 123 objectClass: top objectClass: inetOrgPerson
etc.
Les sauver dans un fichier rep.ldif et les insérer:
ldapadd -x -D 'cn=admin,dc=zongo, dc=be' -f rep.ldif -W
Il reste à mettre le schéma inetOrgPerson dans slapd pour avoir tous les champs lorsqu'on édite ou insère une fiche avec phpldapadmin.
Le schéma des déjà là: /etc/ldap/schema/inetorgperson.schema Dans phpldapadmin, c'est apparemment addressbook.
Problème: lorsque j'essaie d'introduire une nouvelle fiche dans phpldapadmin (en choisissant le modèle default, puis inetorgperson), il me donne l'erreur suivante:
The Rdn attribute () does not exist.