création d'utilisateur samba

Thomquicode
Invité n'ayant pas de compte PHPfrance

27 mai 2011, 02:00

Bonjour,

actuellement en train de chercher à faire un script qui va créer automatiquement des comptes systèmes puis des comptes samba.
(on considère que les groupes sont déjà créé)
On a un fichier users.txt qui contient nom, groupe, motdepass sous cette forme
dupont:group1:mdpdupont

Pour mon script voici où j'en suis :

<?php
//$ficher = "/home/ubuntu/user.txt";
if ($fp = fopen("/home/ubuntu/users.txt","r")) {
while (!feof($fp)) {

$extrait_ligne = explode(":",fgets($fp));
$nom= $extrait_ligne['0'];
$groupe= $extrait_ligne['1'];
$mdp= $extrait_ligne['2'];

system("useradd -m -g ".$groupe." ".$nom."");
system ("echo -e ".$mdp."\n".$mdp." | smbpasswd -a ".$nom." -s");

}
fclose($fp);
}
?>

Ma difficulté est sur la commande pour samba.
Alors en teste et directement en ligne de commande je peux faire :
echo -e 'mdpdupont\nmdpdupont' | smbpasswd -a dupont -s
cela fonction.
Mais je n'arrive pas à la traduire en php. cela me fait une erreur,
pas de synthaxe php, mais sur la commande, qui me dis :

-e mdp55
sh: mdp55: not found
sh: Syntax error: "|" unexpected

voilà, j'espère avoir de l'aide.
De plus, ma boucle fait un tour en trop, mais c'est un problème moins important.


Merci.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 mai 2011, 09:32

A première vue je dirais que le problème provient du "\n". En effet, php va le remplacer par un retour à la ligne, alors que dans l'instruction que tu veux exécuter, il faut conserver la chaine de caractères "\n". Je pense qu'il te suffit donc de la protéger par un antislash : "\\n"

PS : pense aux balises

Code : Tout sélectionner

ou [php] quand tu postes du code :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Thomquicode
Invité n'ayant pas de compte PHPfrance

27 mai 2011, 10:54

Bonjour,

Alors j'ai donc testé :
system ("echo -e ".$mdp."\\n".$mdp." | smbpasswd -a ".$nom." -s");

Lorsque je lance la programme voilà le resultat :

root@monpc:/dossier/php creationuser.php
-e mdp55
sh: nmdp55: not found
sh: syntax error: "|" unexpected

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 mai 2011, 16:11

A priori, il te manque les apostrophes pour délimiter la chaine incluant le mot de passe :
// echo -e 'mdpdupont\nmdpdupont' | smbpasswd -a dupont -s
$cmd = "echo -e '" . $mdp . "\\n" . $mdp . "' | smbpasswd -a " . $nom . " -s";
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Thomquicode
Invité n'ayant pas de compte PHPfrance

27 mai 2011, 20:48

"echo -e '" . $mdp . "\\n" . $mdp . "' | smbpasswd -a " . $nom . " -s"
j'ai essayé, ça me met un message d'erreur :
mismatch - password unchanged
unable to get new password

Et ce message je le retrouve si je fais la commande manuellement sans les cotes ' '
Donc, est-ce qu'il ne les prends pas en compte ?...

Thomquicode
Invité n'ayant pas de compte PHPfrance

27 mai 2011, 21:01

D'ailleurs pour être plus claire :

Alors ça, ça marche :
system("echo 'mdp455\nmdp455' | smbpasswd -a test55 -s");
Je met donc des valeurs directement.
Et quand je passe en variable, ça me fait une erreure, pas de syntaxe php, mais au niveau de la commande,
où le mot de passe n'est pas valide :
system("echo '".$mdp."\n".$mdp."' | smbpasswd -a ".$nom." -s");
Donc ça, ça ne marche pas, et pour le \n, résultat identique avec un \\n.
Voilà.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

30 mai 2011, 15:07

salut,

a tu essayé de mettre dans ta commande dans une variable et de l'afficher avec var_dump histoire de voir ce que tu envoie exactement à la fonction system ?


@+
Il en faut peu pour être heureux ......