[ Index ]
 

Code source de SPIP 1.9.2c

Accédez au Source d'autres logiciels libres

title

Body

[fermer]

/ecrire/inc/ -> acces.php (source)

   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&eacute;bergeur est Nexen Services.<br />";
 210              echo "La protection du r&eacute;pertoire <i>$rep/</i> doit se faire
 211              par l'interm&eacute;diaire de ";
 212              echo "<a href=\"http://www.nexenservices.com/webmestres/htlocal.php\"
 213              target=\"_blank\">l'espace webmestres</a>.";
 214              echo "Veuillez cr&eacute;er manuellement la protection pour
 215              ce r&eacute;pertoire (un couple login/mot de passe est
 216              n&eacute;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  ?>


Généré le : Wed Nov 21 10:20:27 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics