Problème avec php (formulaire et shell)

Résolu/Fermé
lamou23 Messages postés 178 Date d'inscription lundi 11 janvier 2010 Statut Membre Dernière intervention 21 mars 2011 - 7 juil. 2010 à 14:42
lamou23 Messages postés 178 Date d'inscription lundi 11 janvier 2010 Statut Membre Dernière intervention 21 mars 2011 - 7 juil. 2010 à 18:45
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
A voir également:

6 réponses

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
lamou23 Messages postés 178 Date d'inscription lundi 11 janvier 2010 Statut Membre Dernière intervention 21 mars 2011
7 juil. 2010 à 15:04
ca donne le même résultat
0
lamou23 Messages postés 178 Date d'inscription lundi 11 janvier 2010 Statut Membre Dernière intervention 21 mars 2011
7 juil. 2010 à 15:04
ça donne le même résultat
0
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
lamou23 Messages postés 178 Date d'inscription lundi 11 janvier 2010 Statut Membre Dernière intervention 21 mars 2011
7 juil. 2010 à 15:30
oui ça doit être ça

éspérant que quelqu'un pourra m'aider dans ce cas la
0
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fxtaa Messages postés 1050 Date d'inscription mardi 20 octobre 2009 Statut Membre Dernière intervention 2 avril 2015 74
7 juil. 2010 à 15:47
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
lamou23 Messages postés 178 Date d'inscription lundi 11 janvier 2010 Statut Membre Dernière intervention 21 mars 2011
7 juil. 2010 à 18:45
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