log("hta","createdir",$dir); $absolute=$bro->convertabsolute($dir,0); if (!$absolute) { $err->raise("hta",8,$dir); return false; } if (!file_exists($absolute)) { mkdir($absolute,00777); } if (!file_exists("$absolute/.htaccess")) { touch("$absolute/.htaccess"); $file = fopen("$absolute/.htaccess","r+"); fseek($file,0); $param="AuthUserFile $absolute/.htpasswd\nAuthName \"Zone Protégée\"\nAuthType Basic\nrequire valid-user\n"; fwrite($file, $param); fclose($file); } if (!file_exists("$absolute/.htpasswd")) { touch("$absolute/.htpasswd"); return true; } return true; } /*---------------------------------------------------------------------------*/ /** * Retourne la liste de tous les dossiers de l'utilisateur contenant un .htpasswd * @return array Tableau contenant la liste des dossiers protégés de l'utilisateur */ function ListDir() { global $err,$mem; $err->log("hta","listdir"); $sortie=array(); $absolute="/var/alternc/html/".substr($mem->user["login"],0,1)."/".$mem->user["login"]; exec("find $absolute -name .htpasswd | sort", $sortie); if (!count($sortie)) { $err->raise("hta",4); return false; } for ($i=0;$ilog("hta","is_protected",$dir); $absolute="/var/alternc/html/".substr($mem->user["login"],0,1)."/".$mem->user["login"]."/$dir"; $sortie=array(); if (file_exists("$absolute/.htpasswd")){ return true; } else { return false; } } /*---------------------------------------------------------------------------*/ /** * Retourne la liste des utilisateurs autorisés dans le dossier * @param string $dir Dossier dont on souhaite obtenir la liste des user/pass * @return array Tableau contenant la liste des logins du .htpasswd ou FALSE. */ function get_hta_detail($dir) { global $mem,$err; $err->log("hta","get_hta_detail"); $absolute="/var/alternc/html/".substr($mem->user["login"],0,1)."/".$mem->user["login"]."/$dir"; if (file_exists("$absolute/.htaccess")) { /* if (!_reading_htaccess($absolute)) { return false; } */ } $file = fopen("$absolute/.htpasswd","r"); $i=0; $res=array(); fseek($file,0); // TODO: Tester la validité du .htpasswd while (!feof($file)) { $s=fgets($file,1024); $t=explode(":",$s); if ($t[0]!=$s) { $res[$i]=$t[0]; $i=$i+1; } } fclose($file); return $res; } /*---------------------------------------------------------------------------*/ /** * Déprotège un dossier * @param string $dir Dossier à déprotéger * @return boolean TRUE si le dossier a été déprotégé, FALSE sinon */ function DelDir($dir) { global $mem,$bro,$err; $err->log("hta","deldir",$dir); $dir=$bro->convertabsolute($dir,0); if (!$dir) { $err->raise("hta",8,$dir); return false; } if (!unlink("$dir/.htaccess")) { $err->raise("hta",5,$dir); return false; } if (!unlink("$dir/.htpasswd")) { $err->raise("hta",6,$dir); return false; } return true; } /*---------------------------------------------------------------------------*/ /** * Ajoute un utilisateur à un dossier protégé. * @param string $login Utilisateur à ajouter * @param string $password Mot de passe à ajouter (en clair) * @param string $dir Dossier concerné * @return boolean TRUE si l'utilisateur a été ajouté avec succès, FALSE sinon */ function add_user($user,$password,$dir) { global $err, $bro; $err->log("hta","add_user",$user."/".$dir); $absolute=$bro->convertabsolute($dir,0); if (!file_exists($absolute)) { $err->raise("hta",8,$dir); return false; } if (checkloginmail($user)){ $file = fopen("$absolute/.htpasswd","a+"); fseek($file,0); while (!feof($file)) { $s=fgets($file,1024); $t=explode(":",$s); if ($t[0]==$user) { $err->raise("hta",10,$user); return false; } } fseek($file,SEEK_END); if (substr($t[1],-1)!="\n") { fwrite($file,"\n"); } fwrite($file, "$user:"._md5cr($password)."\n"); fclose($file); return true; } else { $err->raise("hta",11); return false; } } /*---------------------------------------------------------------------------*/ /** * Supprime un ou plusieurs utilisateurs d'un dossier protégé. * @param array $lst Tableau des logins à supprimer. * @param string $dir Dossier dans lequel on souhaite supprimer des utilisateurs * @return boolean TRUE si les utilisateurs ont été supprimés avec succès, FALSE sinon */ function del_user($lst,$dir) { global $bro,$err; $err->log("hta","del_user",$lst."/".$dir); $absolute=$bro->convertabsolute($dir,0); if (!file_exists($absolute)) { $err->raise("hta",8,$dir); return false; } touch("$absolute/.htpasswd.new"); $file = fopen("$absolute/.htpasswd","r"); $newf = fopen("$absolute/.htpasswd.new","a"); reset($lst); fseek($file,0); while (!feof($file)) { $s=fgets($file,1024); $t=explode(":",$s); if (!in_array($t[0],$lst) && ($t[0]!="\n")) { fseek($newf,0); fwrite($newf, "$s"); } } fclose($file); fclose($newf); unlink("$absolute/.htpasswd"); rename("$absolute/.htpasswd.new", "$absolute/.htpasswd"); return true; } /*---------------------------------------------------------------------------*/ /** * Change le mot de passe d'un utilisateur d'un dossier protégé. * @param string $user Utilisateur dont on souhaite changer le mot de passe * @param string $newpass Nouveau mot de passe de cet utilisateur * @param string $dir Dossier protégé concerné * @return boolean TRUE si le mot de passe a été changé avec succès, FALSE sinon */ function change_pass($user,$newpass,$dir) { global $bro,$err; $err->log("hta","change_pass",$user."/".$dir); $absolute=$bro->convertabsolute($dir,0); if (!file_exists($absolute)) { $err->raise("hta",8,$dir); return false; } touch("$absolute/.htpasswd.new"); $file = fopen("$absolute/.htpasswd","r"); $newf = fopen("$absolute/.htpasswd.new","a"); while (!feof($file)) { $s=fgets($file,1024); $t=explode(":",$s); if ($t[0]!=$user) { fwrite($newf, "$s"); } } fwrite($newf, "$user:"._md5cr($newpass)."\n"); fclose($file); fclose($newf); unlink("$absolute/.htpasswd"); rename("$absolute/.htpasswd.new", "$absolute/.htpasswd"); return true; } /*---------------------------------------------------------------------------*/ /** * Vérifie la validité des lignes d'un .htaccess existant. * @param string $absolute Dossier que l'on souhaite vérifier * @return boolean TRUE si le dossier est correctement protégé par un .htaccess, FALSE sinon * @access private */ function _reading_htaccess($absolute) { global $err; $err->log("hta","_reading_htaccess",$absolute); $file = fopen("$absolute/.htaccess","r+"); $lignes=array(1,1,1); $errr=0; while (!feof($file) && !$errr) { $s=fgets($file,1024); if (substr($s,0,12)!="RewriteCond " && substr($s,0,14)!="ErrorDocument " && substr($s,0,12)!="RewriteRule " && substr($s,0,14)!="RewriteEngine " && trim($s)!="") { $errr=1; } if (strtolower(trim($s))==strtolower("authuserfile $absolute/.htpasswd")) { $lignes[0]=0; $errr=0; } // authuserfile if (strtolower(trim($s))=="require valid-user") { $lignes[1]=0; $errr=0; } //require if (strtolower(trim($s))=="authtype basic") { $lignes[2]=0; $errr=0; } //authtype } // Reading config file fclose($file); if ($errr ||  in_array(0,$lignes)) { $err->raise("hta",1); return false; } return true; } } /* CLASS m_webaccess */ ?>