Ajouter massivement des utilisateurs (OpenLDAP)

Admettons que nous sommes dans une école où chaque année les administrateurs doivent entrer une liste conséquente de nouveau compte utilisateurs. Faire ça à la main demanderai beaucoup de temps… Grâce au language de script Bash, il va permettre d'automatiser ces tâches rien qu'en lui fournissant en paramètre le nom d'un fichier dont son contenue est une liste d'utilisateurs du type :

comptes.txt
tatu bruno btatu
tatu eric etatu
nicolas sarkozi nsarkozi
makarian luc mluc

Ainsi on pourra lancer l'exécution du script comme suit :

./ajout_massif_utilisateurs.sh comptes.txt

On obtiendra en sortie ce type de fichier :

Click to display ⇲

Click to hide ⇱

sortie_ajout_massif_utilisateurs.ldif
dn: cn=tatu bruno,ou=users,ou=iut,dc=local,dc=net
objectClass: top
ObjectClass: inetOrgPerson
objectClass: posixAccount
cn: tatu bruno
uid: btatu
sn: tatu bruno btatu
uidNumber: 1011
gidNumber: 2000
homeDirectory: /home/users/bruno
loginShell: /bin/sh
userPassword: {crypt}btatu
 
dn: cn=tatu eric,ou=users,ou=iut,dc=local,dc=net
objectClass: top
ObjectClass: inetOrgPerson
objectClass: posixAccount
cn: tatu eric
uid: etatu
sn: tatu eric etatu
uidNumber: 1012
gidNumber: 2000
homeDirectory: /home/users/eric
loginShell: /bin/sh
userPassword: {crypt}etatu
 
dn: cn=nicolas sarkozi,ou=users,ou=iut,dc=local,dc=net
objectClass: top
ObjectClass: inetOrgPerson
objectClass: posixAccount
cn: nicolas sarkozi
uid: nsarkozi
sn: nicolas sarkozi nsarkozi
uidNumber: 1013
gidNumber: 2000
homeDirectory: /home/users/sarkozi
loginShell: /bin/sh
userPassword: {crypt}nsarkozi
 
dn: cn=makarian luc,ou=users,ou=iut,dc=local,dc=net
objectClass: top
ObjectClass: inetOrgPerson
objectClass: posixAccount
cn: makarian luc
uid: mluc
sn: makarian luc mluc
uidNumber: 1014
gidNumber: 2000
homeDirectory: /home/users/luc
loginShell: /bin/sh
userPassword: {crypt}mluc

Il nous reste plus qu'a ajouter ces nouvelles entrées :

ldapadd -W -D "cn=admin,dc=local,dc=net" -x -H ldap://localhost -f sortie_ajout_massif_utilisateurs.ldif

Assez attendu, voici le script :

ajout_massif_utilisateurs.sh
#!/bin/bash
# Ce code source provient du site :
# https://wiki.bruno-tatu.com/doku.php?id=wiki:ajouter-massivement-utilisateurs-openldap
 
if [ -z $1 ]; then
  echo Merci de renseigner en paramètre le fichier contenant une liste de compte utilisateurs pour OpenLDAP.
  exit 1
fi
 
read -p "Merci de renseigner votre CN (ex: dc=local,dc=net) : " cn
 
 
i=0
 
# Lecture ligne par ligne du fichier :
while read line
do
 
  # La ligne en cours de lecture sera stocké sous forme de tableau :
  info=($line)
 
# Enregistrement d'une nouvelle entrée dans un fichier temporaire :
cat > out.ldif.$i <<_EOF_
 
dn: cn=${info[0]} ${info[1]},ou=users,ou=iut,${cn}
objectClass: top
ObjectClass: inetOrgPerson
objectClass: posixAccount
cn: ${info[0]} ${info[1]}
uid: ${info[2]}
sn: ${line[0]}
uidNumber: $((i+1010))
gidNumber: 2000
homeDirectory: /home/users/${info[1]}
loginShell: /bin/sh
userPassword: {crypt}${info[2]}
_EOF_
 
 i=$((i+1))
 
done < $1
 
# Compilation des entrées dans un seul fichier :
cat out.ldif* > sortie_ajout_massif_utilisateurs.ldif
rm -r out.ldif*
 
echo "Succès de la compilation du fichier sortie_ajout_massif_utilisateurs.ldif."
read -p "Souhaitez-vous mettre à jour la base LDAP ? (o/n) " pass
 
if [ $pass == "o" ]; then
    read -p "Merci de renseigner le nom du manager (ex : admin) : " nom
    ldapadd -W -D cn=$nom,$cn -x -H ldap://localhost -f sortie_ajout_massif_utilisateurs.ldif
fi
Malheureusement le serveur LDAP est chatouilleux, prenez le temps de vérifier dans votre fichier LDIF que les retours à la ligne ne disposent pas de caractères inutiles tel que des espaces!

N'oubliez pas de le rendre exécutable !

chmod +x ajout_massif_utilisateurs.sh