translating comments of m_hta.php to english + misc fopen() checks

This commit is contained in:
Benjamin Sonntag 2009-11-30 05:02:53 +00:00
parent 2441ba9936
commit 161a04cebb
6 changed files with 203 additions and 45 deletions

View File

@ -190,7 +190,6 @@ class m_admin {
* *
*/ */
function get_list($all=0,$creator=0) { function get_list($all=0,$creator=0) {
// PATCHBEN pour ne voir que les comptes que l'on a créé (sauf admin)
global $err,$mem,$cuid; global $err,$mem,$cuid;
$err->log("admin","get_list"); $err->log("admin","get_list");
if (!$this->enabled) { if (!$this->enabled) {
@ -259,7 +258,7 @@ class m_admin {
*/ */
function checkcreator($uid) { function checkcreator($uid) {
global $err,$mem,$db,$cuid; global $err,$mem,$db,$cuid;
// DONE PATCHBEN Check that the current user is editing one of it's own account ! // Check that the current user is editing one of it's own account !
// but ADMIN (always uid 2000) is almighty // but ADMIN (always uid 2000) is almighty
if ($cuid==2000) { if ($cuid==2000) {
return true; return true;
@ -342,9 +341,6 @@ class m_admin {
$db->query("SELECT count(*) AS cnt FROM membres WHERE login='$login';"); $db->query("SELECT count(*) AS cnt FROM membres WHERE login='$login';");
$db->next_record(); $db->next_record();
if (!$db->f("cnt")) { if (!$db->f("cnt")) {
// [ML] ATTENTION: ce code recycle les uid de comptes supprimes
// ne cause pas vraiment de bug, mais c'est une mauvaise pratique, et
// risque que deux comptes aient le meme uid si crees exactement en meme temps
$db->query("SELECT m.uid+1 as nextid FROM membres m LEFT JOIN membres n ON m.uid=n.uid-1 WHERE n.uid IS NULL ORDER BY 1 LIMIT 0,1"); $db->query("SELECT m.uid+1 as nextid FROM membres m LEFT JOIN membres n ON m.uid=n.uid-1 WHERE n.uid IS NULL ORDER BY 1 LIMIT 0,1");
if (!$db->next_record()) { if (!$db->next_record()) {
$uid=2000; $uid=2000;
@ -1019,6 +1015,100 @@ EOF;
return $db->f("login"); return $db->f("login");
} }
/* ----------------------------------------------------------------- */
/**
* List the password policies currently installed in the policy table
*
* @return array an indexed array of associative array from the MySQL "policy" table
*
*/
function listPasswordPolicies() {
global $db,$classes;
$tmp1=array();
$tmp2=array();
$policies=array();
$db->query("SELECT * FROM policy;");
while ($db->next_record()) {
$tmp1[$db->Record["name"]]=$db->Record;
}
foreach($classes as $c) {
if (method_exists($GLOBALS[$c],"alternc_password_policy")) {
$res=$GLOBALS[$c]->alternc_password_policy(); // returns an array
foreach($res as $k=>$v) {
$tmp2[$k]=$v;
}
}
}
foreach($tmp2 as $k=>$v) {
if (!isset($tmp1[$k])) {
// Default policy :
$db->query("INSERT INTO policy SET name='".addslashes($k)."', minsize=0, maxsize=64, classcount=0, allowlogin=0;");
$tmp1[$k]=array(
"minsize"=>0, "maxsize"=>64, "classcount"=>0, "allowlogin"=>0
);
}
$policies[$k]=$tmp1[$k];
$policies[$k]["description"]=_($v);
unset($tmp1[$k]);
}
foreach ($tmp1 as $k=>$v) {
// Delete disabled modules :
$db->query("DELETE FROM policy WHERE name='".addslashes($k)."';");
}
return $policies;
}
/* ----------------------------------------------------------------- */
/**
* Change a password policy for one kind of password
*
* @param $policy string Name of the policy to edit
* @param $minsize integer Minimum Password size
* @param $maxsize integer Maximum Password size
* @param $classcount integer How many class of characters must this password have
* @param $allowlogin boolean Do we allow the password to be like the login ?
* @return boolean TRUE if the policy has been edited, or FALSE if an error occured.
*
*/
function editPolicy($policy,$minsize,$maxsize,$classcount,$allowlogin) {
global $db;
$minsize=intval($minsize);
$maxsize=intval($maxsize);
$classcount=intval($classcount);
$allowlogin=intval($allowlogin);
$db->query("SELECT * FROM policy WHERE name='".addslashes($policy)."';");
if (!$db->next_record()) {
return false; // Policy not found
}
if ($minsize<0 || $minsize>64 || $maxsize<0 || $maxsize>64 || $maxsize<$minsize || $classcount<0 || $classcount>4) {
return false; // Incorrect policy ...
}
$allowlogin=($allowlogin)?1:0;
$db->query("UPDATE policy SET minsize=$minsize, maxsize=$maxsize, classcount=$classcount, allowlogin=$allowlogin WHERE name='".addslashes($policy)."';");
return true;
}
/* ----------------------------------------------------------------- */
/**
* Check a password and a login for a specific policy
*
* @param $policy string Name of the policy to check for
* @param $login The login that will be set
* @param $password The password we have to check
* @return boolean TRUE if the password if OK for this login and this policy, FALSE if it is not.
*
*/
function checkPolicy($policy,$login,$password) {
global $db;
}
} /* Classe ADMIN */ } /* Classe ADMIN */
?> ?>

View File

@ -46,6 +46,16 @@ class m_ftp {
return "ftp"; return "ftp";
} }
/* ----------------------------------------------------------------- */
/**
* Password kind used in this class (hook for admin class)
*/
function alternc_password_policy() {
return array("ftp"=>"FTP accounts");
}
/* ----------------------------------------------------------------- */ /* ----------------------------------------------------------------- */
/** Retourne la liste des comptes FTP du compte hébergé /** Retourne la liste des comptes FTP du compte hébergé
* Retourne la liste des comptes FTP sous forme de tableau indexé de * Retourne la liste des comptes FTP sous forme de tableau indexé de

View File

@ -27,30 +27,32 @@
Purpose of file: Purpose of file:
---------------------------------------------------------------------- ----------------------------------------------------------------------
*/ */
/** /**
* Classe de gestion des dossiers protégés par .htaccess apache * This class handle folder web restricted access through .htaccess/.htpassword
* files.
* *
* Cette classe permet de gérer les dossiers protégés par login/pass
* par le système .htaccess d'apache.
* Copyleft {@link http://alternc.net/ AlternC Team} * Copyleft {@link http://alternc.net/ AlternC Team}
* *
* @copyright AlternC-Team 2002-11-01 http://alternc.net/ * @copyright AlternC-Team 2002-11-01 http://alternc.org/
* *
*/ */
class m_hta { class m_hta {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
/** /**
* Constructeur de la classe m_webaccess, initialise le membre * Constructor
*/ */
function m_webaccess() { function m_webaccess() {
} }
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
/** /**
* Crée un dossier à protéger (.htaccess et .htpasswd) * Create a protected folder (.htaccess et .htpasswd)
* @param string $dir Répertoire relatif au dossier de l'utilisateur * @param string $dir Folder to protect (relative to user root)
* @return boolean TRUE si le dossier a été protégé avec succès, FALSE sinon * @return boolean TRUE if the folder has been protected, or FALSE if an error occurred
*/ */
function CreateDir($dir) { function CreateDir($dir) {
global $mem,$bro,$err; global $mem,$bro,$err;
@ -78,10 +80,11 @@ class m_hta {
return true; return true;
} }
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
/** /**
* Retourne la liste de tous les dossiers de l'utilisateur contenant un .htpasswd * Returns the list of all user folder currently protected by a .htpasswd file
* @return array Tableau contenant la liste des dossiers protégés de l'utilisateur * @return array Array containing user folder list
*/ */
function ListDir() { function ListDir() {
global $err,$mem; global $err,$mem;
@ -100,11 +103,12 @@ class m_hta {
return $r; return $r;
} }
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
/** /**
* Retourne TRUE si le dossier paramètre est protégé. * Tells if a folder is protected.
* @param string $dir Dossier dont on souhaite vérifier la protection * @param string $dir Folder to check
* @return TRUE si le dossier est protégé, FALSE sinon * @return TRUE if the folder is protected, or FALSE if it is not
*/ */
function is_protected($dir){ function is_protected($dir){
global $mem,$err; global $mem,$err;
@ -119,11 +123,12 @@ class m_hta {
} }
} }
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
/** /**
* Retourne la liste des utilisateurs autorisés dans le dossier * Returns the list of login for a protected folder.
* @param string $dir Dossier dont on souhaite obtenir la liste des user/pass * @param string $dir The folder to lookup (relative to user root)
* @return array Tableau contenant la liste des logins du .htpasswd ou FALSE. * @return array An array containing the list of logins from the .htpasswd file, or FALSE
*/ */
function get_hta_detail($dir) { function get_hta_detail($dir) {
global $mem,$err; global $mem,$err;
@ -134,10 +139,12 @@ class m_hta {
return false; return false;
} }
*/ } */ }
$file = fopen("$absolute/.htpasswd","r"); $file = @fopen("$absolute/.htpasswd","r");
$i=0; $i=0;
$res=array(); $res=array();
fseek($file,0); if (!$file) {
return false;
}
// TODO: Tester la validité du .htpasswd // TODO: Tester la validité du .htpasswd
while (!feof($file)) { while (!feof($file)) {
$s=fgets($file,1024); $s=fgets($file,1024);
@ -151,11 +158,12 @@ class m_hta {
return $res; return $res;
} }
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
/** /**
* Déprotège un dossier * Unprotect a folder
* @param string $dir Dossier à déprotéger * @param string $dir Folder to unprotect, relative to user root
* @return boolean TRUE si le dossier a été déprotégé, FALSE sinon * @return boolean TRUE if the folder has been unprotected, or FALSE if an error occurred
*/ */
function DelDir($dir) { function DelDir($dir) {
global $mem,$bro,$err; global $mem,$bro,$err;
@ -176,13 +184,14 @@ class m_hta {
return true; return true;
} }
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
/** /**
* Ajoute un utilisateur à un dossier protégé. * Add a user to a protected folder
* @param string $login Utilisateur à ajouter * @param string $login The user login to add
* @param string $password Mot de passe à ajouter (en clair) * @param string $password The password to add (cleartext)
* @param string $dir Dossier concerné * @param string $dir The folder we add it to (relative to user root).
* @return boolean TRUE si l'utilisateur a été ajouté avec succès, FALSE sinon * @return boolean TRUE if the user has been added, or FALSE if an error occurred
*/ */
function add_user($user,$password,$dir) { function add_user($user,$password,$dir) {
global $err, $bro; global $err, $bro;
@ -193,7 +202,11 @@ class m_hta {
return false; return false;
} }
if (checkloginmail($user)){ if (checkloginmail($user)){
$file = fopen("$absolute/.htpasswd","a+"); $file = @fopen("$absolute/.htpasswd","a+");
if (!$file) {
$err->raise("hta",12);
return false;
}
fseek($file,0); fseek($file,0);
while (!feof($file)) { while (!feof($file)) {
$s=fgets($file,1024); $s=fgets($file,1024);
@ -216,12 +229,13 @@ class m_hta {
} }
} }
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
/** /**
* Supprime un ou plusieurs utilisateurs d'un dossier protégé. * Delete a user from a protected folder.
* @param array $lst Tableau des logins à supprimer. * @param array $lst An array with login to delete.
* @param string $dir Dossier dans lequel on souhaite supprimer des utilisateurs * @param string $dir The folder, relative to user root, where we want to delete users.
* @return boolean TRUE si les utilisateurs ont été supprimés avec succès, FALSE sinon * @return boolean TRUE if users has been deleted, or FALSE if an error occurred.
*/ */
function del_user($lst,$dir) { function del_user($lst,$dir) {
global $bro,$err; global $bro,$err;
@ -234,6 +248,10 @@ class m_hta {
touch("$absolute/.htpasswd.new"); touch("$absolute/.htpasswd.new");
$file = fopen("$absolute/.htpasswd","r"); $file = fopen("$absolute/.htpasswd","r");
$newf = fopen("$absolute/.htpasswd.new","a"); $newf = fopen("$absolute/.htpasswd.new","a");
if (!$file || !$newf) {
$err->raise("hta",12);
return false;
}
reset($lst); reset($lst);
fseek($file,0); fseek($file,0);
while (!feof($file)) { while (!feof($file)) {
@ -251,13 +269,14 @@ class m_hta {
return true; return true;
} }
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
/** /**
* Change le mot de passe d'un utilisateur d'un dossier protégé. * Change the password of a user in a protected folder
* @param string $user Utilisateur dont on souhaite changer le mot de passe * @param string $user The users whose password should be changed
* @param string $newpass Nouveau mot de passe de cet utilisateur * @param string $newpass The new password of this user
* @param string $dir Dossier protégé concerné * @param string $dir The folder, relative to user root, in which we will change a password
* @return boolean TRUE si le mot de passe a été changé avec succès, FALSE sinon * @return boolean TRUE if the password has been changed, or FALSE if an error occurred
*/ */
function change_pass($user,$newpass,$dir) { function change_pass($user,$newpass,$dir) {
global $bro,$err; global $bro,$err;
@ -270,6 +289,10 @@ class m_hta {
touch("$absolute/.htpasswd.new"); touch("$absolute/.htpasswd.new");
$file = fopen("$absolute/.htpasswd","r"); $file = fopen("$absolute/.htpasswd","r");
$newf = fopen("$absolute/.htpasswd.new","a"); $newf = fopen("$absolute/.htpasswd.new","a");
if (!$file || !$newf) {
$err->raise("hta",12);
return false;
}
while (!feof($file)) { while (!feof($file)) {
$s=fgets($file,1024); $s=fgets($file,1024);
$t=explode(":",$s); $t=explode(":",$s);
@ -285,11 +308,12 @@ class m_hta {
return true; return true;
} }
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
/** /**
* Vérifie la validité des lignes d'un .htaccess existant. * Check that a .htaccess file is valid (for authentication)
* @param string $absolute Dossier que l'on souhaite vérifier * @param string $absolute Folder we want to check (relative to user root)
* @return boolean TRUE si le dossier est correctement protégé par un .htaccess, FALSE sinon * @return boolean TRUE is the .htaccess is protecting this folder, or FALSE else
* @access private * @access private
*/ */
function _reading_htaccess($absolute) { function _reading_htaccess($absolute) {
@ -298,6 +322,9 @@ class m_hta {
$file = fopen("$absolute/.htaccess","r+"); $file = fopen("$absolute/.htaccess","r+");
$lignes=array(1,1,1); $lignes=array(1,1,1);
$errr=0; $errr=0;
if (!$file) {
return false;
}
while (!feof($file) && !$errr) { while (!feof($file) && !$errr) {
$s=fgets($file,1024); $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)!="") { if (substr($s,0,12)!="RewriteCond " && substr($s,0,14)!="ErrorDocument " && substr($s,0,12)!="RewriteRule " && substr($s,0,14)!="RewriteEngine " && trim($s)!="") {
@ -324,6 +351,8 @@ class m_hta {
return true; return true;
} }
} /* CLASS m_webaccess */ } /* CLASS m_hta */
?> ?>

View File

@ -55,6 +55,14 @@ class m_mail {
} }
/**
* Password kind used in this class (hook for admin class)
*/
function alternc_password_policy() {
return array("pop"=>"POP/IMAP account passwords");
}
/* ----------------------------------------------------------------- */ /* ----------------------------------------------------------------- */
/** Returns the list of mail-hosted domains for a user /** Returns the list of mail-hosted domains for a user
* @return array indexed array of hosted domains * @return array indexed array of hosted domains

View File

@ -50,6 +50,15 @@ class m_mem {
function m_mem() { function m_mem() {
} }
/* ----------------------------------------------------------------- */
/**
* Password kind used in this class (hook for admin class)
*/
function alternc_password_policy() {
return array("mem"=>"AlternC's account password");
}
/* ----------------------------------------------------------------- */ /* ----------------------------------------------------------------- */
/** Check that the current user is an admnistrator. /** Check that the current user is an admnistrator.
* @return boolean TRUE if we are super user, or FALSE if we are not. * @return boolean TRUE if we are super user, or FALSE if we are not.

View File

@ -55,6 +55,18 @@ class m_mysql {
return array("mysql","mysql_users"); return array("mysql","mysql_users");
} }
/* ----------------------------------------------------------------- */
/**
* Password kind used in this class (hook for admin class)
*/
function alternc_password_policy() {
return array("mysql_users"=>"MySQL users");
}
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
/** Get the list of the database for the current user. /** Get the list of the database for the current user.
* @return array returns an associative array as follow : <br> * @return array returns an associative array as follow : <br>