[ Index ] |
|
Code source de SPIP Agora 1.4 |
1 <?php 2 /***************************************************** 3 * This file is part of Agora, web based content management system. 4 * 5 * Agora is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; version 2 of the License. 8 * 9 * Agora is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details (file "COPYING"). 13 * 14 * Copyright © Arnaud Martin, Antoine Pitrou et Philippe Rivière. 15 * List of authors detailed in "copyright_fr.html" file. 16 * E-mail : agora@sig.premier-ministre.gouv.fr 17 * Web site : http://www.agora.gouv.fr 18 *****************************************************/ 19 // Ce fichier ne sera execute qu'une fois 20 if (defined("_ECRIRE_INC_SESSION")) 21 return; 22 23 define("_ECRIRE_INC_SESSION", "1"); 24 25 /* 26 * Gestion de l'authentification par sessions 27 * a utiliser pour valider l'acces (bloquant) 28 * ou pour reconnaitre un utilisateur (non bloquant) 29 * 30 */ 31 32 $GLOBALS['auteur_session'] = ''; 33 34 // 35 // On verifie l'IP et le nom du navigateur 36 // 37 function hash_env () { 38 global $HTTP_SERVER_VARS; 39 return md5($HTTP_SERVER_VARS['REMOTE_ADDR']. $HTTP_SERVER_VARS['HTTP_USER_AGENT']); 40 } 41 42 // 43 // Calcule le nom du fichier session 44 // 45 function fichier_session ($id_session, $alea) { 46 if (ereg("^([0-9]+_)", $id_session, $regs)) 47 $id_auteur = $regs[1]; 48 49 $fichier_session = 'session_' . $id_auteur . md5($id_session . ' ' . $alea). '.php'; 50 //$fichier_session = 'data/'.$fichier_session; 51 //if (!$GLOBALS['flag_ecrire']) $fichier_session = 'ecrire/'.$fichier_session; 52 $fichier_session = dirname(__FILE__). '/data/' . $fichier_session; 53 return $fichier_session; 54 } 55 56 // 57 // Ajouter une session pour l'auteur specifie 58 // 59 function ajouter_session ($auteur, $id_session) { 60 /********* Modification maciek@clever-age.com ***********************/ 61 if (isset($_SESSION['AgoraRubriquesCache'])) { 62 session_destroy(); 63 } 64 /********* Fin modification maciek@clever-age.com ***********************/ 65 $fichier_session = fichier_session($id_session, lire_meta('alea_ephemere')); 66 $vars = array('id_auteur', 'nom', 'login', 'email', 'statut', 'profil', 'lang', 'ip_change', 'hash_env'); 67 68 $texte = "<" . "?php\n"; 69 reset ($vars); 70 71 while (list(, $var) = each($vars)) { 72 $texte .= "\$GLOBALS['auteur_session']['$var'] = '" . addslashes($auteur[$var]). "';\n"; 73 } 74 75 $texte .= "?" . ">\n"; 76 77 if ($f = fopen($fichier_session, "wb")) { 78 fputs($f, $texte); 79 fclose ($f); 80 } 81 else { 82 $dir = $GLOBALS['flag_ecrire'] ? '../' : ''; 83 @Header ($dir . "spip_test_dirs.php"); 84 } 85 } 86 87 // 88 // Verifier et inclure une session 89 // 90 function verifier_session ($id_session) { 91 require_once (dirname(__FILE__). '/include/utils/meta.php'); 92 // Tester avec alea courant 93 $ok = false; 94 95 if ($id_session) { 96 $fichier_session = fichier_session($id_session, lire_meta('alea_ephemere')); 97 if (file_exists($fichier_session)) { 98 include ($fichier_session); 99 $ok = true; 100 } 101 else { 102 // Sinon, tester avec alea precedent 103 $fichier_session = fichier_session($id_session, lire_meta('alea_ephemere_ancien')); 104 if (file_exists($fichier_session)) { 105 // Renouveler la session (avec l'alea courant) 106 include ($fichier_session); 107 supprimer_session ($id_session); 108 ajouter_session($GLOBALS['auteur_session'], $id_session); 109 $ok = true; 110 } 111 } 112 } 113 114 // marquer la session comme "ip-change" si le cas se presente 115 if ($ok AND (hash_env() != $GLOBALS['auteur_session']['hash_env'])AND !$GLOBALS['auteur_session']['ip_change']) { 116 $GLOBALS['auteur_session']['ip_change'] = true; 117 ajouter_session($GLOBALS['auteur_session'], $id_session); 118 } 119 120 return $ok; 121 } 122 123 // 124 // Supprimer une session 125 // 126 function supprimer_session ($id_session) { 127 /********* Modification maciek@clever-age.com ***********************/ 128 if (isset($_SESSION['AgoraRubriquesCache'])) { 129 session_destroy(); 130 } 131 /********* Fin modification maciek@clever-age.com ***********************/ 132 133 $fichier_session = fichier_session($id_session, lire_meta('alea_ephemere')); 134 135 if (file_exists($fichier_session)) { 136 @unlink ($fichier_session); 137 } 138 139 $fichier_session = fichier_session($id_session, lire_meta('alea_ephemere_ancien')); 140 141 if (file_exists($fichier_session)) { 142 @unlink ($fichier_session); 143 } 144 } 145 146 // 147 // Creer une session et retourne le cookie correspondant (a poser) 148 // 149 function creer_cookie_session ($auteur) { 150 if ($id_auteur = $auteur['id_auteur']) { 151 $id_session = $id_auteur . '_' . md5(creer_uniqid()); 152 $auteur['hash_env'] = hash_env(); 153 ajouter_session($auteur, $id_session); 154 return $id_session; 155 } 156 } 157 158 // 159 // Creer un identifiant aleatoire 160 // 161 function creer_uniqid () { 162 static $seeded; 163 164 if (!$seeded) { 165 $seed = (double)(microtime() + 1) * time(); 166 mt_srand ($seed); 167 srand ($seed); 168 $seeded = true; 169 } 170 171 $s = mt_rand(); 172 173 if (!$s) 174 $s = rand(); 175 176 if ($GLOBALS['flag_uniqid2']) 177 return uniqid($s, 1); 178 else 179 return uniqid($s); 180 } 181 182 // 183 // Cette fonction efface toutes les sessions appartenant a l'auteur 184 // On en profite pour effacer toutes les sessions creees il y a plus de 48 h 185 // 186 function zap_sessions ($id_auteur, $zap) { 187 //$dirname = $GLOBALS['flag_ecrire'] ? "data/" : "ecrire/data/"; 188 $dirname = dirname(__FILE__). '/data/'; 189 190 // ne pas se zapper soi-meme 191 /********** Modification SPIP_COOKIE johnny.muller@ypok.com **********/ 192 if ($s = $GLOBALS[$GLOBALS['cookie_prefix']. '_session']) 193 //if ($s = $GLOBALS['spip_session']) 194 /********** Fin modification SPIP_COOKIE johnny.muller@ypok.com **********/ 195 $fichier_session = fichier_session($s, lire_meta('alea_ephemere')); 196 197 $dir = opendir($dirname); 198 $t = time(); 199 200 while (($item = readdir($dir)) != '') { 201 $chemin = "$dirname$item"; 202 if (ereg("^session_([0-9]+_)?([a-z0-9]+)\.php$", $item, $regs)) { 203 204 // Si c'est une vieille session, on jette 205 if (($t - filemtime($chemin)) > 48 * 3600) 206 @unlink ($chemin); 207 208 // sinon voir si c'est une session du meme auteur 209 else if ($regs[1] == $id_auteur . '_') { 210 $zap_num++; 211 if ($zap) 212 @unlink ($chemin); 213 } 214 } 215 } 216 217 return $zap_num; 218 } 219 220 // 221 // reconnaitre un utilisateur authentifie en php_auth 222 // 223 function verifier_php_auth () { 224 global $PHP_AUTH_USER, $PHP_AUTH_PW, $ignore_auth_http; 225 226 if ($PHP_AUTH_USER && $PHP_AUTH_PW && !$ignore_auth_http) { 227 $login = addslashes($PHP_AUTH_USER); 228 229 //----------Modification Clever Age elebescond---------- 230 //Ajout Olivier Mansour 231 require_once (dirname(__FILE__). "/include/bd/inc_auteur_factory.php"); 232 // fin ajout 233 $auteurMetier = &recuperer_instance_auteur(); 234 $allAuteurs = $auteurMetier->getAllForLogin($login); 235 if (!PEAR::isError($allAuteurs)) { 236 if (list(, $monAuteur) = each($allAuteurs)) { 237 $auth_mdpass = md5($monAuteur->getAleaActuel(). $PHP_AUTH_PW); 238 if ($auth_mdpass != $monAuteur->getPass()) { 239 $PHP_AUTH_USER = ''; 240 return false; 241 } 242 else { 243 $GLOBALS['auteur_session']['id_auteur'] = $monAuteur->getAuteurId(); 244 $GLOBALS['auteur_session']['nom'] = $monAuteur->getNom(); 245 $GLOBALS['auteur_session']['login'] = $monAuteur->getLogin(); 246 $GLOBALS['auteur_session']['email'] = $monAuteur->getEmail(); 247 $GLOBALS['auteur_session']['statut'] = $monAuteur->getStatut(); 248 $GLOBALS['auteur_session']['hash_env'] = hash_env(); 249 return true; 250 } 251 } 252 } 253 } 254 } 255 256 // 257 // entete php_auth 258 // 259 function ask_php_auth ($text_failure) { 260 @Header ("WWW-Authenticate: Basic realm=\"espace prive\""); 261 @Header ("HTTP/1.0 401 Unauthorized"); 262 echo $text_failure; 263 exit; 264 } 265 266 // 267 // verifie si on a un cookie de session ou un auth_php correct 268 // et charge ses valeurs dans $GLOBALS['auteur_session'] 269 // 270 function verifier_visiteur () { 271 /********** Modification SPIP_COOKIE johnny.muller@ypok.com **********/ 272 if (verifier_session($GLOBALS['HTTP_COOKIE_VARS'][$GLOBALS['cookie_prefix']. '_session'])) 273 //if (verifier_session($GLOBALS['HTTP_COOKIE_VARS']['spip_session'])) 274 /********** Fin modification SPIP_COOKIE johnny.muller@ypok.com **********/ 275 return true; 276 277 if (verifier_php_auth()) 278 return true; 279 280 return false; 281 } 282 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Sat Feb 24 14:40:03 2007 | par Balluche grâce à PHPXref 0.7 |