Fix: Les fonctions de modifications de mot de passe ne fonctionnait pas en mode "cryptage"

This commit is contained in:
Laurent Destailleur 2006-11-25 21:39:58 +00:00
parent 160d128aba
commit 3ee2424bde
7 changed files with 82 additions and 49 deletions

View File

@ -105,8 +105,8 @@ class Conf
$db->free($result); $db->free($result);
// On reprend parametres du conf.php // On reprend parametres du fichier de config conf.php
//... Mettre les param // \TODO Mettre tous les param du fichier conf dans une propriété de la classe
$this->password_encrypted=$this->global->DATABASE_PWD_ENCRYPTED; $this->password_encrypted=$this->global->DATABASE_PWD_ENCRYPTED;

View File

@ -124,7 +124,7 @@ if ($_POST["action"] == "set" || $_POST["action"] == "upgrade")
$sql = "INSERT INTO llx_user(datec,login,pass,admin,name,code) VALUES (now()"; $sql = "INSERT INTO llx_user(datec,login,pass,admin,name,code) VALUES (now()";
$sql.= ",'".$_POST["login"]."'"; $sql.= ",'".$_POST["login"]."'";
$sql.= ",'".($conf->global->DATABASE_PWD_ENCRYPTED?md5($_POST["pass"]):$_POST["pass"])."'"; $sql.= ",'".($conf->password_encrypted?md5($_POST["pass"]):$_POST["pass"])."'";
$sql.= ",1,'Administrateur','AD".$code."')"; $sql.= ",1,'Administrateur','AD".$code."')";
//print "sql=".$sql." ".mysql_errno($db->db); //print "sql=".$sql." ".mysql_errno($db->db);
$resql=$db->query($sql); $resql=$db->query($sql);

View File

@ -21,14 +21,18 @@ DeleteUser=Delete
DeleteAUser=Delete a user DeleteAUser=Delete a user
DisableGroup=Disable DisableGroup=Disable
DisableAGroup=Disable a group DisableAGroup=Disable a group
EnableAUser=Enable a user
EnableAGroup=Enable a group
DeleteGroup=Delete DeleteGroup=Delete
DeleteAGroup=Delete a group DeleteAGroup=Delete a group
ConfirmDisableUser=Are you sure you want to disable user %s ? ConfirmDisableUser=Are you sure you want to disable user <b>%s</b> ?
ConfirmDisableGroup=Are you sure you want to disable group %s ? ConfirmDisableGroup=Are you sure you want to disable group <b>%s</b> ?
ConfirmDeleteUser=Are you sure you want to delete user %s ? ConfirmDeleteUser=Are you sure you want to delete user <b>%s</b> ?
ConfirmDeleteGroup=Are you sure you want to delete group %s ? ConfirmDeleteGroup=Are you sure you want to delete group <b>%s</b> ?
ConfirmReinitPassword=Are you sure you want to generate a new password for user %s ? ConfirmEnableUser=Are you sure you want to enable user <b>%s</b> ?
ConfirmSendNewPassword=Are you sure you want to generate and send new password for user %s ? ConfirmEnableGroup=Are you sure you want to enable group <b>%s</b> ?
ConfirmReinitPassword=Are you sure you want to generate a new password for user <b>%s</b> ?
ConfirmSendNewPassword=Are you sure you want to generate and send new password for user <b>%s</b> ?
NewUser=New user NewUser=New user
CreateUser=Create user CreateUser=Create user
SearchAGroup=Search a group SearchAGroup=Search a group

View File

