[ 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; 14 15 // http://doc.spip.org/@creer_pass_aleatoire 16 function creer_pass_aleatoire($longueur = 8, $sel = "") { 17 $seed = (double) (microtime() + 1) * time(); 18 mt_srand($seed); 19 srand($seed); 20 $s = ''; 21 $pass = ''; 22 for ($i = 0; $i < $longueur; $i++) { 23 if (!$s) { 24 $s = mt_rand(); 25 if (!$s) $s = rand(); 26 $s = substr(md5(uniqid($s).$sel), 0, 16); 27 } 28 $r = unpack("Cr", pack("H2", $s.$s)); 29 $x = $r['r'] & 63; 30 if ($x < 10) $x = chr($x + 48); 31 else if ($x < 36) $x = chr($x + 55); 32 else if ($x < 62) $x = chr($x + 61); 33 else if ($x == 63) $x = '/'; 34 else $x = '.'; 35 $pass .= $x; 36 $s = substr($s, 2); 37 } 38 $pass = ereg_replace("[./]", "a", $pass); 39 $pass = ereg_replace("[I1l]", "L", $pass); 40 $pass = ereg_replace("[0O]", "o", $pass); 41 return $pass; 42 } 43 44 // 45 // Creer un identifiant aleatoire (a fusionnner avec le precedent ?) 46 // 47 48 // http://doc.spip.org/@creer_uniqid 49 function creer_uniqid() { 50 static $seeded; 51 52 if (!$seeded) { 53 $seed = (double) (microtime() + 1) * time(); 54 mt_srand($seed); 55 srand($seed); 56 $seeded = true; 57 } 58 59 $s = mt_rand(); 60 if (!$s) $s = rand(); 61 return uniqid($s, 1); 62 } 63 64 // 65 // Renouvellement de l'alea utilise pour sécuriser les scripts dans action/ 66 // 67 68 // http://doc.spip.org/@renouvelle_alea 69 function renouvelle_alea() 70 { 71 $alea = md5(creer_uniqid()); 72 ecrire_meta('alea_ephemere_ancien', $GLOBALS['meta']['alea_ephemere'],'non'); 73 ecrire_meta('alea_ephemere', $alea,'non'); 74 ecrire_meta('alea_ephemere_date', time(),'non'); 75 ecrire_metas(); 76 spip_log("renouvellement de l'alea_ephemere: $alea"); 77 } 78 79 // 80 // low-security : un ensemble de fonctions pour gerer de l'identification 81 // faible via les URLs (suivi RSS, iCal...) 82 // 83 // http://doc.spip.org/@low_sec 84 function low_sec($id_auteur) { 85 // Pas d'id_auteur : low_sec 86 if (!$id_auteur = intval($id_auteur)) { 87 if (!$low_sec = $GLOBALS['meta']['low_sec']) { 88 include_spip('inc/meta'); 89 ecrire_meta('low_sec', $low_sec = creer_pass_aleatoire()); 90 ecrire_metas(); 91 } 92 } 93 else { 94 $result = spip_query("SELECT * FROM spip_auteurs WHERE id_auteur = $id_auteur"); 95 96 if ($row = spip_fetch_array($result)) { 97 $low_sec = $row["low_sec"]; 98 if (!$low_sec) { 99 $low_sec = creer_pass_aleatoire(); 100 spip_query("UPDATE spip_auteurs SET low_sec = '$low_sec' WHERE id_auteur = $id_auteur"); 101 } 102 } 103 } 104 return $low_sec; 105 } 106 107 // http://doc.spip.org/@afficher_low_sec 108 function afficher_low_sec ($id_auteur, $action='') { 109 return substr(md5($action.low_sec($id_auteur)),0,8); 110 } 111 112 // http://doc.spip.org/@verifier_low_sec 113 function verifier_low_sec ($id_auteur, $cle, $action='') { 114 return ($cle == afficher_low_sec($id_auteur, $action)); 115 } 116 117 // http://doc.spip.org/@effacer_low_sec 118 function effacer_low_sec($id_auteur) { 119 if (!$id_auteur = intval($id_auteur)) return; // jamais trop prudent ;) 120 spip_query("UPDATE spip_auteurs SET low_sec = '' WHERE id_auteur = $id_auteur"); 121 } 122 123 // http://doc.spip.org/@initialiser_sel 124 function initialiser_sel() { 125 global $htsalt; 126 if (CRYPT_MD5) $htsalt = '$1$'.creer_pass_aleatoire(); 127 else return ""; 128 } 129 130 131 // http://doc.spip.org/@ecrire_logins 132 function ecrire_logins($fichier, $tableau_logins) { 133 reset($tableau_logins); 134 135 while(list($login, $htpass) = each($tableau_logins)) { 136 if ($login && $htpass) { 137 fputs($fichier, "$login:$htpass\n"); 138 } 139 } 140 } 141 142 143 // http://doc.spip.org/@ecrire_acces 144 function ecrire_acces() { 145 $htaccess = _DIR_RESTREINT . _ACCESS_FILE_NAME; 146 $htpasswd = _DIR_TMP . _AUTH_USER_FILE; 147 148 // si .htaccess existe, outrepasser spip_meta 149 if (($GLOBALS['meta']['creer_htpasswd'] == 'non') AND !@file_exists($htaccess)) { 150 @unlink($htpasswd); 151 @unlink($htpasswd."-admin"); 152 return; 153 } 154 155 # remarque : ici on laisse passer les "nouveau" de maniere a leur permettre 156 # de devenir "1comite" le cas echeant (auth http)... a nettoyer 157 // attention, il faut au prealable se connecter a la base (necessaire car utilise par install) 158 $result = spip_query_db("SELECT login, htpass FROM spip_auteurs WHERE statut != '5poubelle' AND statut!='6forum'"); 159 160 $logins = array(); 161 while($row = spip_fetch_array($result)) $logins[$row['login']] = $row['htpass']; 162 163 $fichier = @fopen($htpasswd, "w"); 164 if ($fichier) { 165 ecrire_logins($fichier, $logins); 166 fclose($fichier); 167 } else { 168 include_spip('inc/headers'); 169 redirige_par_entete(generer_url_action('test_dirs', '', true)); 170 } 171 172 $result = spip_query_db("SELECT login, htpass FROM spip_auteurs WHERE statut = '0minirezo'"); 173 174 175 $logins = array(); 176 while($row = spip_fetch_array($result)) $logins[$row['login']] = $row['htpass']; 177 178 $fichier = fopen("$htpasswd-admin", "w"); 179 ecrire_logins($fichier, $logins); 180 fclose($fichier); 181 } 182 183 184 // http://doc.spip.org/@generer_htpass 185 function generer_htpass($pass) { 186 global $htsalt; 187 if (function_exists('crypt')) 188 return crypt($pass, $htsalt); 189 } 190 191 // 192 // Verifier la presence des .htaccess 193 // 194 // http://doc.spip.org/@verifier_htaccess 195 function verifier_htaccess($rep) { 196 $htaccess = "$rep/" . _ACCESS_FILE_NAME; 197 if ((!@file_exists($htaccess)) AND 198 !defined('_ECRIRE_INSTALL') AND !defined('_TEST_DIRS')) { 199 spip_log("demande de creation de $htaccess"); 200 if ($_SERVER['SERVER_ADMIN'] != 'www@nexenservices.com'){ 201 if (!$f = @fopen($htaccess, "w")) { 202 spip_log("ECHEC DE LA CREATION DE $htaccess"); # ne pas traduire 203 } else { 204 fputs($f, "deny from all\n"); 205 fclose($f); 206 } 207 } else { 208 echo "<span style='color: #FF0000'>IMPORTANT : </span>"; 209 echo "Votre hébergeur est Nexen Services.<br />"; 210 echo "La protection du répertoire <i>$rep/</i> doit se faire 211 par l'intermédiaire de "; 212 echo "<a href=\"http://www.nexenservices.com/webmestres/htlocal.php\" 213 target=\"_blank\">l'espace webmestres</a>."; 214 echo "Veuillez créer manuellement la protection pour 215 ce répertoire (un couple login/mot de passe est 216 nécessaire).<br />"; 217 } 218 } 219 } 220 221 // http://doc.spip.org/@gerer_htaccess 222 function gerer_htaccess() { 223 $mode = $GLOBALS['meta']['creer_htaccess']; 224 $r = spip_query("SELECT extension FROM spip_types_documents"); 225 while ($e = spip_fetch_array($r)) { 226 if (is_dir($dir = _DIR_DOC . $e['extension'])) { 227 if ($mode == 'oui') 228 verifier_htaccess($dir); 229 else @unlink("$dir/" . _ACCESS_FILE_NAME); 230 } 231 } 232 return $mode; 233 } 234 235 initialiser_sel(); 236 237 ?>
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 |
![]() |