[Projet] Peupler OpenLDAP à partir d’un fichier CSV

banner-script-php

Je continue sur ma lancée. L’annuaire LDAP a été mis en place sans trop de problème mais un annuaire vide… comment dire… ça ne sert à rien.

Le sujet de projet indique que je doit réaliser une maquette pour une entreprise de 100 personnes. Et si on créait 100 identités dans cet annuaire ? Oui mais comment ? Je n’ai pas l’imagination suffisante pour inventer 100 personnes… Et j’ai surtout autre chose à faire !

Fakename Generator

Heureusement, il existe un site vous permettant de créer des identités aléatoires en fonctions des critères dont vous avez besoin : c’est fakenamegenerator.com

Vous avez même une section vous permettant de « commander » des identités (jusqu’à 50 000) qui vous seront livrées très rapidement via un fichier CSV.

Je me suis donc créé un fichier CSV de 100 personnes regroupant certains critères nécessaires à mon projet que j’ai ensuite ouvert avec un tableur afin d’y apporter quelques modifications.

Convertir un fichier CSV en fichier LDIF

Seul problème ensuite : comment importer cette liste dans OpenLDAP ? En passant par le format de fichier que j’avais évoqué précédemment : le format LDIF.

Il va falloir scripter une petite boucle qui formate mes données CSV en données LDIF. Comme ça reste plus ou moins du fichier texte (il n’y a que l’extension qui change), ça nous facilite grandement la tâche.

Avant de scripter, voici comment mon fichier CSV est structuré :

uidnumber;givenname;sn;mail;uid;userpassword;dept;gidnumber
10001;Louise;Plouffe;lplouffe@mcmahon.net;lplouffe;{SHA}AnJtQPN45xaYHEMh1gujoyXtakw=;Management;500

Afin de faciliter l’écriture du script, toutes mes OUs sont déjà en place, prête à accueillir leurs utilisateurs. J’ai aussi créé des groupes dont l’ID auquel chaque employé appartient est spécifié en dernière colonne (gidnumber). Mon annuaire vide ressemble à cela :

Arborescence OpenLDAP

Le script qui va faire la moulinette est en PHP est m’a été gentiment proposé par Thomas 🙂 (dédicace).

<?php
$ldif = "";
if (($handle = fopen("db-user5.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
        $num = count($data);
		$uidNumber = $data[0];
		$givenName = $data[1];
		$sn = $data[2];
		$mail = $data[3];
		$uid = $data[4];
		$userPassword = $data[5];
		$dept = $data[6];
		$gidNumber = $data[7];
 
		$ldif.= "dn: cn=".$givenName." ".$sn.",ou=Users,ou=".$dept.",ou=Employees,dc=mcmahon,dc=net\n";
		$ldif.= "cn: ".$givenName." ".$sn."\n";
		$ldif.= "gidnumber: ".$gidNumber."\n";
		$ldif.= "givenname: ".$givenName."\n";
		$ldif.= "homedirectory: /home/users/".$uid."\n";//a completer
		$ldif.= "mail: ".$mail."\n";
		$ldif.= "objectclass: inetOrgPerson\n";
		$ldif.= "objectclass: posixAccount\n";
		$ldif.= "objectclass: top\n";
		$ldif.= "sn: ".$sn."\n";
		$ldif.= "uid: ".$uid."\n";
		$ldif.= "uidnumber: ".$uidNumber."\n";
		$ldif.= "userpassword: ".$userPassword."\n\n";
    }
    fclose($handle);
}
 
$fp = fopen('export.txt', 'w');
fwrite($fp, $ldif);
fclose($fp);
echo "export terminé\n";
?>

Rien de très compliqué donc… Il faut juste veiller à ne pas avoir de caractères accentués dans le fichier CSV.

Vous l’exécutez dans le dossier contenant votre fichier csv (intitulé db-user5.csv ici) et ça vous sort un truc comme ça :

dn: cn=Louise Plouffe,ou=Users,ou=Management,ou=Employees,dc=example,dc=net
cn: Louise Plouffe
gidnumber: 504
givenname: Louise
homedirectory: /home/users/lplouffe
mail: lplouffe@example.net
objectclass: inetOrgPerson
objectclass: posixAccount
objectclass: top
sn: Plouffe
uid: lplouffe
uidnumber: 10001
userpassword: {SHA}AnJtQPN45xaYHEMh1gujoyXtakw=

Cool non ? 😀

Oh par contre pensez à supprimer la première entrée dans le fichier de sortie… Elle ne sert à rien.

Importer un fichier LDIF dans OpenLDAP

Pour l’importation, vous pouvez passer par phpLDAPadmin (on s’est pas cassé le cul à l’installer pour rien) ou utiliser la commande ldapadd. Comme je n’ai pas le temps de me pencher sur la question, je privilégie l’interface graphique… (Bouh la honte !).

Dans phpLDAPadmin, vous avec un gros bouton « Importer » qui ne peut pas être plus explicite. Vous envoyez un fichier LDIF ou copiez/collez du contenu LDIF dans un champ texte et c’est parti !

Import LDIF OpenLDAP

Oui c'est vrai... phpLDAPadmin n'est pas super joli... Mais il fait ce qu'on lui demande !

Oui c’est vrai… phpLDAPadmin n’est pas super joli… Mais il fait ce qu’on lui demande !

Parfait, tous mes utilisateurs ont été importés sans problème. Tous les comptes sont maintenant centralisés dans un annuaire. Nous allons maintenant pouvoir lier cet annuaire à un service de centralisation d’authentification afin de faciliter l’utilisation des services de l’entreprise, à travers une authentification unique, par session.

Edit : finalement j’ai laissé tombé CAS SSO…

Si vous avez des questions ou un problème avec le script (qui peut toujours être amélioré), les commentaires sont là 🙂

Cet article vous a plu ? Partagez-le sur les réseaux sociaux !

Twitter Facebook Google Plus email