diff --git a/.gitattributes b/.gitattributes index 89d3d8407c77d19a2cb599070e604803670048c9..a392cdd35399540989c3d38d7c6c39cac779b05d 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 8931162dcdc693addc54afc601d216b98da282a9..2ca4e20f2dbfdd230e21d2c10404af48f32897b1 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 0000000000000000000000000000000000000000..c6d5e2ae2b189e7dfa7e2551da9eba94cacf041e --- /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 7ec3fbfde4ae201ddd40def6b109b84c4f19d730..39d2163d1225ac4da3f6f1d8b033106989ab6071 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 e0fd0786e180bbba36f67530606a1f5edebc5af0..d7833ab0f64c0466bdd083e734576f3d703c2cf7 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 3b592fdc43fec516c1923e667ee8164c4da656ff..36192f450b5457e1d32eb34acd59d02c2cd15f2f 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;