Skip to content
Extraits de code Groupes Projets
Valider feb489f5 rédigé par Fil's avatar Fil
Parcourir les fichiers

petite reprise du login, pour refuser les login (ou rappels de mots de passe)...

petite reprise du login, pour refuser les login (ou rappels de mots de passe) aux auteurs (source='spip') dont le pass est vide. La difficulté est que les (source='ldap') ont le droit d'avoir un champ pass vide.

A tester chez les LDAPeurs
parent 9d728538
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -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;
}
......
......@@ -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);
......
......@@ -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;
......
......@@ -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();
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter