Page 1 sur 1

Résolu : Runprogram et passwd qui ne fonctionnent pas ensemble

Publié : ven. 25/févr./2022 13:50
par Ehma
Bonjour,

Je tente de créer l'automatisation de mots de passe pour certains utilisateurs génériques, mais j'ai toujours la même erreur et je ne vois pas où est le problème.

[syntax]
Passwd = RunProgram("/usr/bin/passwd"," -q "+NomDUtilisateur(ProgramParameter(0)),"", #PB_Program_Open | #PB_Program_Write | #PB_Program_Error)
If Passwd
While ProgramRunning(Passwd)
If AvailableProgramOutput(Passwd)
WriteProgramStringN(Passwd,MotDePAsse)
EndIf
Wend
CloseProgram(Passwd) ; Ferme la connexion vers le programme
EndIf
[/syntax]

J'obtiens toujours cette même erreur, avez-vous une idée ?

/autopassword# sudo ./autopassword emmanuel
Segmentation fault (core dumped)

MErci à tous.

Re: Runprogram et passwd qui ne fonctionnent pas ensemble

Publié : ven. 25/févr./2022 21:03
par Marc56
Bonsoir Ehma,

Cela dépend de la version de linux, mais je ne suis pas sur qu'un changement de mdp utilisateurs puisse se faire par un simple utilisateur étant membre du groupe sudo. As-tu essayé en direct avant ?
Si on tente de le faire en direct, on a le classique message de confirmation et demande du mdp de root.

Un coredump provient du système et a du laisser quelques traces dans /var/log/message etc. As-tu regardé ?

:wink:

Re: Runprogram et passwd qui ne fonctionnent pas ensemble

Publié : lun. 28/févr./2022 9:10
par Ehma
Merci beaucoup,

J'ai essayé avec le compte root et c'est pareil.

j'ai ça :[21773504.928900] autopassword[28679]: segfault at 20 ip 0000000000405e00 sp 00007ffcff377708 error 4 in autopassword[400000+a000]

En tout cas, je sais le fais sans problème depuis un script bash. Je veux dire, si j'utilise le même compte en faisant echo -e "nouveamdp\nnouveaumdp"|passwd utilisateur

Re: Runprogram et passwd qui ne fonctionnent pas ensemble

Publié : mar. 08/mars/2022 8:43
par Ehma
Voilà, j'ai résolu le problème par

Code : Tout sélectionner

While ProgramRunning(Passwd)
  WriteProgramStringN(Passwd,MotDePAsse)
Wend
au lieu de ça

Code : Tout sélectionner

While ProgramRunning(Passwd)
  If AvailableProgramOutput(Passwd)
    WriteProgramStringN(Passwd,MotDePAsse)
  EndIf
Wend
Là ça fonctionne !
Si ça peut aider....