Problème avec php (formulaire et shell)

Résolu
lamou23 Messages postés 218 Statut Membre -  
lamou23 Messages postés 218 Statut Membre -
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. Francois
     
    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
    0
    1. lamou23 Messages postés 218 Statut Membre
       
      ca donne le même résultat
      0
  2. lamou23 Messages postés 218 Statut Membre
     
    ça donne le même résultat
    0
  3. Francois
     
    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.
    0
    1. lamou23 Messages postés 218 Statut Membre
       
      oui ça doit être ça

      éspérant que quelqu'un pourra m'aider dans ce cas la
      0
  4. Francois
     
    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
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. fxtaa Messages postés 1050 Date d'inscription   Statut Membre Dernière intervention   74
     
    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
    0
  7. lamou23 Messages postés 218 Statut Membre
     
    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+
    0