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