diff --git a/htdocs/conf/conf.class.php b/htdocs/conf/conf.class.php index 1df733aaebd..a0c43774c86 100644 --- a/htdocs/conf/conf.class.php +++ b/htdocs/conf/conf.class.php @@ -105,8 +105,8 @@ class Conf $db->free($result); - // On reprend parametres du conf.php - //... Mettre les param + // On reprend parametres du fichier de config conf.php + // \TODO Mettre tous les param du fichier conf dans une propriété de la classe $this->password_encrypted=$this->global->DATABASE_PWD_ENCRYPTED; diff --git a/htdocs/install/etape5.php b/htdocs/install/etape5.php index 52c49e0896b..ea080f50e86 100644 --- a/htdocs/install/etape5.php +++ b/htdocs/install/etape5.php @@ -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.= ",'".$_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."')"; //print "sql=".$sql." ".mysql_errno($db->db); $resql=$db->query($sql); diff --git a/htdocs/langs/en_US/users.lang b/htdocs/langs/en_US/users.lang index 1a697e7f652..3a8985c3fc8 100755 --- a/htdocs/langs/en_US/users.lang +++ b/htdocs/langs/en_US/users.lang @@ -21,14 +21,18 @@ DeleteUser=Delete DeleteAUser=Delete a user DisableGroup=Disable DisableAGroup=Disable a group +EnableAUser=Enable a user +EnableAGroup=Enable a group DeleteGroup=Delete DeleteAGroup=Delete a group -ConfirmDisableUser=Are you sure you want to disable user %s ? -ConfirmDisableGroup=Are you sure you want to disable group %s ? -ConfirmDeleteUser=Are you sure you want to delete user %s ? -ConfirmDeleteGroup=Are you sure you want to delete group %s ? -ConfirmReinitPassword=Are you sure you want to generate a new password for user %s ? -ConfirmSendNewPassword=Are you sure you want to generate and send new password for user %s ? +ConfirmDisableUser=Are you sure you want to disable user %s ? +ConfirmDisableGroup=Are you sure you want to disable group %s ? +ConfirmDeleteUser=Are you sure you want to delete user %s ? +ConfirmDeleteGroup=Are you sure you want to delete group %s ? +ConfirmEnableUser=Are you sure you want to enable user %s ? +ConfirmEnableGroup=Are you sure you want to enable group %s ? +ConfirmReinitPassword=Are you sure you want to generate a new password for user %s ? +ConfirmSendNewPassword=Are you sure you want to generate and send new password for user %s ? NewUser=New user CreateUser=Create user SearchAGroup=Search a group diff --git a/htdocs/langs/fr_FR/users.lang b/htdocs/langs/fr_FR/users.lang index 87a8888110f..c28a26974b6 100755 --- a/htdocs/langs/fr_FR/users.lang +++ b/htdocs/langs/fr_FR/users.lang @@ -21,14 +21,18 @@ DeleteUser=Supprimer DeleteAUser=Supprimer un utilisateur DisableGroup=Désactiver DisableAGroup=Désactiver un groupe +EnableAUser=Réactiver un utilisateur +EnableAGroup=Réactiver un groupe DeleteGroup=Supprimer DeleteAGroup=Supprimer un groupe -ConfirmDisableUser=Êtes-vous sûr de vouloir désactiver l'utilisateur %s ? -ConfirmDisableGroup=Êtes-vous sûr de vouloir désactiver le groupe %s ? -ConfirmDeleteUser=Êtes-vous sûr de vouloir supprimer l'utilisateur %s ? -ConfirmDeleteGroup=Êtes-vous sûr de vouloir supprimer le groupe %s ? -ConfirmReinitPassword=Êtes-vous sûr de vouloir générer un nouveau mot de passe pour l'utilisateur %s ? -ConfirmSendNewPassword=Êtes-vous sûr de vouloir générer et envoyer un nouveau mot de passe pour l'utilisateur %s ? +ConfirmDisableUser=Êtes-vous sûr de vouloir désactiver l'utilisateur %s ? +ConfirmDisableGroup=Êtes-vous sûr de vouloir désactiver le groupe %s ? +ConfirmDeleteUser=Êtes-vous sûr de vouloir supprimer l'utilisateur %s ? +ConfirmDeleteGroup=Êtes-vous sûr de vouloir supprimer le groupe %s ? +ConfirmEnableUser=Êtes-vous sûr de vouloir réactiver l'utilisateur %s ? +ConfirmEnableGroup=Êtes-vous sûr de vouloir réactiver le groupe %s ? +ConfirmReinitPassword=Êtes-vous sûr de vouloir générer un nouveau mot de passe pour l'utilisateur %s ? +ConfirmSendNewPassword=Êtes-vous sûr de vouloir générer et envoyer un nouveau mot de passe pour l'utilisateur %s ? NewUser=Nouvel utilisateur CreateUser=Créer l'utilisateur SearchAGroup=Rechercher un groupe diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 5f9942f0de2..fecc6161634 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -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; - if ($conf->global->DATABASE_PWD_ENCRYPTED) + if ($conf->password_encrypted) { $cryptType = "md5"; } diff --git a/htdocs/user.class.php b/htdocs/user.class.php index fcd8e3d1c61..1c88403d1c5 100644 --- a/htdocs/user.class.php +++ b/htdocs/user.class.php @@ -60,8 +60,8 @@ class User var $user_mobile; var $admin; var $login; - var $pass; - var $oldpass; + var $pass; // Mot de passe en clair + var $pass_indatabase; // Mot de passe crypté en base var $datec; var $datem; var $societe_id; @@ -105,6 +105,8 @@ class User */ function fetch($login='') { + global $conf; + // Recupere utilisateur $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,"; @@ -139,9 +141,10 @@ class User $this->fullname = trim($this->prenom . ' ' . $this->nom); $this->code = $obj->code; $this->login = $obj->login; - $this->pass = $obj->pass; - $this->office_phone = $obj->office_phone; - $this->office_fax = $obj->office_fax; + $this->pass_indatabase = $obj->pass; + if (! $conf->password_encrypted) $this->pass = $obj->pass; + $this->office_phone = $obj->office_phone; + $this->office_fax = $obj->office_fax; $this->user_mobile = $obj->user_mobile; $this->email = $obj->email; $this->admin = $obj->admin; @@ -240,7 +243,7 @@ class User */ function addrights($rid,$allmodule='',$allperms='') { - dolibarr_syslog("User::addrights $rid, $allmodule, $allperms"); + dolibarr_syslog("User.class::addrights $rid, $allmodule, $allperms"); $err=0; $whereforadd=''; @@ -730,7 +733,7 @@ class User else { $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(); return -2; @@ -739,7 +742,7 @@ class User else { $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(); return -1; @@ -748,7 +751,7 @@ class User else { // $this->error deja positionné - dolibarr_syslog("User::create_from_contact - 0"); + dolibarr_syslog("User.class::create_from_contact - 0"); $this->db->rollback(); return $result; @@ -800,35 +803,44 @@ class User */ function update($notrigger=0) { - global $conf,$langs; + global $conf,$langs,$user; // Nettoyage parametres $this->nom=trim($this->nom); $this->prenom=trim($this->prenom); $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->note=trim($this->note); $this->admin=$this->admin?$this->admin:0; 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; + // 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 .= " name = '".addslashes($this->nom)."'"; $sql .= ", firstname = '".addslashes($this->prenom)."'"; $sql .= ", login = '".addslashes($this->login)."'"; - if ($this->pass) $sql .= ", pass = '".addslashes($this->pass)."'"; $sql .= ", admin = ".$this->admin; $sql .= ", office_phone = '$this->office_phone'"; $sql .= ", office_fax = '$this->office_fax'"; @@ -901,33 +913,38 @@ class User /** * \brief Change le mot de passe d'un utilisateur * \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) * \return string mot de passe, < 0 si erreur */ - function password($user, $password='', $isencrypted = 0) + function password($user, $password='', $isencrypted=0) { 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) { + // TODO Mettre appel au module de génération de mot de passe + $longueurmotdepasse=8; $password = strtolower(substr(md5(uniqid(rand())),0,$longueurmotdepasse)); } + // Cryptage mot de passe if ($isencrypted) { // Crypte avec systeme encodage par defaut du PHP //$sqlpass = crypt($password, makesalt()); - $sqlpass = md5($password); + $password_indatabase = md5($password); } 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; $result = $this->db->query($sql); @@ -936,6 +953,7 @@ class User if ($this->db->affected_rows()) { $this->pass=$password; + $this->pass_indatabase=$password_indatabase; // Appel des triggers include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php"); diff --git a/htdocs/user/fiche.php b/htdocs/user/fiche.php index 21d9fc2226b..e7065121f47 100644 --- a/htdocs/user/fiche.php +++ b/htdocs/user/fiche.php @@ -245,7 +245,7 @@ if ($_POST["action"] == 'update' && ! $_POST["cancel"] && $caneditfield) $edituser = new User($db, $_GET["id"]); $edituser->fetch(); - $edituser->oldpass = $edituser->pass; + //$edituser->oldpass_indatabase = $edituser->pass_indatabase; $edituser->nom = trim($_POST["nom"]); $edituser->prenom = trim($_POST["prenom"]); @@ -734,7 +734,7 @@ else */ 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 '
'; } @@ -812,9 +812,16 @@ else } else { - print ''.eregi_replace('.','*',$fuser->pass); + print ''; + 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 ""; } - print "\n"; + print "\n"; // Administrateur print ''.$langs->trans("Administrator").'';