Problème avec php (formulaire et shell)

Résolu
salut,

j'ai développé un petit formulaire qui me permet de modifier le login et le mot de passe d'une application dans un fichier .htpasswd
voici le code:

[CODE]
<html>

<style type="text/css">

.titre1
{
font-size:14px;
color:white;
}
.titre2

{
font-size:13px;
}
</style>

<body>

<br><br><br><br><br><br><br><br>

<FORM ACTION="user.php" METHOD='POST'>
<table width="80%" cellpadding="3" align="center" cellspacing="0" style='border:1px outset gray'>
<tr bgcolor="#00438C">
<td class="titre1">Enregistrer un nouveau compte administateur:</td>
<td></td>
</tr>
<tr>
<td class="titre2">Login:</td>
<td><input type=text name='login' value=''></td>
</tr>
<tr>
<td class="titre2">Password:</td>
<td><input type=password name='passwd' value=''></td>
</tr>
<tr>
<td class="titre2">Entrer a nouveau:</td>
<td><input type=password name='passwd1' value=''></td>
</tr>
<tr>
<td ></td>
</table>

</div>
<table width="80%" align="center" >
<tr>
<br>
<td align="center"><img src="images/user_add.jpg" height="20"/><input type='submit' name='envoi' value='Enregistrer' /></td>

</tr>
</FORM>

</table>

<?
$login=$_POST['login'];
$password=$_POST['passwd'];
$password1=$_POST['passwd1'];

if ($password==$password1)
{
$pass_crypte=crypt($_POST['passwd']);

// On crypte le mot de passe
if (isset($_POST['envoi']) && isset($_POST['login']) && isset($_POST['passwd']) && isset($_POST['passwd1']))
{
echo $pass_crypte;
exec("sudo -u root script/adduser.sh $login $pass_crypte");
}
}
else
{ echo '<script> alert("Erreur: mot de passe incorrect,veuillez remplir les champs vides")</script>';}
// fin envoi
?>

</body>
</html>

[/CODE]

le script adduser.sh contient:
[CODE]
#!/bin/bash

sudo -u root printf "$1:$2" > /var/www/pfe/.htpasswd

[/CODE]

mon problème est que le contenu de la variable $pass_crypte n'est pas recopié entiérement dans le fichier .htpasswd.

par exemple pour le login='samou', password="kikou"

en affichant le contenu $pass_crypte sur la page elle donne : $1$m393mvlm$/MrM5offlmzk46U.sjlIG. mais en consultant le .htpasswd, je trouve seulement la ligne:

samou:$/MrM5offlmzk46U.sjlIG.

(il me recopie pas le mot de passe chiffré entièrement)

aidez moi s'il vous plait
merci

6 réponses

  1. salut,
    et si tu essaye ca dictement en console, ca donne quoi ?
    sudo -u root script/adduser.sh samou $1$m393mvlm$/MrM5offlmzk46U.sjlIG.

    comme ca on saura si le pb vient du shell ou de php
    1. ca donne le même résultat
  2. c'est donc un problème de ton shell qui récupère mal le 2ème argument. c'est peut-être a cause des $ dans ta chaine. Ton shell croit que c'est des variables et cherche à les interpréter.
    1. oui ça doit être ça

      éspérant que quelqu'un pourra m'aider dans ce cas la
  3. est-ce que cette commande marche ?
    sudo -u root printf samou $1$m393mvlm$/MrM5offlmzk46U.sjlIG. > /var/www/pfe/.htpasswd

    Si c'est oui, il te suffit de parcourir ta chaine coté php en remplacant les $ par autre chose et de faire la manip inverse une fois les argument recupéré par ton shell.

    Si ca marche pas, j'ai pas d'idée
    1. Si le problème vient de ton shell qui essaye d interpréter les $ il suffit de les antislasher une fois : \$1\$m393mvlm\$

      Avec un expression régulière ca doit être possible
      1. j'ai finalement trouvé, il suffit de rajouter deux cotes autour du second argument:

        sudo -u root script/adduser.sh samou '$1$m393mvlm$/MrM5offlmzk46U.sjlIG.'

        ;) a+