[ 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 // 15 // Ce fichier ne sera execute qu'une fois 16 if (defined("_ECRIRE_INC_AUTH")) return; 17 define("_ECRIRE_INC_AUTH", "1"); 18 19 include_ecrire ("inc_connect.php3"); 20 include_ecrire ("inc_meta.php3"); 21 include_ecrire ("inc_session.php3"); 22 23 define("_DIR_LOGIN", _DIR_RESTREINT ? "" : "../"); 24 define("_DIR_LOGED_IN", _DIR_RESTREINT ? "" : _DIR_RESTREINT_ABS); 25 26 27 // 28 // Fonctions de gestion de l'acces restreint aux rubriques 29 // 30 31 function acces_rubrique($id_rubrique) { 32 global $connect_toutes_rubriques; 33 global $connect_id_rubrique; 34 35 return ($connect_toutes_rubriques OR $connect_id_rubrique[$id_rubrique]); 36 } 37 38 function acces_restreint_rubrique($id_rubrique) { 39 global $connect_id_rubrique; 40 global $connect_statut; 41 42 return ($connect_statut == "0minirezo" AND $connect_id_rubrique[$id_rubrique]); 43 } 44 45 46 function auth() { 47 global $_POST, $_GET, $_COOKIE, $_SERVER; 48 global $auth_can_disconnect, $ignore_auth_http, $ignore_remote_user; 49 50 global $connect_id_auteur, $connect_nom, $connect_bio, $connect_email; 51 global $connect_nom_site, $connect_url_site, $connect_login, $connect_pass; 52 global $connect_activer_imessage, $connect_activer_messagerie; 53 global $connect_statut, $connect_toutes_rubriques, $connect_id_rubrique; 54 55 global $auteur_session, $prefs; 56 global $clean_link; 57 58 // 59 // Si pas MySQL, fini 60 // 61 if (!$GLOBALS['db_ok']) { 62 spip_log("Erreur base de donnees"); 63 include_ecrire ('inc_presentation.php3'); 64 install_debut_html(_T('info_travaux_titre')); 65 echo _T('titre_probleme_technique'); 66 echo "<p><tt>".spip_sql_errno()." ".spip_sql_error()."</tt></p>"; 67 install_fin_html(); 68 exit; 69 } 70 71 72 // 73 // Initialiser variables (eviter hacks par URL) 74 // 75 76 $auth_login = ""; 77 $auth_pass = ""; 78 $auth_pass_ok = false; 79 $auth_can_disconnect = false; 80 $auth_htaccess = false; 81 82 // 83 // Recuperer les donnees d'identification 84 // 85 86 // Authentification session 87 if ($cookie_session = $_COOKIE['spip_session']) { 88 if (verifier_session($cookie_session)) { 89 if ($auteur_session['statut'] == '0minirezo' 90 OR $auteur_session['statut'] == '1comite') { 91 $auth_login = $auteur_session['login']; 92 $auth_pass_ok = true; 93 $auth_can_disconnect = true; 94 } 95 } 96 } 97 98 // Peut-etre sommes-nous en auth http? 99 else if ($_SERVER['PHP_AUTH_USER'] && $_SERVER['PHP_AUTH_PW'] 100 && !$ignore_auth_http) { 101 102 // Si le login existe dans la base, se loger 103 if (verifier_php_auth()) { 104 $auth_login = $_SERVER['PHP_AUTH_USER']; 105 $auth_pass_ok = true; 106 $auth_can_disconnect = true; 107 $_SERVER['PHP_AUTH_PW'] = ''; 108 } 109 // Sinon c'est un login d'intranet independant de spip, on ignore 110 } 111 112 // Authentification .htaccess old style, car .htaccess semble 113 // souvent definir *aussi* PHP_AUTH_USER et PHP_AUTH_PW 114 else if ($GLOBALS['_SERVER']['REMOTE_USER'] 115 && !$ignore_remote_user) { 116 $auth_login = $GLOBALS['_SERVER']['REMOTE_USER']; 117 $auth_pass_ok = true; 118 $auth_htaccess = true; 119 } 120 121 // Tentative de login echec 122 if ($_GET['bonjour'] == 'oui' AND !$auth_login) { 123 $link = new Link(_DIR_LOGIN . "spip_cookie.php3?test_echec_cookie=oui"); 124 $clean_link->delVar('bonjour'); 125 $url = str_replace('/./', '/', _DIR_LOGED_IN .$clean_link->getUrl()); 126 $link->addVar('url', $url); 127 redirige_par_entete($link->getUrl()); 128 exit; 129 } 130 131 // Si pas authentifie, demander login / mdp 132 if (!$auth_login) { 133 $url = str_replace('/./', '/', _DIR_LOGED_IN 134 . $clean_link->getUrl()); 135 redirige_par_entete(_DIR_LOGIN . "spip_login.php3?url=".urlencode($url)); 136 exit; 137 } 138 139 140 // 141 // Chercher le login dans la table auteurs 142 // 143 144 $auth_login = addslashes($auth_login); 145 $query = "SELECT * FROM spip_auteurs WHERE login='$auth_login' AND statut!='5poubelle' AND statut!='6forum'"; 146 $result = @spip_query($query); 147 148 if ($row = spip_fetch_array($result)) { 149 $connect_id_auteur = $row['id_auteur']; 150 $connect_nom = $row['nom']; 151 $connect_bio = $row['bio']; 152 $connect_email = $row['email']; 153 $connect_nom_site = $row['nom_site']; 154 $connect_url_site = $row['url_site']; 155 $connect_login = $row['login']; 156 $connect_pass = $row['pass']; 157 $connect_statut = $row['statut']; 158 $connect_activer_messagerie = "oui"; //$row["messagerie"]; 159 $connect_activer_imessage = "oui "; //$row["imessage"]; 160 161 // Special : si dans la fiche auteur on modifie les valeurs 162 // de messagerie, utiliser ces valeurs plutot que celle de la base. 163 // D'ou leger bug si on modifie la fiche de quelqu'un d'autre. 164 165 // regler les preferences de l'auteur 166 $prefs = unserialize($row['prefs']); 167 168 // vieux ! on pourra supprimer post 1.6 finale... 169 if (! isset($prefs['display'])) { // recuperer les cookies ou creer defaut 170 if (!$GLOBALS['set_disp'] = $GLOBALS['_COOKIE']['spip_display']) 171 $GLOBALS['set_disp'] = 2; 172 if (!$GLOBALS['set_couleur'] = $GLOBALS['_COOKIE']['spip_couleur']) 173 $GLOBALS['set_couleur'] = 6; 174 if (!$GLOBALS['set_options'] = $GLOBALS['_COOKIE']['spip_options']) 175 $GLOBALS['set_options'] = 'basiques'; 176 } 177 178 // Indiquer connexion 179 if ($connect_activer_messagerie != "non") { 180 @spip_query("UPDATE spip_auteurs SET en_ligne=NOW() WHERE id_auteur='$connect_id_auteur'"); 181 } 182 183 // Si administrateur, recuperer les rubriques gerees par l'admin 184 if ($connect_statut == '0minirezo') { 185 $query_admin = "SELECT id_rubrique FROM spip_auteurs_rubriques WHERE id_auteur=$connect_id_auteur AND id_rubrique!='0'"; 186 $result_admin = spip_query($query_admin); 187 188 $connect_toutes_rubriques = (@spip_num_rows($result_admin) == 0); 189 if ($connect_toutes_rubriques) { 190 $connect_id_rubrique = array(); 191 } 192 else { 193 for (;;) { 194 $r = ''; 195 while ($row_admin = spip_fetch_array($result_admin)) { 196 $id_rubrique = $row_admin['id_rubrique']; 197 $r[] = $id_rubrique; 198 $connect_id_rubrique[$id_rubrique] = $id_rubrique; 199 } 200 if (!$r) break; 201 $r = join(',', $r); 202 $query_admin = "SELECT id_rubrique FROM spip_rubriques WHERE id_parent IN ($r) AND id_rubrique NOT IN ($r)"; 203 $result_admin = spip_query($query_admin); 204 } 205 } 206 } 207 // Si pas admin, acces egal a toutes rubriques 208 else { 209 $connect_toutes_rubriques = false; 210 $connect_id_rubrique = array(); 211 } 212 } 213 else { 214 // ici on est dans un cas limite : l'auteur a ete identifie OK 215 // mais il n'existe pas dans la table auteur. Cause possible, 216 // notamment, une restauration de base de donnees dans laquelle 217 // il n'existe pas. 218 include_ecrire ('inc_presentation.php3'); 219 include_ecrire ('inc_texte.php3'); 220 install_debut_html(_T('avis_erreur_connexion')); 221 echo "<br><br><p>". 222 _T('texte_inc_auth_1', array('auth_login' => $auth_login)). 223 " <a href='" . 224 _DIR_LOGIN . "spip_cookie.php3?logout=$auth_login'>". 225 _T('texte_inc_auth_2')."</A>"._T('texte_inc_auth_3'); 226 install_fin_html(); 227 exit; 228 } 229 230 if (!$auth_pass_ok) { 231 redirige_par_entete(_DIR_LOGIN . "spip_login.php3?var_erreur=pass"); 232 } 233 234 // Si c'est un nouvel inscrit, le passer de 'nouveau' a '1comite' 235 // (code presque mort, utilise peut-etre encore sous .htpasswd ?) 236 if ($connect_statut == 'nouveau') { 237 $connect_statut = 238 (lire_meta('accepter_inscriptions') == 'oui') ? '1comite' : '6forum'; 239 spip_query("UPDATE spip_auteurs SET statut='$connect_statut' 240 WHERE id_auteur=$connect_id_auteur"); 241 } 242 243 return true; 244 } 245 246 247 if (!auth()) exit; 248 249 ?>
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 |