From d1e91ca68ceeaec2c833ad00ef68c7f3ee8cfc21 Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Sat, 24 Sep 2016 02:47:22 +0200 Subject: [PATCH] * [MOD] Improved user migration handling. * [MOD] All input strings are trimmed --- CHANGELOG | 4 +++- CHANGELOG-ES | 4 +++- inc/Auth.class.php | 35 +++++++++++++++++++++++------------ inc/DB.class.php | 26 ++++++++++++++------------ inc/Request.class.php | 2 +- inc/Upgrade.class.php | 2 +- inc/UserMigrate.class.php | 14 +++++++++----- 7 files changed, 54 insertions(+), 33 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index afcc2968..304fcea6 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,7 +1,9 @@ === ** v1.2.0.16 === -* [MOD] Add dot to LDAP group name chack regex. Thanks to @davidpsc. Closes #280 * [FIX] Fixed user migration from 1.1 +* [MOD] Add dot to LDAP group name chack regex. Thanks to @davidpsc. Closes #280 +* [MOD] Improved user migration handling. +* [MOD] All input strings are trimmed * [MOD] Update version === ** v1.2.0.15 === diff --git a/CHANGELOG-ES b/CHANGELOG-ES index 91000e96..19dc660d 100644 --- a/CHANGELOG-ES +++ b/CHANGELOG-ES @@ -1,7 +1,9 @@ === ** v1.2.0.16 === -* [MOD] Añadido punto a la expresión regular en la comprobación del nombre de grupo en LDAP. Gracias a @davidpsc. Closes #280 * [FIX] Corregida migración de usuario desde 1.1 +* [MOD] Añadido punto a la expresión regular en la comprobación del nombre de grupo en LDAP. Gracias a @davidpsc. Closes #280 +* [MOD] Mejorada la migración de usuarios +* [MOD] Todas las cadenas de entrada son recortadas sin espacios * [MOD] Actualizada versión === ** v1.2.0.15 === diff --git a/inc/Auth.class.php b/inc/Auth.class.php index 2e012bf1..cba7956f 100644 --- a/inc/Auth.class.php +++ b/inc/Auth.class.php @@ -40,7 +40,7 @@ class Auth * Autentificación de usuarios con LDAP. * * @param string $userLogin con el login del usuario - * @param string $userPass con la clave del usuario + * @param string $userPass con la clave del usuario * @return int|bool Número de error o boolean */ public static function authUserLDAP($userLogin, $userPass) @@ -153,27 +153,38 @@ class Auth * se ejecuta el proceso para actualizar la clave. * * @param string $userLogin con el login del usuario - * @param string $userPass con la clave del usuario + * @param string $userPass con la clave del usuario * @return bool */ public static function authUserMySQL($userLogin, $userPass) { - if (UserMigrate::checkUserIsMigrate($userLogin)) { - if (!UserMigrate::migrateUser($userLogin, $userPass)) { - return false; - } - } - - $query = 'SELECT user_login, user_pass, user_hashSalt ' + $query = /** @lang SQL */ + 'SELECT user_login, ' + . 'user_pass, ' + . 'user_hashSalt, ' + . 'BIN(user_isMigrate) AS user_isMigrate ' . 'FROM usrData ' - . 'WHERE user_login = :login AND user_isMigrate = 0 LIMIT 1'; + . 'WHERE user_login = :login LIMIT 1'; $data['login'] = $userLogin; $queryRes = DB::getResults($query, __FUNCTION__, $data); - return ($queryRes !== false - && $queryRes->user_pass == crypt($userPass, $queryRes->user_hashSalt)); + if ($queryRes === false) { + return false; + } + + $curHash = crypt($userPass, $queryRes->user_hashSalt); + + if (($queryRes->user_isMigrate == 1 + && UserMigrate::migrateUser($userLogin, $userPass, $curHash)) + || $queryRes->user_pass === $curHash + ){ + return true; +// return self::authUserMySQL($userLogin, $userPass); + } + + return false; } /** diff --git a/inc/DB.class.php b/inc/DB.class.php index 4000c45a..0d383dbf 100644 --- a/inc/DB.class.php +++ b/inc/DB.class.php @@ -35,19 +35,19 @@ class DB /** * @var string */ - static $txtError = ''; + public static $txtError = ''; /** * @var int */ - static $numError = 0; + public static $numError = 0; /** * @var int */ - static $lastNumRows = 0; + public static $lastNumRows = 0; /** * @var int */ - static $lastId = null; + public static $lastId = null; /** * @var bool Resultado como array */ @@ -169,7 +169,7 @@ class DB * @param $query string con la consulta a realizar * @param $querySource string con el nombre de la función que realiza la consulta * @param $data array con los datos de la consulta - * @return bool|array devuelve bool si hay un error. Devuelve array con el array de registros devueltos + * @return bool|array|object devuelve bool si hay un error. Devuelve array con el array de registros devueltos */ public static function getResults($query, $querySource, &$data = null) { @@ -246,9 +246,11 @@ class DB return $queryRes; } -// $queryRes->closeCursor(); - $this->_numRows = count($this->_lastResult); + } else { + $this->_numRows = $queryRes->rowCount(); + + return (int)$queryRes->errorCode() === 0; } } @@ -287,7 +289,7 @@ class DB continue; } - if ($param == 'blobcontent') { + if ($param === 'blobcontent') { $sth->bindValue($param, $value, \PDO::PARAM_LOB); } elseif (is_int($value)) { // error_log("INT: " . $param . " -> " . $value); @@ -309,7 +311,7 @@ class DB return $sth; } catch (\Exception $e) { - error_log("Exception: " . $e->getMessage()); + error_log('Exception: ' . $e->getMessage()); throw new SPException(SPException::SP_CRITICAL, $e->getMessage(), $e->getCode()); } } @@ -344,10 +346,10 @@ class DB if (!is_array($this->_stData)) { $queryRes = $db->query($query); - $num = intval($queryRes->fetchColumn()); + $num = (int)$queryRes->fetchColumn(); } else { if ($queryRes = $this->prepareQueryData($query, true)) { - $num = intval($queryRes->fetchColumn()); + $num = (int)$queryRes->fetchColumn(); } } @@ -355,7 +357,7 @@ class DB return $num; } catch (SPException $e) { - error_log("Exception: " . $e->getMessage()); + error_log('Exception: ' . $e->getMessage()); throw new SPException(SPException::SP_CRITICAL, $e->getMessage(), $e->getCode()); } } diff --git a/inc/Request.class.php b/inc/Request.class.php index a6b3fbc6..cb035c0e 100644 --- a/inc/Request.class.php +++ b/inc/Request.class.php @@ -135,7 +135,7 @@ class Request } if (is_string($value)) { - return ($sanitize === true) ? Html::sanitize($value) : (string)$value; + return ($sanitize === true) ? trim(Html::sanitize($value)) : trim((string)$value); } } diff --git a/inc/Upgrade.class.php b/inc/Upgrade.class.php index a7d0abab..137cc49a 100644 --- a/inc/Upgrade.class.php +++ b/inc/Upgrade.class.php @@ -235,7 +235,7 @@ class Upgrade return (Profile::migrateProfiles() && UserMigrate::migrateUsersGroup()); break; case 12002: - return (UserMigrate::setMigrateUsers()); + return UserMigrate::setMigrateUsers(); break; default: break; diff --git a/inc/UserMigrate.class.php b/inc/UserMigrate.class.php index 1e90cbe1..e37d84a3 100644 --- a/inc/UserMigrate.class.php +++ b/inc/UserMigrate.class.php @@ -57,11 +57,12 @@ class UserMigrate * * @param string $userLogin con el login del usuario * @param string $userPass con la clave del usuario - * @return bool + * @param string $hash con el hash de la clave actual + * @return bool Esta función actualiza la clave de un usuario que ha sido migrado desde phpPMS * * Esta función actualiza la clave de un usuario que ha sido migrado desde phpPMS */ - public static function migrateUser($userLogin, $userPass) + public static function migrateUser($userLogin, $userPass, $hash = '') { $passdata = UserPass::makeUserPassHash($userPass); @@ -73,18 +74,21 @@ class UserMigrate . 'WHERE user_login = :login ' . 'AND user_isMigrate = 1 ' . 'AND (user_pass = SHA1(CONCAT(user_hashSalt,:passOld)) ' - . 'OR user_pass = MD5(:passOldMd5)) LIMIT 1'; + . 'OR user_pass = MD5(:passOldMd5) OR user_pass = :passCur) LIMIT 1'; $data['pass'] = $passdata['pass']; $data['salt'] = $passdata['salt']; $data['login'] = $userLogin; $data['passOld'] = $userPass; $data['passOldMd5'] = $userPass; + $data['passCur'] = $hash; if (DB::getQuery($query, __FUNCTION__, $data) === false) { return false; } + $rows = DB::$lastNumRows; + $log = new Log(__FUNCTION__); $log->addDescription(_('Usuario actualizado')); $log->addDescription('Login: ' . $userLogin); @@ -92,7 +96,7 @@ class UserMigrate Email::sendEmail($log); - return true; + return $rows === 1; } /** @@ -110,7 +114,7 @@ class UserMigrate foreach ($queryRes as $user) { if (!Groups::addUsersForGroup(array($user->user_groupId), $user->user_id)) { - Log::writeNewLog(_('Migrar Grupos'), sprintf('%s (%s)'), _('Error al migrar grupo del usuario'), $user->user_id); + Log::writeNewLog(_('Migrar Grupos'), sprintf('%s (%s)', _('Error al migrar grupo del usuario'), $user->user_id)); } }