From 79b4625ac1aa59f90f1ed18216aa847fcf52ceaf Mon Sep 17 00:00:00 2001 From: Fil <fil@rezo.net> Date: Sun, 14 Jul 2002 22:47:05 +0000 Subject: [PATCH] =?UTF-8?q?J'ai=20completement=20nettoye=20l'interface=20d?= =?UTF-8?q?e=20zap=5Fsession=20:=20c'est=20au=20moment=20o=C3=B9=20on=20a?= =?UTF-8?q?=20r=C3=A9ussi=20=C3=A0=20se=20loger=20qu'appara=C3=AEt=20un=20?= =?UTF-8?q?gros=20warning=20impossible=20=C3=A0=20manquer=20avec=20un=20bo?= =?UTF-8?q?uton=20proposant=20de=20zapper.=20La=20formulation=20elle-m?= =?UTF-8?q?=C3=AAme=20peut=20=C3=AAtre=20am=C3=A9lior=C3=A9e,=20mais=20je?= =?UTF-8?q?=20pense=20que=20c'est=20la=20bonne=20logique=20d'interface.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Je bricole aussi un peu login.php3 de manière à éviter des redirects, et, à terme, à pouvoir l'intégrer complètement dans inc_auth (ce qui permettra, en particulier, de pouvoir se connecter sur une page donnée sans être contraint de passer par index.php3... pas fini.) --- ecrire/inc_auth.php3 | 3 +- ecrire/inc_presentation.php3 | 14 ++++++++ ecrire/inc_session.php3 | 7 +++- ecrire/login.php3 | 68 ++++-------------------------------- spip_cookie.php3 | 35 +++++++++---------- 5 files changed, 44 insertions(+), 83 deletions(-) diff --git a/ecrire/inc_auth.php3 b/ecrire/inc_auth.php3 index 99330173e9..1b57a1a321 100644 --- a/ecrire/inc_auth.php3 +++ b/ecrire/inc_auth.php3 @@ -127,7 +127,8 @@ function auth() { // Si pas authentifie, demander login / mdp if (!$auth_login) { - @header("Location: ./login.php3"); +// @header("Location: ./login.php3"); + include('login.php3'); exit; } diff --git a/ecrire/inc_presentation.php3 b/ecrire/inc_presentation.php3 index 8b385bccee..42aace5664 100644 --- a/ecrire/inc_presentation.php3 +++ b/ecrire/inc_presentation.php3 @@ -1690,6 +1690,20 @@ function debut_droite() { <td width=500 valign="top" rowspan=2> <font face="Georgia,Garamond,Times,serif" size=3> <?php + + // proposer un zap_session le cas echeant lors d'un login reussi + if ($GLOBALS['spip_session'] && $GLOBALS['zap']=='oui' && zap_sessions($GLOBALS['auteur_session']['login'], false)) { + debut_cadre_enfonce(); + echo propre('<img src="img_pack/warning.gif" align="left" hspace="5" vspace="5"> Attention: une autre connexion + à votre nom est en cours. Probablement est-ce parce que vous ne vous + êtes pas déconnecté après votre dernier passage, + ou parce que vous vous connectez simultanément avec deux navigateurs. + Si tel est le cas, cela ne prête pas à conséquence. + + En cas de doute, toutefois, [cliquez sur ce texte pour supprimer + l\'autre session->../spip_cookie.php3?zap_session=oui&redirect=./ecrire/].'); + fin_cadre_enfonce(); + } } diff --git a/ecrire/inc_session.php3 b/ecrire/inc_session.php3 index e76b9df0cf..980a86f72f 100644 --- a/ecrire/inc_session.php3 +++ b/ecrire/inc_session.php3 @@ -159,9 +159,14 @@ function zap_sessions ($login, $zap) { } else { $dirname = "ecrire/data/"; } + + // ne pas se zapper soi-meme + if ($s = $GLOBALS['spip_session']) + $fichier_session = fichier_session($s, lire_meta('alea_ephemere')); + $dir = opendir($dirname); while(($item = readdir($dir)) != ''){ - if (ereg("^session_[a-z0-9]+\.php3$", $item)) { + if (ereg("^session_([a-z0-9]+)\.php3$", $item, $regs) AND ($fichier_session != $item)) { $session = file("$dirname$item"); if (ereg("GLOBALS\['auteur_session'\]\['login'\] = '$login'", $session[3])) { if ($zap) { diff --git a/ecrire/login.php3 b/ecrire/login.php3 index dff370b76c..80ef458ab3 100644 --- a/ecrire/login.php3 +++ b/ecrire/login.php3 @@ -25,7 +25,7 @@ if ($erreur=='pass') $erreur = "Erreur de mot de passe."; // Le login est memorise dans le cookie d'admin eventuel if (!$login) - if (ereg("^@(.*)$", $spip_admin, $regs)) + if (ereg("^@(.*)$", $HTTP_COOKIE_VARS['spip_admin'], $regs)) $login = $regs[1]; // quels sont les aleas a passer ? @@ -78,7 +78,7 @@ echo "<p> <p>"; if ($login) { // affiche formulaire de login en incluant le javascript MD5 - $redirect = './ecrire/index.php3?essai_cookie=oui'; + $redirect = './ecrire/index.php3?essai_cookie=oui&zap=oui'; $redirect_echec = './ecrire/login.php3'; $dir = "../"; echo "<script type=\"text/javascript\" src=\"md5.js\"></script>"; @@ -95,7 +95,7 @@ if ($login) { } else if ($row['statut'] == '1comite') { $icone = "redacteurs-24.gif"; } - debut_cadre_relief($icone); + debut_cadre_enfonce($icone); if ($erreur) echo "<font color=red><b>$erreur</b></font><p>"; if (file_exists("../IMG/auton$id_auteur.gif")) $logo = "../IMG/auton$id_auteur.gif"; @@ -132,61 +132,9 @@ if ($login) { echo "</tr></table>"; echo "<div align='right'><input type='submit' class='fondl' name='submit' value='Valider'></div>\n"; //echo "</div>\n"; - fin_cadre_relief(); + fin_cadre_enfonce(); echo "</form>"; - if ($secu == 'oui') { - // y a-t-il d'anciennes sessions pour ce login ? Si oui proposer de les zapper - - debut_cadre_relief(); - - $zap_sessions = zap_sessions($login, false); - echo "<b>Options de sécurité</b><p>"; - echo "<font size='2' face='verdana,arial,helvetica,sans-serif'>"; - if ($zap_sessions) { - $redirect = "./ecrire/login.php3?secu=oui&login=$login"; - echo "<script type=\"text/javascript\" src=\"md5.js\"></script>"; - echo "<form action='../spip_cookie.php3' method='post'"; - echo " onSubmit='if (this.session_password.value) { - this.session_password_md5.value = calcMD5(\"$alea_actuel\" + this.session_password.value); - this.next_session_password_md5.value = calcMD5(\"$alea_futur\" + this.session_password.value); - this.session_password.value = \"\"; - }'"; - echo ">\n"; - - echo "<b>Une connexion à l'espace privé utilisant cet identifiant est en cours.</b>\n"; - echo "Si vous êtes en train d'utiliser un autre navigateur ou un autre ordinateur pour accéder à "; - echo "l'espace privé, cela est parfaitement normal. Si vous n'utilisez aucun autre logiciel de navigation <b>en ce moment</b>, "; - echo "vous pouvez tuer toutes les connexions en entrant votre mot de passe, cela renforcera la sécurité du système."; - - echo "<p>\n"; - - // si jaja actif, on affiche le login en 'dur', et on le passe en champ hidden - echo "<input type='hidden' name='session_login_hidden' value='$login'>"; - - // si jaja inactif, le login est modifiable (puisque le challenge n'est pas utilise) - echo "<noscript><label><b>Login (identifiant de connexion au site) :</b><br></label>\n"; - echo "<input type='text' name='session_login' class='formo' value=\"$login\" size='40'></noscript>"; - - echo "<p>\n<label><b>Mot de passe</b><br></label>"; - echo "<input type='password' name='session_password' class='formo' value=\"\" size='40'><p>\n"; - echo "<input type='hidden' name='session_password_md5' value=''>\n"; - echo "<input type='hidden' name='next_session_password_md5' value=''>\n"; - - echo "<input type='hidden' name='essai_login' value='oui'>\n"; - echo "<input type='hidden' name='redirect' value='$redirect'>\n"; - echo "<input type='hidden' name='zap_sessions' value='oui'>\n"; - - echo "<div align='right'><input type='submit' class='fondl' name='submit' value='Terminer toutes les connexions'></div>\n"; - echo "</form>\n"; - } - else { - echo ("Aucune connexion à l'espace privé n'utilise actuellement cet identifiant."); - } - echo "</font>\n"; - - fin_cadre_relief(); - } } else { @@ -208,7 +156,7 @@ if ($echec_cookie == "oui" AND $php_module) { echo "<fieldset>\n"; echo "<p><b>Si vous préférez refuser les cookies</b>, une autre méthode "; echo "non sécurisée est à votre disposition : \n"; - echo "<input type='hidden' name='redirect' value='./ecrire/'>"; + echo "<input type='hidden' name='redirect' value='./ecrire/index.php3?zap=oui'>"; echo "<input type='hidden' name='essai_auth_http' value='oui'> "; echo "<div align='right'><input type='submit' name='submit' class='fondl' value='Identification sans cookie'></div>\n"; echo "</fieldset></form>\n"; @@ -219,11 +167,7 @@ $link = new Link; $link->addVar('secu', 'oui'); echo "<p><font size='2' face='Verdana, Arial, Helvetica, sans-serif'>"; -echo "[<a href='".$link->getUrl()."'>options de sécurité</a>"; -if ($url_site) { - echo " | <a href='$url_site'>retour au site public</a>"; -} -echo "]</font>"; +echo "[<a href='$url_site'>retour au site public</a>]</font>"; install_fin_html(); diff --git a/spip_cookie.php3 b/spip_cookie.php3 index e431344359..fc13f532c0 100644 --- a/spip_cookie.php3 +++ b/spip_cookie.php3 @@ -23,10 +23,12 @@ else if ($essai_auth_http == 'logout') { } // rejoue le cookie pour renouveler spip_session -if ($change_session == "oui") { +if ($change_session == "oui" || zap_session == 'oui') { if (verifier_session($spip_session)) { $cookie = creer_cookie_session($auteur_session); supprimer_session($spip_session); + if ($zap_session) + zap_sessions($auteur_session['login'], true); // setcookie ('spip_session', $spip_session, time() - 24 * 7 * 3600); setcookie('spip_session', $cookie); @header('Content-Type: image/gif'); @@ -70,26 +72,21 @@ else if ($essai_login == "oui") { $row_auteur['statut'] = '1comite'; } - if ($zap_sessions == 'oui') { - zap_sessions($row_auteur['login'], true); + if ($row_auteur['statut'] == '0minirezo') { // force le cookie pour les admins + $cookie_admin = "@".$row_auteur['login']; } - else { - if ($row_auteur['statut'] == '0minirezo') { // force le cookie pour les admins - $cookie_admin = "@".$row_auteur['login']; - } - $cookie_session = creer_cookie_session($row_auteur); - setcookie('spip_session', $cookie_session, time() + 3600 * 24 * 7); + $cookie_session = creer_cookie_session($row_auteur); + setcookie('spip_session', $cookie_session, time() + 3600 * 24 * 7); - // ici on fait tourner le codage du pass dans la base - // retournera une erreur si la base n'est pas mise a jour... - $nouvel_alea_futur = creer_uniqid(); - $query = "UPDATE spip_auteurs - SET alea_actuel = alea_futur, - pass = '$md5next', - alea_futur = '$nouvel_alea_futur' - WHERE login='$login'"; - @spip_query($query); - } + // ici on fait tourner le codage du pass dans la base + // retournera une erreur si la base n'est pas mise a jour... + $nouvel_alea_futur = creer_uniqid(); + $query = "UPDATE spip_auteurs + SET alea_actuel = alea_futur, + pass = '$md5next', + alea_futur = '$nouvel_alea_futur' + WHERE login='$login'"; + @spip_query($query); } else if ($redirect_echec) { @header("Location: $redirect_echec?login=$login&erreur=pass"); -- GitLab