From da09f231b0b95e3494b3c010d37de8563af764df Mon Sep 17 00:00:00 2001 From: Alan Garcia Date: Mon, 3 Dec 2012 08:11:06 +0000 Subject: [PATCH] Fix #1348 --- bureau/admin/adm_add.php | 15 ++++++++------- bureau/admin/adm_doadd.php | 38 +++++++++----------------------------- bureau/class/m_admin.php | 37 +++++++++++++++++++++++++++++++++++-- bureau/class/m_ftp.php | 6 ++++++ bureau/class/m_quota.php | 3 +++ 5 files changed, 61 insertions(+), 38 deletions(-) diff --git a/bureau/admin/adm_add.php b/bureau/admin/adm_add.php index b29712ed..d26d6d5c 100644 --- a/bureau/admin/adm_add.php +++ b/bureau/admin/adm_add.php @@ -38,14 +38,15 @@ if (!$admin->enabled) { } $fields = array ( - "canpass" => array ("request", "integer", 1), - "login" => array ("request", "string", null), - "pass" => array ("request", "string", null), + "canpass" => array ("request", "integer", 1), + "login" => array ("request", "string", null), + "pass" => array ("request", "string", null), "passconf" => array ("request", "string", null), - "notes" => array ("request", "string", null), - "nom" => array ("request", "string", null), - "prenom" => array ("request", "string", null), - "nmail" => array ("request", "string", null), + "notes" => array ("request", "string", null), + "nom" => array ("request", "string", null), + "prenom" => array ("request", "string", null), + "nmail" => array ("request", "string", null), + "create_dom" => array ("request", "integer", 0), ); getFields($fields); diff --git a/bureau/admin/adm_doadd.php b/bureau/admin/adm_doadd.php index e35eeb56..b8f462bf 100644 --- a/bureau/admin/adm_doadd.php +++ b/bureau/admin/adm_doadd.php @@ -46,37 +46,17 @@ if ($pass != $passconf) { include("adm_add.php"); exit(); } -if (!($u=$admin->add_mem($login, $pass, $nom, $prenom, $nmail, $canpass, $type, 0, $notes))) { + +// Attemp to create, exit if fail +if (!($u=$admin->add_mem($login, $pass, $nom, $prenom, $nmail, $canpass, $type, 0, $notes, 0, $create_dom_list))) { $error=$err->errstr(); include ("adm_add.php"); exit; -} else { - - // Add here all what you want when an account is created ! - $mem->su($u); - - /* - * 1 = hébergement dns, en effet, les - * domaines *.koumbit.net ne sont pas forcément sur le serveur - * - * 1 = noerase = empêche à l'utilisateur de modifier le dns ou de - * supprimer le domaine - * - * 1 = force = ne tient pas compte du whois ou des droits de tld - */ -// FIXME: rien à faire ici. Ca devrait être dans la classe. - if (isset($create_dom) && ($create_dom == 1) && !is_null($create_dom_list)) { - // make sure we don't have multiple dots there - $dom->lock(); - $dom->add_domain($login.".".preg_replace("/^\.\.*/", "", $create_dom_list),1,1,1); - $dom->unlock(); - } - $ftp->add_ftp($login,"",$pass,"/"); - $mem->unsu(); - - $error=_("The new member has been successfully created"); - - include("adm_list.php"); - exit; } + +$error=_("The new member has been successfully created"); + +include("adm_list.php"); +exit; + ?> diff --git a/bureau/class/m_admin.php b/bureau/class/m_admin.php index 181cd812..8b749a6f 100644 --- a/bureau/class/m_admin.php +++ b/bureau/class/m_admin.php @@ -283,7 +283,35 @@ class m_admin { return true; } + // When the admin want to delegate a subdomain to an account + function add_shared_domain($u, $domain_name) { + global $db,$err,$dom,$mem,$cuid; + $err->log("admin","add_shared_domain",$u."/".$domain_name); + if (! $mem->checkright() ) { + $err->raise("admin",_("-- Only administrators can do that! --")); + return false; + } + + // Check if this domain exist on this admin account + if (! in_array($domain_name, $dom->enum_domains())) { + $err->raise("admin",_("You don't seem to be allowed to delegate this domain")); + $err->log("admin","add_shared_domain","domain not allowed"); + return false; + } + + // Clean the domain_name + $domain_name=preg_replace("/^\.\.*/", "", $domain_name); + + $mem->su($u); + $dom->lock(); + // option : 1=hébergement dns, 1=noerase, empeche de modifier, 1=force + $dom->add_domain($mem->user['login'].".".$domain_name,1,1,1); + $dom->unlock(); + $mem->unsu(); + return true; + } + /* ----------------------------------------------------------------- */ /** Creates a new hosted account * @@ -300,7 +328,7 @@ class m_admin { * @pararm $type string Account type for quotas * @return boolean Returns FALSE if an error occurs, TRUE if not. */ - function add_mem($login, $pass, $nom, $prenom, $mail, $canpass=1, $type='default', $duration=0, $notes = "", $force=0) { + function add_mem($login, $pass, $nom, $prenom, $mail, $canpass=1, $type='default', $duration=0, $notes = "", $force=0, $create_dom=false) { global $err,$quota,$classes,$cuid,$mem,$L_MYSQL_DATABASE,$L_MYSQL_LOGIN,$hooks; $err->log("admin","add_mem",$login."/".$mail); if (!$this->enabled) { @@ -367,8 +395,14 @@ class m_admin { */ $hooks->invoke("alternc_add_member"); // New hook way + $hooks->invoke("hook_admin_add_member", array(), array('quota')); // First !!! The quota !!! Etherway, we can't be sure to be able to create all $hooks->invoke("hook_admin_add_member"); $mem->unsu(); + + if (!empty($create_dom)) { + $this->add_shared_domain($uid, $create_dom); + } + return $uid; } else { $err->raise("admin",_("This login already exists")); @@ -376,7 +410,6 @@ class m_admin { } } - /* ----------------------------------------------------------------- */ /** AlternC's standard function called when a user is created * This sends an email if configured through the interface. diff --git a/bureau/class/m_ftp.php b/bureau/class/m_ftp.php index ae5db6f8..72edb3ad 100644 --- a/bureau/class/m_ftp.php +++ b/bureau/class/m_ftp.php @@ -97,6 +97,12 @@ class m_ftp { } } + function hook_admin_add_member() { + global $mem,$err; + $err->log("ftp","hook_admin_add_member"); + return $this->add_ftp($mem->user['login'],"",$mem->user['pass'],"/"); + } + /* ----------------------------------------------------------------- */ /** Retourne les détails d'un compte FTP (voir get_list) * Le tableau est celui du compte d'id spécifié diff --git a/bureau/class/m_quota.php b/bureau/class/m_quota.php index 4ff9b0f4..95d939ee 100644 --- a/bureau/class/m_quota.php +++ b/bureau/class/m_quota.php @@ -514,7 +514,10 @@ class m_quota { * globals $cuid is the appropriate user */ function hook_admin_add_member() { + global $err; + $err->log("quota","hook_admin_add_member"); $this->addquotas(); + $this->getquota('',true); // actualise quota }