root/alternc/tags/0.9.7/bureau/class/m_hta.php

Revision 1647, 10.3 kB (checked in by benjamin, 3 years ago)

confirmation de la suppression des comptes pop, Closes #672

Line 
1 <?php
2 /*
3  $Id: m_hta.php,v 1.5 2004/11/29 17:15:37 anonymous Exp $
4  ----------------------------------------------------------------------
5  AlternC - Web Hosting System
6  Copyright (C) 2002 by the AlternC Development Team.
7  http://alternc.org/
8  ----------------------------------------------------------------------
9  Based on:
10  Valentin Lacambre's web hosting softwares: http://altern.org/
11  ----------------------------------------------------------------------
12  LICENSE
13
14  This program is free software; you can redistribute it and/or
15  modify it under the terms of the GNU General Public License (GPL)
16  as published by the Free Software Foundation; either version 2
17  of the License, or (at your option) any later version.
18
19  This program is distributed in the hope that it will be useful,
20  but WITHOUT ANY WARRANTY; without even the implied warranty of
21  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22  GNU General Public License for more details.
23
24  To read the license please visit http://www.gnu.org/copyleft/gpl.html
25  ----------------------------------------------------------------------
26  Original Author of file:
27  Purpose of file:
28  ----------------------------------------------------------------------
29 */
30 /**
31 * Classe de gestion des dossiers protégés par .htaccess apache
32 *
33 * Cette classe permet de gérer les dossiers protégés par login/pass
34 * par le système .htaccess d'apache.
35 * Copyleft {@link http://alternc.net/ AlternC Team}
36 *
37 * @copyright    AlternC-Team 2002-11-01 http://alternc.net/
38 *
39 */
40 class m_hta {
41
42   /*---------------------------------------------------------------------------*/
43   /**
44    * Constructeur de la classe m_webaccess, initialise le membre
45    */
46   function m_webaccess() {
47   }
48
49   /*---------------------------------------------------------------------------*/
50   /**
51    * Crée un dossier à protéger (.htaccess et .htpasswd)
52    * @param string $dir Répertoire relatif au dossier de l'utilisateur
53    * @return boolean TRUE si le dossier a été protégé avec succès, FALSE sinon
54    */
55   function CreateDir($dir) {
56     global $mem,$bro,$err;
57     $err->log("hta","createdir",$dir);
58     $absolute=$bro->convertabsolute($dir,0);
59     if (!$absolute) {
60       $err->raise("hta",8,$dir);
61       return false;
62     }
63     if (!file_exists($absolute)) {
64       mkdir($absolute,00777);
65     }
66     if (!file_exists("$absolute/.htaccess")) {
67       touch("$absolute/.htaccess");
68       $file = fopen("$absolute/.htaccess","r+");
69       fseek($file,0);
70       $param="AuthUserFile $absolute/.htpasswd\nAuthName \"Zone Protégée\"\nAuthType Basic\nrequire valid-user\n";
71       fwrite($file, $param);
72       fclose($file);
73     }
74     if (!file_exists("$absolute/.htpasswd")) {
75       touch("$absolute/.htpasswd");
76       return true;
77     }
78     return true;
79   }
80
81   /*---------------------------------------------------------------------------*/
82   /**
83    * Retourne la liste de tous les dossiers de l'utilisateur contenant un .htpasswd
84    * @return array Tableau contenant la liste des dossiers protégés de l'utilisateur
85    */
86   function ListDir() {
87     global $err,$mem;
88     $err->log("hta","listdir");
89     $sortie=array();
90     $absolute="/var/alternc/html/".substr($mem->user["login"],0,1)."/".$mem->user["login"];
91     exec("find $absolute -name .htpasswd | sort", $sortie);
92     if (!count($sortie)) {
93       $err->raise("hta",4);
94       return false;
95     }
96     for ($i=0;$i<count($sortie);$i++){
97       preg_match("/^\/var\/alternc\/html\/.\/[^\/]*\/(.*)\/\.htpasswd/", $sortie[$i], $matches);
98       $r[$i]=$matches[1]."/";
99     }
100     return $r;
101   }
102
103   /*---------------------------------------------------------------------------*/
104   /**
105    * Retourne TRUE si le dossier paramètre est protégé.
106    * @param string $dir Dossier dont on souhaite vérifier la protection
107    * @return TRUE si le dossier est protégé, FALSE sinon
108    */
109   function is_protected($dir){
110     global $mem,$err;
111     $err->log("hta","is_protected",$dir);
112     $absolute="/var/alternc/html/".substr($mem->user["login"],0,1)."/".$mem->user["login"]."/$dir";
113     $sortie=array();
114     if (file_exists("$absolute/.htpasswd")){
115       return true;
116     }
117     else {
118       return false;
119     }
120   }
121
122   /*---------------------------------------------------------------------------*/
123   /**
124    * Retourne la liste des utilisateurs autorisés dans le dossier
125    * @param string $dir Dossier dont on souhaite obtenir la liste des user/pass
126    * @return array Tableau contenant la liste des logins du .htpasswd ou FALSE.
127    */
128   function get_hta_detail($dir) {
129     global $mem,$err;
130     $err->log("hta","get_hta_detail");
131     $absolute="/var/alternc/html/".substr($mem->user["login"],0,1)."/".$mem->user["login"]."/$dir";
132     if (file_exists("$absolute/.htaccess")) {
133       /*        if (!_reading_htaccess($absolute)) {
134             return false;
135             }
136       */    }
137     $file = fopen("$absolute/.htpasswd","r");
138     $i=0;
139     $res=array();
140     fseek($file,0);
141     // TODO: Tester la validité du .htpasswd
142     while (!feof($file)) {
143       $s=fgets($file,1024);
144       $t=explode(":",$s);
145       if ($t[0]!=$s) {
146     $res[$i]=$t[0];
147     $i=$i+1;
148       }
149     }
150     fclose($file);
151     return $res;
152   }
153
154   /*---------------------------------------------------------------------------*/
155   /**
156    * Déprotège un dossier
157    * @param string $dir Dossier à déprotéger
158    * @return boolean TRUE si le dossier a été déprotégé, FALSE sinon
159    */
160   function DelDir($dir) {
161     global $mem,$bro,$err;
162     $err->log("hta","deldir",$dir);
163     $dir=$bro->convertabsolute($dir,0);
164     if (!$dir) {
165       $err->raise("hta",8,$dir);
166       return false;
167     }
168     if (!unlink("$dir/.htaccess")) {
169       $err->raise("hta",5,$dir);
170       return false;
171     }
172     if (!unlink("$dir/.htpasswd")) {
173       $err->raise("hta",6,$dir);
174       return false;
175     }
176     return true;
177   }
178
179   /*---------------------------------------------------------------------------*/
180   /**
181    * Ajoute un utilisateur à un dossier protégé.
182    * @param string $login Utilisateur à ajouter
183    * @param string $password Mot de passe à ajouter (en clair)
184    * @param string $dir Dossier concerné
185    * @return boolean TRUE si l'utilisateur a été ajouté avec succès, FALSE sinon
186    */
187   function add_user($user,$password,$dir) {
188     global $err, $bro;
189     $err->log("hta","add_user",$user."/".$dir);
190     $absolute=$bro->convertabsolute($dir,0);
191     if (!file_exists($absolute)) {
192       $err->raise("hta",8,$dir);
193       return false;
194     }
195     if (checkloginmail($user)){
196       $file = fopen("$absolute/.htpasswd","a+");
197       fseek($file,0);
198       while (!feof($file)) {
199     $s=fgets($file,1024);
200     $t=explode(":",$s);
201     if ($t[0]==$user) {
202       $err->raise("hta",10,$user);
203       return false;
204     }
205       }
206       fseek($file,SEEK_END);
207       if (substr($t[1],-1)!="\n") {
208     fwrite($file,"\n");
209       }
210       fwrite($file, "$user:"._md5cr($password)."\n");
211       fclose($file);
212       return true;
213     } else {
214       $err->raise("hta",11);
215       return false;
216     }
217   }
218
219   /*---------------------------------------------------------------------------*/
220   /**
221    * Supprime un ou plusieurs utilisateurs d'un dossier protégé.
222    * @param array $lst Tableau des logins à supprimer.
223    * @param string $dir Dossier dans lequel on souhaite supprimer des utilisateurs
224    * @return boolean TRUE si les utilisateurs ont été supprimés avec succès, FALSE sinon
225    */
226   function del_user($lst,$dir) {
227     global $bro,$err;
228     $err->log("hta","del_user",$lst."/".$dir);
229     $absolute=$bro->convertabsolute($dir,0);
230     if (!file_exists($absolute)) {
231       $err->raise("hta",8,$dir);
232       return false;
233     }
234     touch("$absolute/.htpasswd.new");
235     $file = fopen("$absolute/.htpasswd","r");
236     $newf = fopen("$absolute/.htpasswd.new","a");
237     reset($lst);
238     fseek($file,0);
239     while (!feof($file)) {
240       $s=fgets($file,1024);
241       $t=explode(":",$s);
242       if (!in_array($t[0],$lst) && ($t[0]!="\n")) {
243     fseek($newf,0);
244     fwrite($newf, "$s");
245       }
246     }
247     fclose($file);
248     fclose($newf);
249     unlink("$absolute/.htpasswd");
250     rename("$absolute/.htpasswd.new", "$absolute/.htpasswd");
251     return true;
252   }
253
254   /*---------------------------------------------------------------------------*/
255   /**
256    * Change le mot de passe d'un utilisateur d'un dossier protégé.
257    * @param string $user Utilisateur dont on souhaite changer le mot de passe
258    * @param string $newpass Nouveau mot de passe de cet utilisateur
259    * @param string $dir Dossier protégé concerné
260    * @return boolean TRUE si le mot de passe a été changé avec succès, FALSE sinon
261    */
262   function change_pass($user,$newpass,$dir) {
263     global $bro,$err;
264     $err->log("hta","change_pass",$user."/".$dir);
265     $absolute=$bro->convertabsolute($dir,0);
266     if (!file_exists($absolute)) {
267       $err->raise("hta",8,$dir);
268       return false;
269     }
270     touch("$absolute/.htpasswd.new");
271     $file = fopen("$absolute/.htpasswd","r");
272     $newf = fopen("$absolute/.htpasswd.new","a");
273     while (!feof($file)) {
274       $s=fgets($file,1024);
275       $t=explode(":",$s);
276       if ($t[0]!=$user) {
277     fwrite($newf, "$s");
278       }
279     }
280     fwrite($newf, "$user:"._md5cr($newpass)."\n");
281     fclose($file);
282     fclose($newf);
283     unlink("$absolute/.htpasswd");
284     rename("$absolute/.htpasswd.new", "$absolute/.htpasswd");
285     return true;
286   }
287
288   /*---------------------------------------------------------------------------*/
289   /**
290    * Vérifie la validité des lignes d'un .htaccess existant.
291    * @param string $absolute Dossier que l'on souhaite vérifier
292    * @return boolean TRUE si le dossier est correctement protégé par un .htaccess, FALSE sinon
293    * @access private
294    */
295   function _reading_htaccess($absolute) {
296     global $err;
297     $err->log("hta","_reading_htaccess",$absolute);
298     $file = fopen("$absolute/.htaccess","r+");
299     $lignes=array(1,1,1);
300     $errr=0;
301     while (!feof($file) && !$errr) {
302       $s=fgets($file,1024);
303       if (substr($s,0,12)!="RewriteCond " && substr($s,0,14)!="ErrorDocument " && substr($s,0,12)!="RewriteRule " && substr($s,0,14)!="RewriteEngine " && trim($s)!="") {
304     $errr=1;
305       }
306       if (strtolower(trim($s))==strtolower("authuserfile $absolute/.htpasswd")) {
307     $lignes[0]=0;
308     $errr=0;
309       } // authuserfile
310       if (strtolower(trim($s))=="require valid-user") {
311     $lignes[1]=0;
312     $errr=0;
313       } //require
314       if (strtolower(trim($s))=="authtype basic") {
315     $lignes[2]=0;
316     $errr=0;
317       } //authtype
318     } // Reading config file
319     fclose($file);
320     if ($errr ||  in_array(0,$lignes)) {
321       $err->raise("hta",1);
322       return false;
323     }
324     return true;
325   }
326
327 } /* CLASS m_webaccess */
328
329 ?>
Note: See TracBrowser for help on using the browser.