| [ Index ] |
|
Code source de SPIP 1.9.2c |
1 <?php 2 3 /***************************************************************************\ 4 * SPIP, Systeme de publication pour l'internet * 5 * * 6 * Copyright (c) 2001-2007 * 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 if (!defined("_ECRIRE_INC_VERSION")) return; #securite 14 15 include_spip('base/abstract_sql'); 16 spip_connect(); 17 18 // http://doc.spip.org/@balise_LOGIN_PUBLIC 19 function balise_LOGIN_PUBLIC ($p, $nom='LOGIN_PUBLIC') { 20 return calculer_balise_dynamique($p, $nom, array('url')); 21 } 22 23 # retourner: 24 # 1. l'url collectee ci-dessus (args0) ou donnee en filtre (filtre0) 25 # 2. l'eventuel parametre de la balise (args1) fournie par 26 # calculer_balise_dynamique, en l'occurence le #LOGIN courant si l'on 27 # programme une <boucle(AUTEURS)>[(#LOGIN_PUBLIC{#LOGIN})] 28 29 // http://doc.spip.org/@balise_LOGIN_PUBLIC_stat 30 function balise_LOGIN_PUBLIC_stat ($args, $filtres) { 31 return array($filtres[0] ? $filtres[0] : $args[0], $args[1], $args[2]); 32 } 33 34 // http://doc.spip.org/@balise_LOGIN_PUBLIC_dyn 35 function balise_LOGIN_PUBLIC_dyn($url, $login) { 36 37 if (!$url # pas d'url passee en filtre ou dans le contexte 38 AND !$url = _request('url') # ni d'url passee par l'utilisateur 39 ){ 40 $url = str_replace('&', '&', self()); 41 } 42 return login_explicite($login, $url, true); 43 } 44 45 // cette fonction est commune a la balise #LOGIN_PUBLIC et #LOGIN_PRIVE 46 // elle doit accepter les visiteurs dans le premier cas, mais pas dans le second 47 // http://doc.spip.org/@login_explicite 48 function login_explicite($login, $cible, $accepter_visiteurs = false) { 49 global $auteur_session; 50 51 // passer $action dans parametre_url pour avoir une chance que $cible == $action 52 // et pas faire de boulce infinie de redirection 53 $action = parametre_url(str_replace('&', '&', self()),'var_dummy','','&'); 54 if ($cible) { 55 $cible = parametre_url($cible, 'var_erreur', '', '&'); 56 $cible = parametre_url($cible, 'var_login', '', '&'); 57 } else { 58 if (ereg("[?&]url=([^&]*)", $action, $m)) 59 $cible = rawurldecode($m[1]); 60 else 61 $cible = _DIR_RESTREINT ; 62 } 63 64 verifier_visiteur(); 65 66 // Si on est connecte, envoyer vers la destination 67 // sauf si on y est deja 68 if ($auteur_session AND 69 ($auteur_session['statut']=='0minirezo' 70 OR $auteur_session['statut']=='1comite' 71 OR ($accepter_visiteurs && ($auteur_session['statut']=='6forum')))) { 72 $auth = charger_fonction('auth','inc'); 73 $auth = $auth(); 74 if (($auth==="") 75 OR ($accepter_visiteurs && ($auth=='6forum'))) { 76 if ($cible != $action) { 77 if (!headers_sent() AND !$_GET['var_mode']) { 78 include_spip('inc/headers'); 79 redirige_par_entete($cible); 80 } else { 81 include_spip('inc/minipres'); 82 return http_href($cible, _T('login_par_ici')); 83 } 84 } else 85 return ''; # on est arrive on bon endroit, et logue'... 86 } 87 } 88 89 return login_pour_tous($login ? $login : _request('var_login'), $cible, $action); 90 } 91 92 // http://doc.spip.org/@login_pour_tous 93 function login_pour_tous($login, $cible, $action) { 94 global $ignore_auth_http, $_SERVER, $_COOKIE; 95 96 // en cas d'echec de cookie, inc_auth a renvoye vers le script de 97 // pose de cookie ; s'il n'est pas la, c'est echec cookie 98 // s'il est la, c'est probablement un bookmark sur bonjour=oui, 99 // et pas un echec cookie. 100 if (_request('var_echec_cookie')) 101 $echec_cookie = ($_COOKIE['spip_session'] != 'test_echec_cookie'); 102 else $echec_cookie = ''; 103 104 // hack grossier pour changer le message en cas d'echec d'un visiteur(6forum) sur ecrire/ 105 $echec_visiteur = _request('var_echec_visiteur')?' ':''; 106 107 108 $pose_cookie = generer_url_public('spip_cookie'); 109 $auth_http = ''; 110 if ($echec_cookie AND !$ignore_auth_http) { 111 if (($GLOBALS['flag_sapi_name'] 112 AND eregi("apache", @php_sapi_name())) 113 OR ereg("^Apache.* PHP", $_SERVER['SERVER_SOFTWARE'])) 114 $auth_http = $pose_cookie; 115 } 116 // Attention dans le cas 'intranet' la proposition de se loger 117 // par auth_http peut conduire a l'echec. 118 if (isset($_SERVER['PHP_AUTH_USER']) AND isset($_SERVER['PHP_AUTH_PW'])) 119 $auth_http = ''; 120 121 // Le login est memorise dans le cookie d'admin eventuel 122 if (!$login) { 123 if (ereg("^@(.*)$", $_COOKIE['spip_admin'], $regs)) 124 $login = $regs[1]; 125 } else if ($login == '-1') 126 $login = ''; 127 128 $erreur = ''; 129 if ($login) { 130 $row = spip_abstract_fetsel('*', 'spip_auteurs', "login=" . _q($login)); 131 // Retrouver ceux qui signent de leur nom ou email 132 if (!$row AND !$GLOBALS['ldap_present']) { 133 $row = spip_abstract_fetsel('*', 'spip_auteurs', "(nom = " . _q($login) . " OR email = " . _q($login) . ") AND login<>'' AND statut<>'5poubelle'"); 134 if ($row) { 135 $login_alt = $login; # afficher ce qu'on a tape 136 $login = $row['login']; 137 } 138 } 139 140 if ((!$row AND !$GLOBALS['ldap_present']) OR 141 ($row['statut'] == '5poubelle') OR 142 (($row['source'] == 'spip') AND $row['pass'] == '')) { 143 $erreur = _T('login_identifiant_inconnu', 144 array('login' => htmlspecialchars($login))); 145 $row = array(); 146 $login = ''; 147 include_spip('inc/cookie'); 148 spip_setcookie("spip_admin", "", time() - 3600); 149 } else { 150 // on laisse le menu decider de la langue 151 unset($row['lang']); 152 } 153 } 154 if (!$row) 155 $row = array(); 156 // afficher "erreur de mot de passe" si &var_erreur=pass 157 if (_request('var_erreur') == 'pass') 158 $erreur = _T('login_erreur_pass'); 159 160 // Appeler le squelette formulaire_login 161 return array('formulaires/login', $GLOBALS['delais'], 162 array_merge( 163 array_map('texte_script', $row), 164 array( 165 'action2' => ($login ? $pose_cookie: $action), 166 'erreur' => $erreur, 167 'action' => $action, 168 'url' => $cible, 169 'auth_http' => $auth_http, 170 'echec_cookie' => ($echec_cookie ? ' ' : ''), 171 'echec_visiteur' => $echec_visiteur, 172 'login' => $login, 173 'login_alt' => (isset($login_alt) ? $login_alt : $login), 174 'self' => str_replace('&', '&', self()) 175 ) 176 ) 177 ); 178 179 } 180 181 // Bouton duree de connexion 182 183 // http://doc.spip.org/@filtre_rester_connecte 184 function filtre_rester_connecte($prefs) { 185 $prefs = unserialize(stripslashes($prefs)); 186 return $prefs['cnx'] == 'perma' ? ' ' : ''; 187 } 188 189 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
| Généré le : Wed Nov 21 10:20:27 2007 | par Balluche grâce à PHPXref 0.7 |
|