diff --git a/ecrire/inc_auth_spip.php3 b/ecrire/inc_auth_spip.php3 index 6e49cb14028076bd973b486f47f4d2a12316a836..7f50d53711e74b52bd341e08a840360af44c033d 100644 --- a/ecrire/inc_auth_spip.php3 +++ b/ecrire/inc_auth_spip.php3 @@ -12,8 +12,12 @@ class Auth_spip { return true; } + // Verification du mot passe crypte (javascript) function verifier_challenge_md5($login, $mdpass_actuel, $mdpass_futur) { - $query = "SELECT * FROM spip_auteurs WHERE login='".addslashes($login)."' AND pass='".addslashes($mdpass_actuel)."' AND statut<>'5poubelle' AND source='spip'"; + // Interdire mot de passe vide + if ($mdpass_actuel == '') return false; + + $query = "SELECT * FROM spip_auteurs WHERE login='".addslashes($login)."' AND pass='".addslashes($mdpass_actuel)."' AND statut<>'5poubelle'"; $result = spip_query($query); if ($row = spip_fetch_array($result)) { @@ -28,7 +32,18 @@ class Auth_spip { return false; } + // Verification du mot passe en clair (sans javascript) function verifier($login, $pass) { + // Interdire mot de passe vide + if ($pass == '') return false; + + $query = "SELECT alea_actuel, alea_futur FROM spip_auteurs WHERE login='".addslashes($login)."'"; + $result = spip_query($query); + if ($row = spip_fetch_array($result)) { + $md5pass = md5($row['alea_actuel'] . $session_password); + $md5next = md5($row['alea_futur'] . $session_password); + return verifier_challenge_md5($login, $md5pass, $md5next); + } return false; } diff --git a/inc-login.php3 b/inc-login.php3 index 93152d733e7c8be7a6cac4d7acd419952d5597d1..7fae32a447fce979331c31d2e218d45d43a2d9bd 100644 --- a/inc-login.php3 +++ b/inc-login.php3 @@ -108,21 +108,36 @@ function login($cible = '', $prive = 'prive', $message_login='') { $flag_autres_sources = $GLOBALS['ldap_present']; - // quels sont les aleas a passer ? if ($login) { + $statut_login = 0; // statut inconnu $login = addslashes($login); - $query = "SELECT * FROM spip_auteurs WHERE login='$login' AND statut!='5poubelle'"; + $query = "SELECT * FROM spip_auteurs WHERE login='$login'"; $result = spip_query($query); if ($row = spip_fetch_array($result)) { - $id_auteur = $row['id_auteur']; - $source_auteur = $row['source']; - $alea_actuel = $row['alea_actuel']; - $alea_futur = $row['alea_futur']; - if ($row['prefs']) { - $prefs = unserialize($row['prefs']); - $rester_checked = ($prefs['cnx'] == 'perma' ? ' checked':''); + if ($row['statut'] == '5poubelle' OR $row['pass'] == '') { + $statut_login = -1; // refus + } else { + + $statut_login = 1; // login connu + + // Quels sont les aleas a passer pour le javascript ? + if ($row['source'] == 'spip') { + $id_auteur = $row['id_auteur']; + $source_auteur = $row['source']; + $alea_actuel = $row['alea_actuel']; + $alea_futur = $row['alea_futur']; + } + + // Bouton duree de connexion + if ($row['prefs']) { + $prefs = unserialize($row['prefs']); + $rester_checked = ($prefs['cnx'] == 'perma' ? ' checked':''); + } } - } else if (!$flag_autres_sources) { + } + + // login inconnu (sauf LDAP) ou refuse + if ($statut_login == -1 OR ($statut_login == 0 AND !$flag_autres_sources)) { $erreur = _T('login_identifiant_inconnu', array('login' => htmlspecialchars($login))); $login = ''; @spip_setcookie("spip_admin", "", time() - 3600); diff --git a/spip_cookie.php3 b/spip_cookie.php3 index 78f9fa5af17fad6def94a4f6e689095708051315..ee06baab87e09a3e98482ac07d17b9def8661cd3 100644 --- a/spip_cookie.php3 +++ b/spip_cookie.php3 @@ -92,20 +92,6 @@ if ($essai_login == "oui") { $login = $session_login; $pass = $session_password; - // Recuperer le mot de passe en champ hidden - if ($session_password_md5) { // mot passe en md5 - $md5pass = $session_password_md5; - $md5next = $next_session_password_md5; - } - else if ($session_password) { // mot passe en clair - $query = "SELECT alea_actuel, alea_futur FROM spip_auteurs WHERE login='".addslashes($login)."' AND statut!='5poubelle'"; - $result = spip_query($query); - if ($row = spip_fetch_array($result)) { - $md5pass = md5($row['alea_actuel'] . $session_password); - $md5next = md5($row['alea_futur'] . $session_password); - } - } - // Essayer differentes methodes d'authentification $auths = array('spip'); if ($ldap_present) $auths[] = 'ldap'; @@ -117,7 +103,9 @@ if ($essai_login == "oui") { $classe_auth = "Auth_".$nom_auth; $auth = new $classe_auth; if ($auth->init()) { - $ok = $auth->verifier_challenge_md5($login, $md5pass, $md5next); + // Essayer les mots de passe md5 + $ok = $auth->verifier_challenge_md5($login, $session_password_md5, $next_session_password_md5); + // Sinon essayer avec le mot de passe en clair if (!$ok && $session_password) $ok = $auth->verifier($login, $session_password); } if ($ok) break; diff --git a/spip_pass.php3 b/spip_pass.php3 index 7f17fc6fb318db73e51ef73e6bac9831e8e233df..5f0b6ad1462f0db96ccac4abafe948dd917d6107 100644 --- a/spip_pass.php3 +++ b/spip_pass.php3 @@ -55,7 +55,7 @@ if ($email_oubli) { $email = addslashes($email_oubli); $res = spip_query("SELECT * FROM spip_auteurs WHERE email ='$email'"); if ($row = spip_fetch_array($res)) { - if ($row['statut'] == '5poubelle') + if ($row['statut'] == '5poubelle' OR $row['pass'] == '') $erreur = _T('pass_erreur_acces_refuse'); else { $cookie = creer_uniqid();