From 60f24d852376adf2078660e21c395bfae18f729c Mon Sep 17 00:00:00 2001 From: Cerdic Date: Thu, 21 Jun 2012 07:48:05 +0000 Subject: [PATCH] Report de r19621 : Ferme #2316 : en cas d'auth PHP il ne faut pas changer l'alea a chaque hit car cela empeche la verification des actions securisee On ajoute un argument $phpauth aux fonctions d'auth, qui est a true quand la fonction est appelee depuis lire_php_auth Pas de rupture de compat car si la methode ignore cet argument c'est qu'elle n'en a pas besoin --- ecrire/auth/ldap.php | 3 ++- ecrire/auth/spip.php | 6 ++++-- ecrire/inc/auth.php | 4 ++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/ecrire/auth/ldap.php b/ecrire/auth/ldap.php index a93c938c6..060182c96 100644 --- a/ecrire/auth/ldap.php +++ b/ecrire/auth/ldap.php @@ -42,10 +42,11 @@ if (!isset($GLOBALS['ldap_attributes']) OR !is_array($GLOBALS['ldap_attributes'] * @param string $login * @param string $pass * @param string $serveur + * @param bool $phpauth * @return string */ // http://doc.spip.org/@inc_auth_ldap_dist -function auth_ldap_dist ($login, $pass, $serveur='') { +function auth_ldap_dist ($login, $pass, $serveur='', $phpauth=false) { #spip_log("ldap $login " . ($pass ? "mdp fourni" : "mdp absent")); diff --git a/ecrire/auth/spip.php b/ecrire/auth/spip.php index a2679b02f..79e35c579 100644 --- a/ecrire/auth/spip.php +++ b/ecrire/auth/spip.php @@ -19,9 +19,10 @@ if (!defined('_ECRIRE_INC_VERSION')) return; * @param string $login * @param string $pass * @param string $serveur + * @param bool $phpauth * @return array|bool */ -function auth_spip_dist ($login, $pass, $serveur='') { +function auth_spip_dist ($login, $pass, $serveur='', $phpauth=false) { // retrouver le login $login = auth_spip_retrouver_login($login); @@ -68,7 +69,8 @@ function auth_spip_dist ($login, $pass, $serveur='') { if (!$row) return array(); // fait tourner le codage du pass dans la base - if ($shanext) { + // sauf si phpauth : cela reviendrait a changer l'alea a chaque hit, et aucune action verifiable par securiser_action() + if ($shanext AND !$phpauth) { include_spip('inc/acces'); // pour creer_uniqid @sql_update('spip_auteurs', array('alea_actuel' => 'alea_futur', 'pass' => sql_quote($shanext,$serveur,'text'), 'alea_futur' => sql_quote(creer_uniqid(),$serveur,'text')), "id_auteur=" . $row['id_auteur'].' AND pass IN ('.sql_quote($shapass,$serveur,'text').', '.sql_quote($md5pass,$serveur,'text').')','',$serveur); diff --git a/ecrire/inc/auth.php b/ecrire/inc/auth.php index 99981376c..8b7237f02 100644 --- a/ecrire/inc/auth.php +++ b/ecrire/inc/auth.php @@ -628,7 +628,7 @@ function lire_php_auth($login, $pw, $serveur=''){ if (!$row) { if (spip_connect_ldap($serveur) AND $auth_ldap = charger_fonction('ldap', 'auth', true)) - return $auth_ldap($login, $pw, $serveur); + return $auth_ldap($login, $pw, $serveur, true); return false; } // su pas de source definie @@ -639,7 +639,7 @@ function lire_php_auth($login, $pw, $serveur=''){ $auteur=''; if ($auth) - $auteur = $auth($login, $pw, $serveur); + $auteur = $auth($login, $pw, $serveur, true); // verifier que ce n'est pas un message d'erreur if (is_array($auteur) AND count($auteur)) return $auteur;