Bonjour,
Voila je suis un débutant en ruby, un langage qui m'a redonné le goût de coder.
Voulant créer un petit script permettant la création à la volée d'utilisateurs samba sur le serveur ldap, je suis confronté à un petit problème.
Je sais générer un fichier ldif pour un utilisateur classique mais pas samba car je ne sais pas générer les mots de passes lmpassword et ntpassword sous ruby.
Mon script crée le ldif utilisateur, génère son mot de passe, sa home directory, puis ajoute cet utilisateur dans ldap et donne les bons droits à sa home dir.
Le tout est créer à partir d'une simple liste prénom nom dans un fichier.
Voici le script
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| require 'fileutils'
require "digest"
def newpass( len )
chars = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a
newpass = ""
1.upto(len) { |i| newpass << chars[rand(chars.size-1)] }
return newpass
end
def mkHomeDir ( homedir, username, groupId )
FileUtils.mkdir_p ("#{homedir}/.windows/profile")
FileUtils.cp_r('/etc/skel/.', homedir)
FileUtils.chown_R('flex','flex', homedir)
end
#OUT FILES
ldapfile = open('etudiants.ldif','w') # sortie d'un ldif
csvfile = open('etudiants.csv','w') # sortie d'une liste en csv
logfile = open('etudiants.log','w') # TODO sortie erreur
listeEtu = File.readlines('etudiants.lst') # liste des utilisateurs nom prenom\n
etudiants = listeEtu.each { |ligne|
tab = ligne.split(' ')
nom = tab[0].downcase
prenom = tab[1].downcase
username = prenom+'.'+nom
username = username
groupDir = 'etumphy'
uid = 20000
pass = newpass(6)
ldap_user = <<-EOF
dn: uid=#{username},ou=Users,dc=iut-tp,dc=priv,dc=univ-lille1,dc=fr
uid: #{username}
cn: #{username}
sn: #{username}
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
userPassword: {CRYPT}#{pass.crypt("salt")}
shadowLastChange: 12291
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: #{uid}
gidNumber: 2000
homeDirectory: /home/#{groupDir}/#{username}
gecos: #{nom.upcase},#{prenom.downcase},,
EOF
# Writers
ldapfile.write ldap_user
csvfile.write "#{nom},#{prenom},#{uid},2000,#{username},#{pass}\n"
#teste si le dossier existe?
# si oui passer à l'autre utilisateur et logger
# creation des dossiers necessaires
userpath = "/home/#{groupDir}/#{username}/"
mkHomeDir(userpath, username, 2000)
} |
J'aimerais pouvoir créer des utilisateurs dans ldap sans passer par une commande externe et pouvoir tester les insertion pour voir si elles n'existent pas déjà.
j'ai trouvé une gem Active samba ldap mais je ne sais pas comment l'utiliser
Merci