[ Index ] |
|
Code source de SPIP 1.8.3 |
1 <?php 2 3 /***************************************************************************\ 4 * SPIP, Systeme de publication pour l'internet * 5 * * 6 * Copyright (c) 2001-2005 * 7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * 8 * * 9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * 10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * 11 \***************************************************************************/ 12 13 14 include ("ecrire/inc_version.php3"); 15 include_ecrire ("inc_session.php3"); 16 17 18 // gerer l'auth http 19 function auth_http($url, $essai_auth_http) { 20 global $_SERVER; 21 if ($essai_auth_http == 'oui') { 22 if (verifier_php_auth()) 23 redirige_par_entete($url); 24 else { 25 $url = quote_amp(urlencode($url)); 26 ask_php_auth(_T('login_connexion_refusee'), 27 _T('login_login_pass_incorrect'), _T('login_retour_site'), 28 "url=$url", _T('login_nouvelle_tentative'), 29 (ereg(_DIR_RESTREINT_ABS, $url))); 30 exit; 31 } 32 } 33 // si demande logout auth_http 34 else if ($essai_auth_http == 'logout') { 35 ask_php_auth(_T('login_deconnexion_ok'), 36 _T('login_verifiez_navigateur'), _T('login_retour_public'), 37 "redirect="._DIR_RESTREINT_ABS, _T('login_test_navigateur'), true); 38 exit; 39 } 40 } 41 42 // rejoue le cookie pour renouveler spip_session 43 if ($change_session == 'oui') { 44 if (verifier_session($spip_session)) { 45 // Attention : seul celui qui a le bon IP a le droit de rejouer, 46 // ainsi un eventuel voleur de cookie ne pourrait pas deconnecter 47 // sa victime, mais se ferait deconnecter par elle. 48 if ($auteur_session['hash_env'] == hash_env()) { 49 $auteur_session['ip_change'] = false; 50 $cookie = creer_cookie_session($auteur_session); 51 supprimer_session($spip_session); 52 spip_setcookie('spip_session', $cookie); 53 } 54 @header('Content-Type: image/gif'); 55 @header('Expires: 0'); 56 @header("Cache-Control: no-store, no-cache, must-revalidate"); 57 @header('Pragma: no-cache'); 58 @header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 59 @readfile(_DIR_IMG_PACK . 'rien.gif'); 60 exit; 61 } 62 } 63 64 if ($url) $url = urldecode($url); 65 66 // tentative de connexion en auth_http 67 if ($essai_auth_http AND !$ignore_auth_http) { 68 auth_http(($url ? $url : _DIR_RESTREINT_ABS), $essai_auth_http); 69 exit; 70 } 71 72 // cas particulier, logout dans l'espace public 73 if ($logout_public) { 74 $logout = $logout_public; 75 if (!$url) 76 $url = 'index.php3'; 77 } 78 // tentative de logout 79 if ($logout) { 80 verifier_visiteur(); 81 if ($auteur_session['login'] == $logout) { 82 spip_query("UPDATE spip_auteurs SET en_ligne = DATE_SUB(NOW(),INTERVAL 6 MINUTE) WHERE id_auteur = ".$auteur_session['id_auteur']); 83 if ($spip_session) { 84 zap_sessions($auteur_session['id_auteur'], true); 85 spip_setcookie('spip_session', $spip_session, time() - 3600 * 24); 86 } 87 88 if ($_SERVER['PHP_AUTH_USER'] 89 AND !$ignore_auth_http 90 AND verifier_php_auth()) { 91 auth_http(($url ? $url : _DIR_RESTREINT_ABS), 'logout'); 92 } 93 unset ($auteur_session); 94 } 95 96 redirige_par_entete($url ? $url : "spip_login.php3"); 97 } 98 99 // en cas de login sur bonjour=oui, on tente de poser un cookie 100 // puis de passer a spip_login qui diagnostiquera l'echec de cookie 101 // le cas echeant. 102 if ($test_echec_cookie == 'oui') { 103 spip_setcookie('spip_session', 'test_echec_cookie'); 104 redirige_par_entete("spip_login.php3?var_echec_cookie=oui&url=" 105 . ($url ? $url : _DIR_RESTREINT_ABS)); 106 } 107 108 // Tentative de login 109 unset ($cookie_session); 110 $redirect = ($url ? $url : _DIR_RESTREINT_ABS); 111 if ($essai_login == "oui") { 112 // Recuperer le login en champ hidden 113 if ($session_login_hidden AND !$session_login) 114 $session_login = $session_login_hidden; 115 116 $login = $session_login; 117 $pass = $session_password; 118 119 // Essayer differentes methodes d'authentification 120 $auths = array('spip'); 121 include_local(_FILE_CONNECT); // pour savoir si ldap est present 122 if ($ldap_present) $auths[] = 'ldap'; 123 $ok = false; 124 foreach ($auths as $nom_auth) { 125 include_ecrire("inc_auth_".$nom_auth.".php3"); 126 $classe_auth = "Auth_".$nom_auth; 127 $auth = new $classe_auth; 128 if ($auth->init()) { 129 // Essayer les mots de passe md5 130 $ok = $auth->verifier_challenge_md5($login, $session_password_md5, $next_session_password_md5); 131 // Sinon essayer avec le mot de passe en clair 132 if (!$ok && $session_password) $ok = $auth->verifier($login, $session_password); 133 if ($ok) { $auth->lire(); break; } 134 } 135 } 136 137 // Si la connexion a reussi 138 if ($ok) { 139 // Nouveau redacteur ou visiteur inscrit par mail : 140 // 'nouveau' -> '1comite' ou '6forum' 141 // Si LDAP : importer l'utilisateur vers la base SPIP 142 $auth->activer(); 143 144 if ($auth->login AND $auth->statut == '0minirezo') // force le cookie pour les admins 145 $cookie_admin = "@".$auth->login; 146 147 // On est connecte : recuperer les donnees auteurs 148 // poser le cookie session, puis le cas echeant 149 // verifier que le statut correspond au minimum requis, 150 $query = "SELECT * FROM spip_auteurs WHERE login='".addslashes($auth->login)."'"; 151 $result = spip_query($query); 152 if ($row_auteur = spip_fetch_array($result)) { 153 $cookie_session = creer_cookie_session($row_auteur); 154 } else 155 $ok = false; 156 157 // Si on se connecte dans l'espace prive, ajouter "bonjour" (inutilise) 158 if ($ok AND ereg(_DIR_RESTREINT_ABS, $redirect)) { 159 $redirect .= (strpos($redirect, "?") ? "&" : "?") . 'bonjour=oui'; 160 } 161 } 162 163 if (!$ok) { 164 if (ereg(_DIR_RESTREINT_ABS, $redirect)) 165 $redirect = "spip_login.php3"; 166 $redirect .= (strpos($redirect, "?") ? "&" : "?") . "var_login=$login"; 167 if ($session_password || $session_password_md5) 168 $redirect .= '&var_erreur=pass'; 169 $redirect .= '&url=' . urlencode($url); 170 } 171 } 172 173 // cookie d'admin ? 174 if ($cookie_admin == "non") { 175 if (!$retour) 176 $retour = 'spip_login.php3?var_url='.urlencode($url); 177 178 spip_setcookie('spip_admin', $spip_admin, time() - 3600 * 24); 179 $redirect = ereg_replace("([?&])var_login=[^&]*", '\1', urldecode($retour)); 180 $redirect .= (strpos($redirect, "?") ? "&" : "?") . "var_login=-1"; 181 } 182 else if ($cookie_admin AND $spip_admin != $cookie_admin) { 183 spip_setcookie('spip_admin', $cookie_admin, time() + 3600 * 24 * 14); 184 } 185 186 // cookie de session ? 187 if ($cookie_session) { 188 if ($session_remember == 'oui') 189 spip_setcookie('spip_session', $cookie_session, time() + 3600 * 24 * 14); 190 else 191 spip_setcookie('spip_session', $cookie_session); 192 193 $prefs = ($row_auteur['prefs']) ? unserialize($row_auteur['prefs']) : array(); 194 $prefs['cnx'] = ($session_remember == 'oui') ? 'perma' : ''; 195 spip_query ("UPDATE spip_auteurs SET prefs = '".addslashes(serialize($prefs))."' WHERE id_auteur = ".$row_auteur['id_auteur']); 196 197 } 198 199 // changement de langue espace public 200 if ($var_lang) { 201 include_ecrire ('inc_lang.php3'); 202 203 if (changer_langue($var_lang)) { 204 spip_setcookie('spip_lang', $var_lang, time() + 365 * 24 * 3600); 205 $redirect = ereg_replace("[?&]lang=[^&]*", '', $redirect); 206 $redirect .= (strpos($redirect, "?") ? "&" : "?") . "lang=$var_lang"; 207 } 208 } 209 210 // changer de langue espace prive (ou login) 211 if ($var_lang_ecrire) { 212 include_ecrire ('inc_lang.php3'); 213 verifier_visiteur(); 214 215 if (changer_langue($var_lang_ecrire)) { 216 spip_setcookie('spip_lang_ecrire', $var_lang_ecrire, time() + 365 * 24 * 3600); 217 spip_setcookie('spip_lang', $var_lang_ecrire, time() + 365 * 24 * 3600); 218 219 if (_FILE_CONNECT) { 220 include_ecrire ('inc_admin.php3'); 221 if (verifier_action_auteur('var_lang_ecrire', $valeur, $id_auteur)) { 222 spip_query ("UPDATE spip_auteurs SET lang = '".addslashes($var_lang_ecrire)."' WHERE id_auteur = ".$id_auteur); 223 $auteur_session['lang'] = $var_lang_ecrire; 224 ajouter_session($auteur_session, $spip_session); // enregistrer dans le fichier de session 225 } 226 } 227 228 $redirect = ereg_replace("[?&]lang=[^&]*", '', $redirect); 229 $redirect .= (strpos($redirect, "?") ? "&" : "?") . "lang=$var_lang_ecrire"; 230 } 231 } 232 233 // Redirection 234 // Sous Apache, les cookies avec une redirection fonctionnent 235 // Sinon, on fait un refresh HTTP 236 237 if (ereg("^Apache", $SERVER_SOFTWARE)) { 238 redirige_par_entete($redirect); 239 } 240 else { 241 spip_header("Refresh: 0; url=" . $redirect); 242 echo "<html><head>"; 243 echo "<meta http-equiv='Refresh' content='0; url=".$redirect."'>"; 244 echo "</head>\n"; 245 echo "<body><a href='".$redirect."'>"._T('navigateur_pas_redirige')."</a></body></html>"; 246 } 247 248 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Thu Feb 22 22:27:47 2007 | par Balluche grâce à PHPXref 0.7 |