[ Index ]
 

Code source de SPIP 1.9.2c

Accédez au Source d'autres logiciels libres

title

Body

[fermer]

/ecrire/action/ -> test_dirs.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; // securiser
  14  
  15  if (defined("_TEST_DIRS")) return;
  16  define("_TEST_DIRS", "1");
  17  
  18  include_spip('inc/minipres');
  19  include_spip('inc/lang');
  20  utiliser_langue_visiteur();
  21  
  22  //
  23  // Tente d'ecrire
  24  //
  25  // http://doc.spip.org/@test_ecrire
  26  function test_ecrire($my_dir) {
  27      static $chmod = 0;
  28      
  29      $ok = false;
  30      $script = @file_exists('spip_loader.php') ? 'spip_loader.php' : $_SERVER['PHP_SELF'];
  31      $self = basename($script);
  32      $uid = @fileowner('.');
  33      $uid2 = @fileowner($self);
  34      $gid = @filegroup('.');
  35      $gid2 = @filegroup($self);
  36      $perms = @fileperms($self);
  37  
  38      // Comparer l'appartenance d'un fichier cree par PHP
  39      // avec celle du script et du repertoire courant
  40      if(!$chmod) {
  41          @rmdir('test');
  42          @unlink('test'); // effacer au cas ou
  43          @touch('test');
  44          if ($uid > 0 && $uid == $uid2 && @fileowner('test') == $uid)
  45              $chmod = 0700;
  46          else if ($gid > 0 && $gid == $gid2 && @filegroup('test') == $gid)
  47              $chmod = 0770;
  48          else
  49              $chmod = 0777;
  50          // Appliquer de plus les droits d'acces du script
  51          if ($perms > 0) {
  52              $perms = ($perms & 0777) | (($perms & 0444) >> 2);
  53              $chmod |= $perms;
  54          }
  55          @unlink('test');
  56      }
  57      // Verifier que les valeurs sont correctes
  58      $f = @fopen($my_dir.'test.php', 'w');
  59      if ($f) {
  60          @fputs($f, '<'.'?php $ok = true; ?'.'>');
  61          @fclose($f);
  62          @chmod($my_dir.'test.php', $chmod);
  63          include($my_dir.'test.php');
  64      }
  65      @unlink($my_dir.'test.php');
  66      return $ok?$chmod:false;
  67  }
  68  
  69  //
  70  // tester les droits en ecriture sur les repertoires
  71  // rajouter celui passer dans l'url ou celui du source (a l'installation)
  72  //
  73  
  74  // http://doc.spip.org/@action_test_dirs_dist
  75  function action_test_dirs_dist()
  76  {
  77    global $test_dir, $test_dirs;
  78    $chmod = 0;
  79  
  80  if ($test_dir) {
  81    if (!ereg("/$", $test_dir)) $test_dir .= '/';
  82    if (!in_array($test_dir, $test_dirs)) $test_dirs[] = $test_dir;
  83   }
  84  else {
  85      if (!_FILE_CONNECT)
  86        $test_dirs[] = dirname(_FILE_CONNECT_INS).'/';
  87  }
  88  
  89  $bad_dirs = array();
  90  $absent_dirs  = array();;
  91  
  92  while (list(, $my_dir) = each($test_dirs)) {
  93      $test = test_ecrire($my_dir);
  94      if (!test_ecrire($my_dir)) {
  95          if (@file_exists($my_dir)) {
  96                  $bad_dirs[] = "<li>".$my_dir."</li>";
  97          } else
  98              $absent_dirs[] = "<li>".$my_dir."</li>";
  99      }
 100      $chmod = max($chmod, $test);
 101  }
 102  
 103  if ($bad_dirs OR $absent_dirs) {
 104  
 105      if (!_FILE_CONNECT) {
 106          $titre = _T('dirs_preliminaire');
 107          $continuer = ' '._T('dirs_commencer') . '.';
 108      } else
 109          $titre = _T('dirs_probleme_droits');
 110  
 111  
 112      $res = "<div align='right'>". menu_langues('var_lang_ecrire')."</div>\n";
 113  
 114      if ($bad_dirs) {
 115          $res .=
 116            _T('dirs_repertoires_suivants',
 117                 array('bad_dirs' => join(" ", $bad_dirs))) .
 118                "<b>". _T('login_recharger')."</b>.";
 119      }
 120  
 121      if ($absent_dirs) {
 122            $res .=
 123              _T('dirs_repertoires_absents',
 124                 array('bad_dirs' => join(" ", $absent_dirs))) .
 125              "<b>". _T('login_recharger')."</b>.";
 126      }
 127  
 128      $res = "<p>" . $continuer  . $res . aide ("install0") . "</p>" .
 129        "<form action='" . generer_url_action('test_dirs') . "'>" .
 130         "<input type='hidden' name='action' value='test_dirs' />" .
 131        (!$test_dir ? "" : 
 132         "<input type='hidden' name='test_dir' value='$test_dir' />") .
 133        "<div align='right'><input type='submit' class='fondl' value='". 
 134        _T('login_recharger')."' /></div>" .
 135        "</form>";
 136      echo minipres($titre, $res);
 137  
 138   } else {
 139      if (!_FILE_CONNECT)
 140        header("Location: " . generer_url_ecrire("install", "etape=1&chmod=".$chmod, true));
 141      else
 142          header("Location: " . _DIR_RESTREINT_ABS);
 143   }
 144  }
 145  ?>


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