Bonjour,
je me débats avec un problème surement stupide, mais comme ça fait des heures que je cherche sans trouver, je me retourne vers vous.
Je dois modifier le mot de passe de tous mes utilisateurs (dans un annuaire LDAP).
Tout d'abord, voici un bout de code qui ne fonctionne pas (il fait semblant mais lorsque je vérifie, rien n'a été modifié) :
>import subprocess
>
>f = open("import2.csv","r")
>
>for line in f:
> entries = line.split(";")
> username = entries[3]
> password = entries[5][:-1]
> print "%s %s" % (username, password)
> pipe = subprocess.Popen("smbldap-passwd %s 2>/dev/null 1>&2" % (username), stdin=subprocess.PIPE, shell=True)
> pipe.communicate("%s\n%s\n" % (password,password))
>
>f.close()
la ligne print "%s %s" % (username, password) sert juste à vérifier que je relève bien le username et le password dans un fichier qui contient d'autres informations.
J'ai donc modifié, juste pour voir, le code en
>import subprocess
>
>f = open("import2.csv","r")
>
>for line in f:
> entries = line.split(";")
> username = entries[3]
> password = entries[5][:-1]
> print "%s %s" % (username, password)
> pipe = subprocess.Popen("smbldap-passwd %s 2>/dev/null 1>&2" % ("toto"), stdin=subprocess.PIPE, shell=True)
> pipe.communicate("%s\n%s\n" % ("mdp","mdp"))
>
>f.close()
où toto est un utilisateur qui existe. Ici son mot de passe est changé autant de fois qu'il y a de lignes dans le fichier, mais ... ça marche !
J'ai fait afficher par le programme le type de username et de password et je tombe bien sur str !
L'un d'entre vous aurait-il une idée de la différence entre ces deux situations ?
Merci beaucoup.
PS : c'est sous une debian Lenny et, bien entendu, la commande fonctionne très bien lorsque je la lance directement.
# impression d'un mec qui fait pas de python
Posté par NeoX . Évalué à 2.
pipe = subprocess.Popen("smbldap-passwd %s 2>/dev/null 1>&2" % ("toto"), stdin=subprocess.PIPE, shell=True)
pipe.communicate("%s\n%s\n" % ("mdp","mdp"))
il faut peut-etre que python evalue la variable username et passaword
mais ne pas oublier de mettre les " autours afin que smbldap-passwd
# Tu est surtout timbré
Posté par Jean B . Évalué à 4.
http://www.google.com/search?q=python+ldap me donne
http://www.packtpub.com/article/python-ldap-applications-lda(...)
voir "Changing an LDAP Password" il y a un bout de code tout prêt pour faire ce que tu souhaite.
# shell + ldif + ldapmodify
Posté par nono14 (site web personnel) . Évalué à 1.
ou python + ldap
Système - Réseau - Sécurité Open Source - Ouvert à de nouvelles opportunités
# pas de parenthèses
Posté par solsTiCe (site web personnel) . Évalué à 1.
"qqchose %s" % (username)
qu'est-ce qu'elles font là tes parenthèses ? pour un singleton on doit mettre une virgule comme (username,)
et le plus simple c'est encore
"qqchose %s" % username
c'est pareil pour ("toto") ...
c'est quelle version de python ? on s'en fout que c'est debian choutte machin chose ...
[^] # Re: pas de parenthèses
Posté par mats . Évalué à 1.
merci pour la réponse.
Je sais qu'effectivement c'est inutile.
Ce que je veux comprendre, c'est pourquoi ça marche avec "toto" et pas avec username et password.
Pour ce qui est de la version de python, c'est 2.5.2.
Bye
[^] # Re: pas de parenthèses
Posté par NeoX . Évalué à 2.
# HS
Posté par benoar . Évalué à 2.
http://docs.python.org/library/csv.html
Sinon, pour ton problème, il faudrait vérifier que tes login/mdp sont bien comme il faut sans caractères supplémentaires (genre des espaces ...) en faisant un truc du genre :
print "<%s><%s>" % (username, password)
[^] # Re: HS
Posté par mats . Évalué à 2.
Certains mots de passe, aléatoirement, étaient mal formés (espace à la fin) ! Mon affichage ne permettait pas de le réaliser !
Dans tous les cas, ça me rassure, je ne voyais pas ce qui pouvait être incorrect dans le script.
Encore une fois, merci !
PS : pour ceux qui me conseillaient de n'utiliser que du python, jetez un œil à ce que font les smbldap-tools ! Avant de parvenir au même résultat, il va falloir que j'y passe pas mal de temps (sans parler des tests). Mais c'est vrai que je ne vous ai pas dit que j'avais besoin de modifier des mots de passe samba et linux en même temps...
PS : merci pour le lien sur le module sur les csv.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.