From fc992ad8821938f1a870da62569e35e5a47c9cb0 Mon Sep 17 00:00:00 2001 From: "Committo,Ergo:sum" <esj@rezo.net> Date: Sun, 23 Jul 2006 14:53:38 +0000 Subject: [PATCH] =?UTF-8?q?L'action=20=20logout=20explicite=20est=20=C3=A0?= =?UTF-8?q?=20pr=C3=A9sent=20assur=C3=A9e=20par=20un=20script=20ind=C3=A9p?= =?UTF-8?q?endant=20de=20action/cookie.php=20afin=20d'en=20permettre=20fac?= =?UTF-8?q?ilement=20la=20surcharge=20(par=20exemple:=20m=C3=A9nage=20?= =?UTF-8?q?=C3=A0=20la=20deconnexion)=20et=20d'=C3=A9viter=20l'ambiguit?= =?UTF-8?q?=C3=A9=20de=20son=20argument=20(logout=3Dconnect=5Flogin)=20don?= =?UTF-8?q?t=20la=20valeur=20n'=C3=A9tait=20en=20fait=20pas=20significativ?= =?UTF-8?q?e.=20Quant=20au=20cookie=20rajout=C3=A9=20au=20mode=20PHP=5FAUT?= =?UTF-8?q?H,=20bien=20que=20pos=C3=A9=20au=20niveau=20de=20ecrire/=20il?= =?UTF-8?q?=20doit=20concerner=20tout=20le=20site.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitattributes | 1 + ecrire/action/cookie.php | 54 ++++++++---------------------------- ecrire/action/logout.php | 50 +++++++++++++++++++++++++++++++++ ecrire/balise/url_logout.php | 6 ++-- ecrire/inc/auth.php | 12 ++++---- ecrire/inc/presentation.php | 11 +++++--- 6 files changed, 78 insertions(+), 56 deletions(-) create mode 100644 ecrire/action/logout.php diff --git a/.gitattributes b/.gitattributes index 89d3d8407c..a392cdd353 100644 --- a/.gitattributes +++ b/.gitattributes @@ -22,6 +22,7 @@ ecrire/action/ical.php -text ecrire/action/iconifier.php -text ecrire/action/instituer.php -text ecrire/action/joindre.php -text +ecrire/action/logout.php -text ecrire/action/purger.php -text ecrire/action/redirect.php -text ecrire/action/supprimer.php -text diff --git a/ecrire/action/cookie.php b/ecrire/action/cookie.php index 8931162dcd..2ca4e20f2d 100644 --- a/ecrire/action/cookie.php +++ b/ecrire/action/cookie.php @@ -16,24 +16,17 @@ function action_cookie_dist() { action_spip_cookie_dist(); } -function auth_http($url, $essai_auth_http) { - global $_SERVER; - if ($essai_auth_http == 'oui') { - if (verifier_php_auth()) - redirige_par_entete($url); - else { - ask_php_auth(_T('login_connexion_refusee'), - _T('login_login_pass_incorrect'), _T('login_retour_site'), - "url=".rawurlencode($url), _T('login_nouvelle_tentative'), - (ereg(_DIR_RESTREINT_ABS, $url))); - exit; - } - } - // si demande logout auth_http - else if ($essai_auth_http == 'logout') { - ask_php_auth(_T('login_deconnexion_ok'), - _T('login_verifiez_navigateur'), _T('login_retour_public'), - "redirect="._DIR_RESTREINT_ABS, _T('login_test_navigateur'), true); +function auth_http($url) { + + if (verifier_php_auth()) + redirige_par_entete($url); + else { + ask_php_auth(_T('login_connexion_refusee'), + _T('login_login_pass_incorrect'), + _T('login_retour_site'), + "url=".rawurlencode($url), + _T('login_nouvelle_tentative'), + (ereg(_DIR_RESTREINT_ABS, $url))); exit; } } @@ -80,31 +73,6 @@ if ($essai_auth_http AND !$ignore_auth_http) { exit; } -// cas particulier, logout dans l'espace public -if ($logout_public) { - $logout = $logout_public; - if (!$url) $url = $GLOBALS['meta']['adresse_site']; - } -// tentative de logout -if ($logout) { - if ($auteur_session['login'] == $logout) { // init verifier_visiteur - spip_query("UPDATE spip_auteurs SET en_ligne = DATE_SUB(NOW(),INTERVAL 15 MINUTE) WHERE id_auteur = ".$auteur_session['id_auteur']); - if ($spip_session) { - $var_f = charger_fonction('session', 'inc'); - $var_f($auteur_session['id_auteur']); - } - - if ($_SERVER['PHP_AUTH_USER'] - AND !$ignore_auth_http - AND verifier_php_auth()) { - auth_http(($url ? $url : _DIR_RESTREINT_ABS), 'logout'); - } - } - spip_log("logout: $logout"); - spip_setcookie('spip_session', '', 0); - redirige_par_entete($url ? $url : generer_url_public('login')); -} - // en cas de login sur bonjour=oui, on tente de poser un cookie // puis de passer au login qui diagnostiquera l'echec de cookie // le cas echeant. diff --git a/ecrire/action/logout.php b/ecrire/action/logout.php new file mode 100644 index 0000000000..c6d5e2ae2b --- /dev/null +++ b/ecrire/action/logout.php @@ -0,0 +1,50 @@ +<?php + +/***************************************************************************\ + * SPIP, Systeme de publication pour l'internet * + * * + * Copyright (c) 2001-2006 * + * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * + * * + * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * + * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * +\***************************************************************************/ + +if (!defined("_ECRIRE_INC_VERSION")) return; + +include_spip('inc/cookie'); + +function action_logout_dist() +{ + global $auteur_session, $ignore_auth_httpa; + $logout =_request('logout'); + $url = _request('url'); + spip_log("logout $logout $url" . $auteur_session['id_auteur']); +// cas particulier, logout dans l'espace public + if ($logout='public' AND !$url) $url = $GLOBALS['meta']['adresse_site']; + +// seul le loge peut se deloger + if ($auteur_session['id_auteur']) { + spip_query("UPDATE spip_auteurs SET en_ligne = DATE_SUB(NOW(),INTERVAL 15 MINUTE) WHERE id_auteur = ".$auteur_session['id_auteur']); + // le logout explicite vaut destruction de toutes les sessions + if ($_COOKIE['spip_session']) { + $var_f = charger_fonction('session', 'inc'); + $var_f($auteur_session['id_auteur']); + spip_setcookie('spip_session', '', 0); + } + if ($_SERVER['PHP_AUTH_USER'] AND !$ignore_auth_http) { + include_spip('inc/actions'); + if (verifier_php_auth()) { + ask_php_auth(_T('login_deconnexion_ok'), + _T('login_verifiez_navigateur'), + _T('login_retour_public'), + "redirect=". _DIR_RESTREINT_ABS, + _T('login_test_navigateur'), + true); + exit; + } + } + } + redirige_par_entete($url ? $url : generer_url_public('login')); +} +?> diff --git a/ecrire/balise/url_logout.php b/ecrire/balise/url_logout.php index 7ec3fbfde4..39d2163d12 100644 --- a/ecrire/balise/url_logout.php +++ b/ecrire/balise/url_logout.php @@ -21,11 +21,9 @@ function balise_URL_LOGOUT_stat ($args, $filtres) { } function balise_URL_LOGOUT_dyn($cible) { - if (!$login = rawurlencode($GLOBALS['auteur_session']['login'])) - return ''; - if (!$cible) $cible = self(); + if (!$GLOBALS['auteur_session']['login']) return ''; - return generer_url_public('spip_cookie',"logout_public=$login&url=" . rawurlencode($cible)); + return generer_url_action('logout',"logout=public&url=" . rawurlencode($cible ? $cible : self())); } ?> diff --git a/ecrire/inc/auth.php b/ecrire/inc/auth.php index e0fd0786e1..d7833ab0f6 100644 --- a/ecrire/inc/auth.php +++ b/ecrire/inc/auth.php @@ -154,8 +154,12 @@ function inc_auth_dist() { // pour permettre les connexions multiples if (!$_COOKIE['spip_session']) { $var_f = charger_fonction('session', 'inc'); - if ($session = $var_f($row)) - spip_setcookie('spip_session', $session, time() + 3600 * 24 * 14); + if ($session = $var_f($row)) { + preg_match(',^[^/]*//[^/]*(.*)$,', + $GLOBALS['meta']['adresse_site'], + $r); + spip_setcookie('spip_session', $session, time() + 3600 * 24 * 14, $r[1]); + } } // ceci n'arrive qu'a la premiere connexion il me semble @@ -200,7 +204,5 @@ function auth_arefaire() $url = rawurlencode(str_replace('/./', '/', (_DIR_RESTREINT ? "" : _DIR_RESTREINT_ABS) . str_replace('&', '&', self()))); return generer_url_public('login', "url=$url" . ($_GET['bonjour'] == 'oui' ? '&var_echec_cookie=true' : ''),true); - } - - +} ?> diff --git a/ecrire/inc/presentation.php b/ecrire/inc/presentation.php index 3b592fdc43..36192f450b 100644 --- a/ecrire/inc/presentation.php +++ b/ecrire/inc/presentation.php @@ -2289,9 +2289,12 @@ if (true /*$bandeau_colore*/) { echo "<td class='bandeau_couleur' style='text-align: $spip_lang_right; width: 28px;' valign='middle'>"; - if ($auth_can_disconnect) { - echo "<a href='" . generer_url_public("spip_cookie","logout=$connect_login") . "' class='icone26' onmouseover=\"changestyle('bandeaudeconnecter','visibility', 'visible');\">" . - http_img_pack("deconnecter-24.gif", "", "") . "</a>"; + if ($auth_can_disconnect) { + echo "<a href='", + generer_url_action("logout","logout=prive"), + "' class='icone26' onmouseover=\"changestyle('bandeaudeconnecter','visibility', 'visible');\">", + http_img_pack("deconnecter-24.gif", "", ""), + "</a>"; } echo "</td>"; @@ -2525,7 +2528,7 @@ function bandeau_gadgets($largeur, $simple, $id_rubrique) // Deconnection echo "<div class='bandeau_couleur_sous' id='bandeaudeconnecter' style='$spip_lang_right: 0px;'>"; - echo "<a href='" . generer_url_public("spip_cookie","logout=$connect_login") . "' class='lien_sous'>"._T('icone_deconnecter')."</a>".aide("deconnect"); + echo "<a href='" . generer_url_action("logout","logout=prive") . "' class='lien_sous'>"._T('icone_deconnecter')."</a>".aide("deconnect"); echo "</div>"; $decal = 0; -- GitLab