@ -21,14 +21,18 @@ DeleteUser=Supprimer
DeleteAUser=Supprimer un utilisateur DeleteAUser=Supprimer un utilisateur
DisableGroup=Désactiver DisableGroup=Désactiver
DisableAGroup=Désactiver un groupe DisableAGroup=Désactiver un groupe
EnableAUser=Réactiver un utilisateur
EnableAGroup=Réactiver un groupe
DeleteGroup=Supprimer DeleteGroup=Supprimer
DeleteAGroup=Supprimer un groupe DeleteAGroup=Supprimer un groupe
ConfirmDisableUser=Êtes-vous sûr de vouloir désactiver l'utilisateur %s ? ConfirmDisableUser=Êtes-vous sûr de vouloir désactiver l'utilisateur <b>%s</b> ?
ConfirmDisableGroup=Êtes-vous sûr de vouloir désactiver le groupe %s ? ConfirmDisableGroup=Êtes-vous sûr de vouloir désactiver le groupe <b>%s</b> ?
ConfirmDeleteUser=Êtes-vous sûr de vouloir supprimer l'utilisateur %s ? ConfirmDeleteUser=Êtes-vous sûr de vouloir supprimer l'utilisateur <b>%s</b> ?
ConfirmDeleteGroup=Êtes-vous sûr de vouloir supprimer le groupe %s ? ConfirmDeleteGroup=Êtes-vous sûr de vouloir supprimer le groupe <b>%s</b> ?
ConfirmReinitPassword=Êtes-vous sûr de vouloir générer un nouveau mot de passe pour l'utilisateur %s ? ConfirmEnableUser=Êtes-vous sûr de vouloir réactiver l'utilisateur <b>%s</b> ?
ConfirmSendNewPassword=Êtes-vous sûr de vouloir générer et envoyer un nouveau mot de passe pour l'utilisateur %s ? ConfirmEnableGroup=Êtes-vous sûr de vouloir réactiver le groupe <b>%s</b> ?
ConfirmReinitPassword=Êtes-vous sûr de vouloir générer un nouveau mot de passe pour l'utilisateur <b>%s</b> ?
ConfirmSendNewPassword=Êtes-vous sûr de vouloir générer et envoyer un nouveau mot de passe pour l'utilisateur <b>%s</b> ?
NewUser=Nouvel utilisateur NewUser=Nouvel utilisateur
CreateUser=Créer l'utilisateur CreateUser=Créer l'utilisateur
SearchAGroup=Rechercher un groupe SearchAGroup=Rechercher un groupe

View File

@ -107,7 +107,7 @@ if (! session_id() && ! isset($_SESSION["dol_user"]) && ! isset($_SESSION["dol_
$pear = $dolibarr_main_db_type.'://'.$dolibarr_main_db_user.':'.$dolibarr_main_db_pass.'@'.$dolibarr_main_db_host.'/'.$dolibarr_main_db_name; $pear = $dolibarr_main_db_type.'://'.$dolibarr_main_db_user.':'.$dolibarr_main_db_pass.'@'.$dolibarr_main_db_host.'/'.$dolibarr_main_db_name;
if ($conf->global->DATABASE_PWD_ENCRYPTED) if ($conf->password_encrypted)
{ {
$cryptType = "md5"; $cryptType = "md5";
} }

View File

@ -60,8 +60,8 @@ class User
var $user_mobile; var $user_mobile;
var $admin; var $admin;
var $login; var $login;
var $pass; var $pass; // Mot de passe en clair
var $oldpass; var $pass_indatabase; // Mot de passe crypté en base
var $datec; var $datec;
var $datem; var $datem;
var $societe_id; var $societe_id;
@ -105,6 +105,8 @@ class User
*/ */
function fetch($login='') function fetch($login='')
{ {
global $conf;
// Recupere utilisateur // Recupere utilisateur
$sql = "SELECT u.rowid, u.name, u.firstname, u.email, u.office_phone, u.office_fax, u.user_mobile,"; $sql = "SELECT u.rowid, u.name, u.firstname, u.email, u.office_phone, u.office_fax, u.user_mobile,";
$sql.= " u.code, u.admin, u.login, u.pass, u.webcal_login, u.note,"; $sql.= " u.code, u.admin, u.login, u.pass, u.webcal_login, u.note,";
@ -139,7 +141,8 @@ class User
$this->fullname = trim($this->prenom . ' ' . $this->nom); $this->fullname = trim($this->prenom . ' ' . $this->nom);
$this->code = $obj->code; $this->code = $obj->code;
$this->login = $obj->login; $this->login = $obj->login;
$this->pass = $obj->pass; $this->pass_indatabase = $obj->pass;
if (! $conf->password_encrypted) $this->pass = $obj->pass;
$this->office_phone = $obj->office_phone; $this->office_phone = $obj->office_phone;
$this->office_fax = $obj->office_fax; $this->office_fax = $obj->office_fax;
$this->user_mobile = $obj->user_mobile; $this->user_mobile = $obj->user_mobile;
@ -240,7 +243,7 @@ class User
*/ */
function addrights($rid,$allmodule='',$allperms='') function addrights($rid,$allmodule='',$allperms='')
{ {
dolibarr_syslog("User::addrights $rid, $allmodule, $allperms"); dolibarr_syslog("User.class::addrights $rid, $allmodule, $allperms");
$err=0; $err=0;
$whereforadd=''; $whereforadd='';
@ -730,7 +733,7 @@ class User
else else
{ {
$this->error=$this->db->error()." - $sql"; $this->error=$this->db->error()." - $sql";
dolibarr_syslog("User::create_from_contact - 20 - ".$this->error); dolibarr_syslog("User.class::create_from_contact - 20 - ".$this->error);
$this->db->rollback(); $this->db->rollback();
return -2; return -2;
@ -739,7 +742,7 @@ class User
else else
{ {
$this->error=$this->db->error()." - $sql"; $this->error=$this->db->error()." - $sql";
dolibarr_syslog("User::create_from_contact - 10 - ".$this->error); dolibarr_syslog("User.class::create_from_contact - 10 - ".$this->error);
$this->db->rollback(); $this->db->rollback();
return -1; return -1;
@ -748,7 +751,7 @@ class User
else else
{ {
// $this->error deja positionné // $this->error deja positionné
dolibarr_syslog("User::create_from_contact - 0"); dolibarr_syslog("User.class::create_from_contact - 0");
$this->db->rollback(); $this->db->rollback();
return $result; return $result;
@ -800,35 +803,44 @@ class User
*/ */
function update($notrigger=0) function update($notrigger=0)
{ {
global $conf,$langs; global $conf,$langs,$user;
// Nettoyage parametres // Nettoyage parametres
$this->nom=trim($this->nom); $this->nom=trim($this->nom);
$this->prenom=trim($this->prenom); $this->prenom=trim($this->prenom);
$this->login=trim($this->login); $this->login=trim($this->login);
if ($conf->global->DATABASE_PWD_ENCRYPTED && $this->oldpass != $this->pass)
{
$this->pass = md5($this->pass);
}
else
{
$this->pass=trim($this->pass); $this->pass=trim($this->pass);
}
$this->email=trim($this->email); $this->email=trim($this->email);
$this->note=trim($this->note); $this->note=trim($this->note);
$this->admin=$this->admin?$this->admin:0; $this->admin=$this->admin?$this->admin:0;
if (!strlen($this->code)) $this->code = $this->login; if (!strlen($this->code)) $this->code = $this->login;
dolibarr_syslog("User::update notrigger=".$notrigger." nom=".$this->nom.", prenom=".$this->prenom); dolibarr_syslog("User.class::update notrigger=".$notrigger." nom=".$this->nom.", prenom=".$this->prenom);
$error=0; $error=0;
// Mise a jour mot de passe
if ($this->pass)
{
if ($conf->password_encrypted)
{
// On met a jour systematiquement
$this->password($user,$this->pass,$conf->password_encrypted);
}
else
{
if ($this->pass != $this->pass_indatabase)
{
// Si mot de passe saisi et différent de celui en base
$this->password($user,$this->pass,$conf->password_encrypted);
}
}
}
// Mise a jour autres infos
$sql = "UPDATE ".MAIN_DB_PREFIX."user SET "; $sql = "UPDATE ".MAIN_DB_PREFIX."user SET ";
$sql .= " name = '".addslashes($this->nom)."'"; $sql .= " name = '".addslashes($this->nom)."'";
$sql .= ", firstname = '".addslashes($this->prenom)."'"; $sql .= ", firstname = '".addslashes($this->prenom)."'";
$sql .= ", login = '".addslashes($this->login)."'"; $sql .= ", login = '".addslashes($this->login)."'";
if ($this->pass) $sql .= ", pass = '".addslashes($this->pass)."'";
$sql .= ", admin = ".$this->admin; $sql .= ", admin = ".$this->admin;
$sql .= ", office_phone = '$this->office_phone'"; $sql .= ", office_phone = '$this->office_phone'";
$sql .= ", office_fax = '$this->office_fax'"; $sql .= ", office_fax = '$this->office_fax'";
@ -901,33 +913,38 @@ class User
/** /**
* \brief Change le mot de passe d'un utilisateur * \brief Change le mot de passe d'un utilisateur
* \param user Object user de l'utilisateur qui fait la modification * \param user Object user de l'utilisateur qui fait la modification
* \param password Nouveau mot de passe (généré par defaut si non communiqué) * \param password Nouveau mot de passe (à générer si non communiqué)
* \param isencrypted 0 ou 1 si il faut crypter le mot de passe en base (0 par défaut) * \param isencrypted 0 ou 1 si il faut crypter le mot de passe en base (0 par défaut)
* \return string mot de passe, < 0 si erreur * \return string mot de passe, < 0 si erreur
*/ */
function password($user, $password='', $isencrypted = 0) function password($user, $password='', $isencrypted=0)
{ {
global $langs; global $langs;
$longueurmotdepasse=8;
dolibarr_syslog("User.class::password user=".$user." password=--hidden-- isencrypted=".$isencrypted); dolibarr_syslog("User.class::password user=".$user." password=".eregi_replace('.','*',$password)." isencrypted=".$isencrypted);
// Si nouveau mot de passe non communiqué, on génère par module
if (! $password) if (! $password)
{ {
// TODO Mettre appel au module de génération de mot de passe
$longueurmotdepasse=8;
$password = strtolower(substr(md5(uniqid(rand())),0,$longueurmotdepasse)); $password = strtolower(substr(md5(uniqid(rand())),0,$longueurmotdepasse));
} }
// Cryptage mot de passe
if ($isencrypted) if ($isencrypted)
{ {
// Crypte avec systeme encodage par defaut du PHP // Crypte avec systeme encodage par defaut du PHP
//$sqlpass = crypt($password, makesalt()); //$sqlpass = crypt($password, makesalt());
$sqlpass = md5($password); $password_indatabase = md5($password);
} }
else else
{ {
$sqlpass = $password; $password_indatabase = $password;
} }
$sql = "UPDATE ".MAIN_DB_PREFIX."user SET pass = '".addslashes($sqlpass)."'";
// Mise a jour
$sql = "UPDATE ".MAIN_DB_PREFIX."user SET pass = '".addslashes($password_indatabase)."'";
$sql.= " WHERE rowid = ".$this->id; $sql.= " WHERE rowid = ".$this->id;
$result = $this->db->query($sql); $result = $this->db->query($sql);
@ -936,6 +953,7 @@ class User
if ($this->db->affected_rows()) if ($this->db->affected_rows())
{ {
$this->pass=$password; $this->pass=$password;
$this->pass_indatabase=$password_indatabase;
// Appel des triggers // Appel des triggers
include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php"); include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php");

View File

@ -245,7 +245,7 @@ if ($_POST["action"] == 'update' && ! $_POST["cancel"] && $caneditfield)
$edituser = new User($db, $_GET["id"]); $edituser = new User($db, $_GET["id"]);
$edituser->fetch(); $edituser->fetch();
$edituser->oldpass = $edituser->pass; //$edituser->oldpass_indatabase = $edituser->pass_indatabase;
$edituser->nom = trim($_POST["nom"]); $edituser->nom = trim($_POST["nom"]);
$edituser->prenom = trim($_POST["prenom"]); $edituser->prenom = trim($_POST["prenom"]);
@ -734,7 +734,7 @@ else
*/ */
if ($action == 'enable') if ($action == 'enable')
{ {
$html->form_confirm("fiche.php?id=$fuser->id",$langs->trans("EnableAUser"),$langs->trans("ConfirmEnabledUser",$fuser->login),"confirm_enable"); $html->form_confirm("fiche.php?id=$fuser->id",$langs->trans("EnableAUser"),$langs->trans("ConfirmEnableUser",$fuser->login),"confirm_enable");
print '<br>'; print '<br>';
} }
@ -812,9 +812,16 @@ else
} }
else else
{ {
print '<td width="50%">'.eregi_replace('.','*',$fuser->pass); print '<td width="50%">';
if ($fuser->pass) print eregi_replace('.','*',$fuser->pass);
else
{
if ($user->admin) print $langs->trans("Crypted").': '.$fuser->pass_indatabase;
else print $langs->trans("Hidden");
} }
print "</td></tr>\n"; print "</td>";
}
print "</tr>\n";
// Administrateur // Administrateur
print '<tr><td width="25%" valign="top">'.$langs->trans("Administrator").'</td>'; print '<tr><td width="25%" valign="top">'.$langs->trans("Administrator").'</td>';