From: hickert Date: Tue, 6 Jun 2006 12:14:17 +0000 (+0000) Subject: Added new service management X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=f271f422648038c39396af448362d66af0ff0073;p=gosa.git Added new service management git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@3659 594d385d-05f5-0310-b6e9-bd551577e9d8 --- diff --git a/html/images/status_restart.png b/html/images/status_restart.png new file mode 100644 index 000000000..de65ee190 Binary files /dev/null and b/html/images/status_restart.png differ diff --git a/html/images/status_restart_all.png b/html/images/status_restart_all.png new file mode 100644 index 000000000..de65ee190 Binary files /dev/null and b/html/images/status_restart_all.png differ diff --git a/html/images/status_restarting.png b/html/images/status_restarting.png new file mode 100644 index 000000000..de65ee190 Binary files /dev/null and b/html/images/status_restarting.png differ diff --git a/html/images/status_running.png b/html/images/status_running.png new file mode 100755 index 000000000..543710fb7 Binary files /dev/null and b/html/images/status_running.png differ diff --git a/html/images/status_start.png b/html/images/status_start.png new file mode 100755 index 000000000..543710fb7 Binary files /dev/null and b/html/images/status_start.png differ diff --git a/html/images/status_start_all.png b/html/images/status_start_all.png new file mode 100755 index 000000000..543710fb7 Binary files /dev/null and b/html/images/status_start_all.png differ diff --git a/html/images/status_stop.png b/html/images/status_stop.png new file mode 100755 index 000000000..3240b29d5 Binary files /dev/null and b/html/images/status_stop.png differ diff --git a/html/images/status_stop_all.png b/html/images/status_stop_all.png new file mode 100755 index 000000000..3240b29d5 Binary files /dev/null and b/html/images/status_stop_all.png differ diff --git a/html/images/status_stopped.png b/html/images/status_stopped.png new file mode 100755 index 000000000..3240b29d5 Binary files /dev/null and b/html/images/status_stopped.png differ diff --git a/plugins/admin/systems/ServerService/ServiceAddDialog.tpl b/plugins/admin/systems/ServerService/ServiceAddDialog.tpl new file mode 100755 index 000000000..386e1ee08 --- /dev/null +++ b/plugins/admin/systems/ServerService/ServiceAddDialog.tpl @@ -0,0 +1,38 @@ +
+
+ {t}Add a new service to this server.{/t}. +
+
+
+

+{t}This dialog allows you to add new services to the currenty edited server object. In the box below you can see all available services, services you have already in use are not shown.{/t} +
+
+

+{if $Services} + +
+ +{t}Please choose a service listed below.{/t} +
+
+
{t}Available services{/t}   + +{else} +
+ {t}There are no more services available, if you think that there is a service missing. Please check your gosa configuration file.{/t} +
+{/if} +
+
+

+

+

+ +   + +
+

+ diff --git a/plugins/admin/systems/ServerService/back b/plugins/admin/systems/ServerService/back new file mode 100644 index 000000000..fbae155cb --- /dev/null +++ b/plugins/admin/systems/ServerService/back @@ -0,0 +1,126 @@ + "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* This plugin only writes its objectClass */ + var $objectclasses = array("goMailServer"); + + /* This class can't be assigned twice so it conflicts with itsself */ + var $conflicts = array("goMailServer"); + + var $DisplayName = ""; + var $dn = NULL; + var $StatusFlag = "goMailServerStatus"; + var $attributes = array("goMailServerStatus","description","goMailServerStatus","postfixHeaderSizeLimit", + "postfixMailboxSizeLimit","postfixMessageSizeLimit", + "postfixMydestinations","postfixMydomain","postfixMyhostname", + "postfixMynetworks","postfixRelayhost","postfixTransportTable", + "postfixSenderRestrictions","postfixRecipientRestrictions"); + + var $goMailServerStatus + var $postfixHeaderSizeLimit + var $postfixMailboxSizeLimit + var $postfixMessageSizeLimit + var $postfixMydestinations + var $postfixMydomain + var $postfixMyhostname + var $postfixMynetworks + var $postfixRelayhost + var $postfixTransportTable + var $postfixSenderRestrictions + var $postfixRecipientRestrictions + + + function goMailServer($config,$dn) + { + plugin::plugin($config,$dn); + $this->DisplayName = _("Flag server as mail server."); + $this->is_account = true; + } + + function execute() + { + /* this class can't be executed- It represents only a flag */ + return; + } + + function getListEntry() + { + $flag = $this->StatusFlag; + $fields['Status'] = $this->$flag; + $fields['Message'] = _("Flag server as mail server"); + $fields['AllowStart'] = true; + $fields['AllowStop'] = true; + $fields['AllowReset'] = true; + $fields['AllowRemove']= true; + $fields['AllowEdit'] = true; + return($fields); + } + + function remove_from_parent() + { + plugin::remove_from_parent(); + /* Check if this is a new entry ... add/modify */ + $ldap = $this->config->get_ldap_link(); + $ldap->cat($this->dn,array("objectClass")); + if($ldap->count()){ + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + }else{ + $ldap->cd($this->dn); + $ldap->add($this->attrs); + } + show_ldap_error($ldap->get_error()); + } + + function save() + { + plugin::save(); + /* Check if this is a new entry ... add/modify */ + $ldap = $this->config->get_ldap_link(); + $ldap->cat($this->dn,array("objectClass")); + if($ldap->count()){ + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + }else{ + $ldap->cd($this->dn); + $ldap->add($this->attrs); + } + show_ldap_error($ldap->get_error()); + } + + + /* Directly save new status flag */ + function setStatus($value) + { + $ldap = $this->config->get_ldap_link(); + $ldap->cd($this->dn); + $ldap->cat($this->dn,array("objectClass")); + + if($ldap->count()){ + $attrs =array(); + $tmp = $ldap->fetch(); + for($i = 0; $i < $tmp['objectClass']['count']; $i ++){ + $attrs['objectClass'][] = $tmp['objectClass'][$i]; + } + $flag = $this->StatusFlag; + $attrs[$flag] = $value; + $this->$flag = $value; + $ldap->modify($attrs); + show_ldap_error($ldap->get_error()); + } + } + + + function check(){ return array();} + function save_object() + { + plugin::save_object(); + } +} +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/systems/ServerService/class_ServerService.inc b/plugins/admin/systems/ServerService/class_ServerService.inc new file mode 100644 index 000000000..9f9747a6e --- /dev/null +++ b/plugins/admin/systems/ServerService/class_ServerService.inc @@ -0,0 +1,305 @@ +"Config object" , "dn"=>"Object dn"); + + /* attribute list for save action */ + var $ignore_account = TRUE; + var $attributes = array(); + var $objectclasses = array(); + + var $divList = NULL; + var $dialog = NULL; // Contains dialog object if a dialog is opened + + var $plugins = array(); + var $pluign_names = array(); + + var $current = ""; + var $backup = NULL; + var $acl ; + + function ServerService ($config, $dn) + { + plugin::plugin($config); + $this->dn= $dn; + $ui= get_userinfo(); + $this->acl= get_permissions ($ui->dn, $ui->subtreeACL); + + foreach ($config->data['TABS']['SERVERSERVICE'] as $plug){ + $name= $plug['CLASS']; + $this->plugin_names[]= $name; + $this->plugins[$name]= new $name($config, $dn); + $this->plugins[$name]->acl= get_module_permission($this->acl, "$name", $ui->dn); + } + + $this->divList = new divListSystemService($config,$this); + } + + + function execute() + { + /* Variable initialisation */ + $s_action = ""; + $s_entry = ""; + + + /* Walk through posts and check if there are some introductions for us */ + $PossiblePosts = array("addNewService" => "", + "startServices" => "", + "stopServices" => "", + "resetServices" => "", + "removeServices" => "", + + "StartSingleService" => "/^StartSingleService_(.*)_[xy]$/", + "StopSingleService" => "/^StopSingleService_(.*)_[xy]$/", + "ResetSingleService" => "/^ResetSingleService_(.*)_[xy]$/", + "RemoveSingleService" => "/^RemoveSingleService_(.*)_[xy]$/", + "EditSingleService" => "/^EditSingleService_(.*)_[xy]$/"); + + + $once = true; + foreach($_POST as $name => $value){ + foreach($PossiblePosts as $pregCheck => $idPreg) { + if(preg_match("/^".$pregCheck."/",$name) && $once){ + $once = false; + $s_action = $pregCheck; + + if(!empty($idPreg)){ + $s_entry = preg_replace($idPreg,"\\1",$name); + } + } + } + } + + + /* Handle state changes for services */ + $map = array( " startServices" => array("type" => START_SERVICE , "service" => ALL_SERVICES), + "stopServices" => array("type" => STOP_SERVICE , "service" => ALL_SERVICES), + "resetServices" => array("type" => RESET_SERVICE , "service" => ALL_SERVICES), + "StartSingleService" => array("type" => START_SERVICE , "service" => $s_entry), + "StopSingleService" => array("type" => STOP_SERVICE , "service" => $s_entry), + "ResetSingleService" => array("type" => RESET_SERVICE , "service" => $s_entry)); + if(isset($map[$s_action])){ + $type = $map[$s_action]['type']; + $service = $map[$s_action]['service']; + $this->ServiceStatusUpdate($type,$service); + } + + + /* Open service add dialog */ + if($s_action == "addNewService"){ + $this->dialog = new ServiceAddDialog($this->config,$this->dn,$this); + } + + + /* Remove service */ + if($s_action == "RemoveSingleService"){ + $this->plugins[$s_entry]->is_account= false; + $this->plugins[$s_entry] = NULL; + $this->plugins[$s_entry] = new $s_entry($this->config,$this->dn); + $this->plguins[$s_entry]->acl = $this->acl; + $this->plugins[$s_entry]->is_account = false; + } + + + /* Edit a service and make a backup from all attributes, + to be able to restore old values after aborting dialog */ + if($s_action == "EditSingleService"){ + $this->backup = get_object_vars($this->plugins[$s_entry]); + $this->dialog = $this->plugins[$s_entry]; + $this->current = $s_entry; + } + + + /* Abort service add */ + if(isset($_POST['CancelServiceAdd'])){ + $this->dialog = NULL; + $this->backup = NULL; + $this->current = ""; + } + + + /* Abort dialog + Restore vars with values before editing */ + if(isset($_POST['CancelService'])){ + foreach($this->backup as $name => $value){ + $this->plugins[$this->current]->$name = $value; + } + $this->dialog = NULL; + $this->backup = NULL; + $this->current = ""; + } + + + /* Abort dialog */ + if(isset($_POST['SaveService'])){ + + $msgs = $this->dialog->check(); + if(count($msgs)){ + foreach($msgs as $msg){ + print_red($msg); + } + }else{ + $this->plugins[$this->current] = $this->dialog; + $this->current = ""; + $this->dialog = NULL; + $this->backup = NULL; + } + } + + + /* Abort dialog */ + if(isset($_POST['SaveServiceAdd'])){ + $serv = $_POST['ServiceName']; + $this->plugins[$serv]->is_account = true; + $this->dialog = $this->plugins[$serv]; + $this->current = $serv; + } + + + /* There is currently a subdialog open, display this dialog */ + if($this->dialog != NULL){ + $this->dialog->save_object(); + return($this->dialog->execute()); + } + + + /* Dispaly services overview */ + $this->divList->execute(); + $list = array(); + foreach($this->plugins as $name => $obj){ + if($obj->is_account){ + $list[$name] = $obj->getListEntry(); + } + } + $this->divList -> setEntries($list); + return($this->divList->Draw()); + } + + + /* Get all used services + CLASSNAME => _($this->plugins[*]->DisplayName); */ + function getAllUsedServices() + { + $ret = array(); + foreach($this->plugins as $name => $obj){ + if($obj->is_account){ + if(isset($obj->DisplayName)){ + $ret[$name] = $obj->DisplayName; + }else{ + $ret[$name] = $name; + } + } + } + return($ret); + } + + + /* Get all unused services + CLASSNAME => _($this->plugins[*]->DisplayName); */ + function getAllUnusedServices() + { + $tmp = $this->getAllUsedServices(); + $pool_of_ocs =array(); + foreach($tmp as $name => $value){ + if(isset($this->plugins[$name]->conflicts)){ + $pool_of_ocs = array_merge($pool_of_ocs,$this->plugins[$name]->conflicts); + } + } + + $this->plugins['goMailServer']->is_acount= true; + + $ret = array(); + foreach($this->plugins as $name => $obj){ + + /* Skip all pluigns that will lead into conflicts */ + $skip = false; + if(isset($obj->conflicts)){ + foreach($obj->conflicts as $oc){ + if(in_array_ics($oc,$pool_of_ocs)){ + $skip = true; + } + } + } + if(!$skip){ + if(isset($obj->DisplayName)){ + $ret[$name] = $obj->DisplayName; + }else{ + $ret[$name] = $name; + } + } + } + return($ret); + } + + + /* This function sets the status var for each used + service && calls an external hook if specified in gosa.conf*/ + function ServiceStatusUpdate($method , $service) + { + $action = ""; + if($method == START_SERVICE){ + $action = SERVICE_STARTED; + }elseif($method== STOP_SERVICE){ + $action = SERVICE_STOPPED; + }elseif($method == RESET_SERVICE){ + $action = SERVICE_RESETTED; + }else{ + print_red(sprintf(_("The specified method '%s' can't executed for services."),$action)); + return; + } + + if($service == ALL_SERVICES){ + foreach($this->plugins as $name => $obj){ + $this->plugins[$name]->setStatus($action); + } + }else{ + $this->plugins[$service]->setStatus($action); + } + } + + + function check() + { + $message = plugin::check(); + return $message; + } + + + function save_object() + { + foreach($this->plugins as $name => $obj){ + if($obj->is_account){ + $this->plugins[$name]->save_object(); + } + } + } + + function save() + { + foreach($this->plugins as $name => $obj){ + if($this->plugins[$name]->is_account){ + $this->plugins[$name]->save(); + }else{ + $this->plugins[$name]->remove_from_parent(); + } + } + } + +} +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/systems/ServerService/class_ServiceAddDialog.inc b/plugins/admin/systems/ServerService/class_ServiceAddDialog.inc new file mode 100644 index 000000000..a5a284e68 --- /dev/null +++ b/plugins/admin/systems/ServerService/class_ServiceAddDialog.inc @@ -0,0 +1,32 @@ +"Config object" , "dn"=>"Object dn"); + + /* This plugin does not have any ocs */ + var $objectclasses = array(); + var $parent = NULL; + + function ServiceAddDialog($config,$dn,$parent) + { + plugin::plugin($config); + $this->parent = $parent; + } + + function execute() + { + $smarty = get_smarty(); + $smarty->assign("Services",$this->parent->getAllUnusedServices()); + return($smarty->fetch(get_template_path("ServiceAddDialog.tpl", TRUE,dirname(__FILE__)))); + } + + function check(){ return array();} + function save_object(){;} + function save(){} + +} +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/systems/ServerService/class_divListSystem.inc b/plugins/admin/systems/ServerService/class_divListSystem.inc new file mode 100644 index 000000000..8fdac79e8 --- /dev/null +++ b/plugins/admin/systems/ServerService/class_divListSystem.inc @@ -0,0 +1,127 @@ +AddCheckBox */ + var $parent ; + var $ui ; + + function divListSystemService ($config,$parent) + { + MultiSelectWindow::MultiSelectWindow($config,"SystemService"); + + $this->parent = $parent; + $this->ui = get_userinfo(); + + /* Set list strings */ + $this->SetTitle(_("Installed services")); + $this->SetSummary(_("Installed services")); + + /* Result page will look like a headpage */ + $this->SetHeadpageMode(); + $this->SetInformation(_("This menu allows you to add, remove and configure the properties of a specific service.")); + + /* Disable buttonsm */ + $this->EnableCloseButton(false); + $this->EnableSaveButton (false); + + /* set Page header */ + $this->AddHeader(array("string"=>" ","attach"=>"style='width:20px;'")); + $this->AddHeader(array("string"=>_("Service name"))); + $this->AddHeader(array("string"=>_("Actions"),"attach"=>"style='width:100px;border-right:0px;'")); + $this->HideFilterPart(); + $this->SetHeight(500); + } + + function GenHeader() + { + /* Prepare departments, + which are shown in the listbox on top of the listbox + */ + $options= ""; + foreach ($this->config->idepartments as $key => $value){ + if ($this->selectedBase == $key){ + $options.= ""; + } else { + $options.= ""; + } + } + $listhead = "
". + "  ". + "  ". + "  ". + "  ". + "
"; + $this->SetListHeader($listhead); + } + + function execute() + { + $this->ClearElementsList(); + $this->GenHeader(); + } + + function setEntries($list) + { + foreach($list as $name => $entry){ + + switch($entry['Status']){ + case '' : $str ="";break; + case SERVICE_STOPPED : $str =""; break; + case SERVICE_STARTED : $str =""; break; + case SERVICE_RESETTED : $str ="R"; break; + default: $str= "".$entry["; + } + + $field1 = array("string" => $str ,"attach" => "style='width:20px;'"); + $field2 = array("string" => $entry['Message'] ); + + $actions =""; + if($entry['AllowStart']){ + $actions .= " "; + }else{ + $actions .= " "; + } + if($entry['AllowStart']){ + $actions .= " "; + }else{ + $actions .= " "; + } + if($entry['AllowStart']){ + $actions .= " "; + }else{ + $actions .= " "; + } + if($entry['AllowEdit']){ + $actions .= " "; + }else{ + $actions .= " "; + } + if($entry['AllowRemove']){ + $actions .= " "; + }else{ + $actions .= " "; + } + + $field3 = array("string" => $actions ,"attach" => "style='width:100px;border-right:0px;'"); + $this->AddElement(array($field1,$field2,$field3)); + } + } + + function Save() + { + MultiSelectWindow :: Save(); + } + + function save_object() + { + /* Save automatic created POSTs like regex, checkboxes */ + MultiSelectWindow :: save_object(); + } +} +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/systems/ServerService/class_goImapServer.inc b/plugins/admin/systems/ServerService/class_goImapServer.inc new file mode 100644 index 000000000..a8ca0e01a --- /dev/null +++ b/plugins/admin/systems/ServerService/class_goImapServer.inc @@ -0,0 +1,207 @@ + "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* This plugin only writes its objectClass */ + var $objectclasses = array("goImapServer"); + + /* This class can't be assigned twice so it conflicts with itsself */ + var $conflicts = array("goImapServer"); + + var $DisplayName = ""; + var $dn = NULL; + var $StatusFlag = "goImapServerStatus"; + var $attributes = array("goImapServerStatus", + "goImapName","goImapConnect","goImapAdmin","goImapPassword", + "goImapSieveServer","goImapSievePort", + "cyrusImap","cyrusImapSSL","cyrusPop3","cyrusPop3SSL"); + + var $cn; + + var $goImapName = ""; + var $goImapConnect = ""; + var $goImapAdmin = ""; + var $goImapPassword = ""; + + var $goImapSieveServer = ""; + var $goImapSievePort = ""; + + var $goImapServerStatus = ""; + + var $cyrusImap = false; + var $cyrusImapSSL = false; + var $cyrusPop3 = false; + var $cyrusPop3SSL = false; + + var $acl; + + var $Actions = array(); + + function goImapServer($config,$dn) + { + plugin::plugin($config,$dn); + + $this->DisplayName = _("Cyrus service"); + + $this->Actions = array( SERVICE_STOPPED=>SERVICE_STOPPED, + SERVICE_STARTED => SERVICE_STARTED, + SERVICE_RESETTED=>SERVICE_RESETTED, + "repair_database"=>_("Repair database")); + + } + + function execute() + { + $smarty = get_smarty(); + + /* set new status */ + if(isset($_POST['ExecAction'])){ + if(isset($this->Actions[$_POST['action']])){ + $this->setStatus($_POST['action']); + } + } + + foreach($this->attributes as $attr){ + $smarty->assign($attr,$this->$attr); + $smarty->assign($attr."ACL",chkacl($this->acl,$attr)); + } + $smarty->assign("Actions",$this->Actions); + return($smarty->fetch(get_template_path("goImapServer.tpl",TRUE,dirname(__FILE__)))); + } + + function getListEntry() + { + $flag = $this->StatusFlag; + $fields['Status'] = $this->$flag; + $fields['Message'] = _("Cyrus service"); + $fields['AllowStart'] = true; + $fields['AllowStop'] = true; + $fields['AllowReset'] = true; + $fields['AllowRemove']= true; + $fields['AllowEdit'] = true; + return($fields); + } + + function remove_from_parent() + { + plugin::remove_from_parent(); + /* Check if this is a new entry ... add/modify */ + $ldap = $this->config->get_ldap_link(); + $ldap->cat($this->dn,array("objectClass")); + if($ldap->count()){ + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + }else{ + $ldap->cd($this->dn); + $ldap->add($this->attrs); + } + show_ldap_error($ldap->get_error()); + } + + function save() + { + $this->goImapSieveServer = $this->cn; + plugin::save(); + /* Check if this is a new entry ... add/modify */ + $ldap = $this->config->get_ldap_link(); + $ldap->cat($this->dn,array("objectClass")); + if($ldap->count()){ + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + }else{ + $ldap->cd($this->dn); + $ldap->add($this->attrs); + } + show_ldap_error($ldap->get_error()); + } + + + /* Directly save new status flag */ + function setStatus($value) + { + $ldap = $this->config->get_ldap_link(); + $ldap->cd($this->dn); + $ldap->cat($this->dn,array("objectClass","goImapName","goImapConnect","goImapAdmin","goImapPassword")); + + if($ldap->count()){ + + $attrs =array(); + foreach(array("goImapName","goImapConnect","goImapAdmin","goImapPassword") as $required){ + if(!isset($attrs[$required])){ + if(empty($this->$required)){ + print_red(_("Can't set new status while there are blank option within generic configuration part.")); + return; + }else{ + $attrs[$required] = $this->$required; + } + }else{ + $attrs[$required] = $attrs[$required][0]; + } + } + + $tmp = $ldap->fetch(); + for($i = 0; $i < $tmp['objectClass']['count']; $i ++){ + $attrs['objectClass'][] = $tmp['objectClass'][$i]; + } + if(!in_array("goImapServer",$attrs['objectClass'])){ + $attrs['objectClass'][] = "goImapServer"; + } + $flag = $this->StatusFlag; + $attrs[$flag] = $value; + $this->$flag = $value; + $ldap->modify($attrs); + show_ldap_error($ldap->get_error()); + } + } + + + function check() + { + $message = plugin::check(); + if(empty($this->goImapName)){ + $message[] =_("Please specify a server identifier."); + } + if(empty($this->goImapConnect)){ + $message[] =_("Please specify a connect url."); + } + if(empty($this->goImapAdmin)){ + $message[] =_("Please specify an admin user."); + } + if(empty($this->goImapPassword)){ + $message[] =_("Please specify a password for the admin user."); + } + + /* Check connect string */ + if (!preg_match('/^\{[^:]+:[0-9]+.*\}$/', $this->goImapConnect)){ + $message[]= sprintf(_("The imap connect string needs to be in the form '%s'."), + '{server-name:port/options}'); + } + if (!preg_match('/^[0-9]+$/', $this->goImapSievePort)){ + $message[]= _("The sieve port needs to be numeric."); + } + + return ($message); + } + + + function save_object() + { + if(isset($_POST['goImapServerPosted'])){ + plugin::save_object(); + + foreach(array("cyrusImap","cyrusImapSSL","cyrusPop3","cyrusPop3SSL") as $checkbox) { + if(!isset($_POST[$checkbox])){ + $this->$checkbox = false; + }else{ + $this->$checkbox = true; + } + } + } + } +} +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/systems/ServerService/class_goMailServer.inc b/plugins/admin/systems/ServerService/class_goMailServer.inc new file mode 100644 index 000000000..168b48abe --- /dev/null +++ b/plugins/admin/systems/ServerService/class_goMailServer.inc @@ -0,0 +1,689 @@ + "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* This plugin only writes its objectClass */ + var $objectclasses = array("goMailServer"); + + /* This class can't be assigned twice so it conflicts with itsself */ + var $conflicts = array("goMailServer"); + + var $DisplayName = ""; + var $dn = NULL; + var $StatusFlag = "goMailServerStatus"; + var $attributes = array("goMailServerStatus","description","postfixHeaderSizeLimit", + "postfixMailboxSizeLimit","postfixMessageSizeLimit", + "postfixMyDestinations","postfixMyDomain","postfixMyhostname", + "postfixMyNetworks","postfixRelayhost","postfixTransportTable", + "postfixSenderRestrictions","postfixRecipientRestrictions"); + + var $goMailServerStatus ; + var $postfixHeaderSizeLimit = 0; + var $postfixMailboxSizeLimit = 0; + var $postfixMessageSizeLimit = 0; + var $postfixMyDestinations = array(); + var $postfixMyDomain = ""; + var $postfixMyhostname = ""; + var $postfixMyNetworks = array(); + var $postfixRelayhost = ""; + var $postfixTransportTable = array(); + var $postfixSenderRestrictions = array(); + var $postfixRecipientRestrictions = array(); + var $description = ""; + var $RestrictionFilters = array(); + var $TransportProtocols = array(); + var $Actions = array(); + + function goMailServer($config,$dn) + { + plugin::plugin($config,$dn); + $this->DisplayName = _("Postfix service"); + + $this->Actions = array( SERVICE_STOPPED=>SERVICE_STOPPED, + SERVICE_STARTED => SERVICE_STARTED, + SERVICE_RESETTED=>SERVICE_RESETTED, + "mailqueue"=>"mailqueue"); + + + /* Fill RestrictionFilters TransportProtocols from external hooks */ + $str = $this->config->data['TABS']['SERVERSERVICE']; + $this->TransportProtocols =array("smtp"=>"SMTP"); + $this->RestrictionFilters = array("FILTER"=>"FILTER"); + foreach(array("ADDITIONALRESTRICTIONFILTERS"=>"RestrictionFilters", + "ADDITIONALPROTOCOLLS" =>"TransportProtocols") as $file => $var){ + $file = search_config($this->config->data,"goMailServer",$file); + if((isset($file)) && is_readable($file)){ + $tmp = file_get_contents($file); + $tmp2= split("\n",$tmp); + foreach($tmp2 as $entry){ + if(empty($entry)) continue; + if(preg_match("/:/",$entry)){ + $tmp3 = split(":",$entry); + $r = $this->$var; + $r[$tmp3[0]]=$tmp3[1]; + $this->$var = $r; + }else{ + $r = $this->$var; + $r[$entry] =$entry; + $this->$var = $r; + } + } + } + } + + + /* Get postfix my networks */ + $this->postfixMyNetworks = array(); + if(isset($this->attrs['postfixMyNetworks'][0])){ + $tmp = split(",",$this->attrs['postfixMyNetworks'][0]); + foreach($tmp as $str){ + if(!empty($str)){ + $this->postfixMyNetworks[base64_encode($str)] = $str; + } + } + } + + + /* Create full name */ + if(isset($this->attrs['postfixMyDomain'][0])){ + $this->postfixMyhostname .= ".".$this->attrs['postfixMyDomain'][0]; + } + + + /* Get postfix my domains */ + $this->postfixMyDestinations = array(); + if(isset($this->attrs['postfixMyDestinations'][0])){ + unset($this->attrs['postfixMyDestinations']['count']); + foreach($this->attrs['postfixMyDestinations'] as $str){ + $this->postfixMyDestinations[base64_encode($str)] = $str; + } + } + + + /* Get transport tables */ + $this->postfixTransportTable = array(); + if(isset($this->attrs['postfixTransportTable'])){ + $tmp = array(); + unset($this->attrs['postfixTransportTable']['count']); + foreach($this->attrs['postfixTransportTable'] as $entry){ + $nr = preg_replace("/:.*$/","",$entry); + $rest= trim(preg_replace("/^[^:]+:/","",$entry)); + $src = preg_replace("/ .*$/","",$rest); + $rest= preg_replace("/^[^ ]+ /","",$rest); + $dst = preg_replace("/^.*:/","",$rest); + $prt = preg_replace("/:.*$/","",$rest); + + $tmp[$nr]['src'] = $src; + $tmp[$nr]['dst'] = $dst; + $tmp[$nr]['prt'] = $prt; + + } + ksort($tmp); + foreach($tmp as $entry){ + $this->postfixTransportTable[] = $entry; + } + } + + + /* Get sender restrictions */ + $this->postfixSenderRestrictions = array(); + if(isset($this->attrs['postfixSenderRestrictions'])){ + unset($this->attrs['postfixSenderRestrictions']['count']); + foreach($this->attrs['postfixSenderRestrictions'] as $entry){ + $nr = preg_replace("/:.*$/","",$entry); + $rest= trim(preg_replace("/^[^:]+:/","",$entry)); + $src = preg_replace("/ .*$/","",$rest); + $rest= preg_replace("/^[^ ]+ /","",$rest); + $dst = preg_replace("/^.* /","",$rest); + $prt = preg_replace("/ .*$/","",$rest); + + $tmp[$nr]['src'] = $src; + $tmp[$nr]['dst'] = $dst; + $tmp[$nr]['filter'] = $prt; + } + ksort($tmp); + foreach($tmp as $entry){ + $this->postfixSenderRestrictions[] = $entry; + } + } + + + /* Get sender restrictions */ + $this->postfixRecipientRestrictions = array(); + if(isset($this->attrs['postfixRecipientRestrictions'])){ + unset($this->attrs['postfixRecipientRestrictions']['count']); + foreach($this->attrs['postfixRecipientRestrictions'] as $entry){ + $nr = preg_replace("/:.*$/","",$entry); + $rest= trim(preg_replace("/^[^:]+:/","",$entry)); + $src = preg_replace("/ .*$/","",$rest); + $rest= preg_replace("/^[^ ]+ /","",$rest); + $dst = preg_replace("/^.* /","",$rest); + $prt = preg_replace("/ .*$/","",$rest); + + $tmp[$nr]['src'] = $src; + $tmp[$nr]['dst'] = $dst; + $tmp[$nr]['filter'] = $prt; + } + ksort($tmp); + foreach($tmp as $entry){ + $this->postfixRecipientRestrictions[] = $entry; + } + } + + } + + function execute() + { + $smarty = get_smarty(); + $delAr = array( "TranslationDel_"=>"TranslationDel", + "SenderRestrictDel_"=>"SenderRestrictDel", + "RecipientRestrictDel_"=>"RecipientRestrictDel"); + + $once = true; + $s_action = ""; + $s_entry = ""; + + /* Check posts for some intruductions */ + foreach($_POST as $name => $value){ + foreach($delAr as $preg => $type){ + if((preg_match("/^".$preg."/",$name)) && ($once)){ + $once = false; + $s_action = $type; + $s_entry = preg_replace("/^".$preg."/","",$name); + $s_entry = preg_replace("/_[xy]$/","",$s_entry); + } + } + + + if(preg_match("/^TranslationUp_/",$name) && $once){ + $once = false; + $key = preg_replace("/^TranslationUp_/","",$name); + $key = preg_replace("/_[xy]$/","",$key); + $this->postfixTransportTable = $this->ArrayUp($key,$this->postfixTransportTable) ; + } + if(preg_match("/^TranslationDown_/",$name) && $once){ + $once = false; + $key = preg_replace("/^TranslationDown_/","",$name); + $key = preg_replace("/_[xy]$/","",$key); + $this->postfixTransportTable = $this->ArrayDown($key,$this->postfixTransportTable) ; + } + if(preg_match("/^SenderRestrictUp_/",$name) && $once){ + $once = false; + $key = preg_replace("/^SenderRestrictUp_/","",$name); + $key = preg_replace("/_[xy]$/","",$key); + $this->postfixSenderRestrictions = $this->ArrayUp($key,$this->postfixSenderRestrictions) ; + } + if(preg_match("/^SenderRestrictDown_/",$name) && $once){ + $once = false; + $key = preg_replace("/^SenderRestrictDown_/","",$name); + $key = preg_replace("/_[xy]$/","",$key); + $this->postfixSenderRestrictions = $this->ArrayDown($key,$this->postfixSenderRestrictions) ; + } + if(preg_match("/^RecipientRestrictUp_/",$name) && $once){ + $once = false; + $key = preg_replace("/^RecipientRestrictUp_/","",$name); + $key = preg_replace("/_[xy]$/","",$key); + $this->postfixRecipientRestrictions = $this->ArrayUp($key,$this->postfixRecipientRestrictions) ; + } + if(preg_match("/^RecipientRestrictDown_/",$name) && $once){ + $once = false; + $key = preg_replace("/^RecipientRestrictDown_/","",$name); + $key = preg_replace("/_[xy]$/","",$key); + $this->postfixRecipientRestrictions = $this->ArrayDown($key,$this->postfixRecipientRestrictions) ; + } + } + + + /* Add delete my network entry */ + if((isset($_POST['AddpostfixMyNetworks'])) && (!empty($_POST['NewString_postfixMyNetworks']))){ + $str = $_POST['NewString_postfixMyNetworks']; + $this->postfixMyNetworks[base64_encode($str)] = $str; + } + + if((isset($_POST['DelpostfixMyNetworks'])) && (count($_POST['Select_postfixMyNetworks']))){ + foreach($_POST['Select_postfixMyNetworks'] as $str ){ + unset($this->postfixMyNetworks[$str]); + } + } + + + /* Add delete my domain entry */ + if((isset($_POST['AddpostfixMyDestinations'])) && (!empty($_POST['NewString_postfixMyDestinations']))){ + $str = $_POST['NewString_postfixMyDestinations']; + $this->postfixMyDestinations[base64_encode($str)] = $str; + } + + if((isset($_POST['DelpostfixMyDestinations'])) && (count($_POST['Select_postfixMyDestinations']))){ + foreach($_POST['Select_postfixMyDestinations'] as $str ){ + unset($this->postfixMyDestinations[$str]); + } + } + + + /* Add sender restriction */ + if(($s_action == "SenderRestrictDel") && (isset($this->postfixSenderRestrictions[$s_entry]))){ + unset($this->postfixSenderRestrictions[$s_entry]); + } + + if(isset($_POST['AddpostfixSenderRestrictions'])){ + $src = $_POST['Source_postfixSenderRestrictions']; + $dst = $_POST['Destination_postfixSenderRestrictions']; + $Filter = $_POST['SenderRestrictionFilter']; + $tmp['src'] = $src; + $tmp['dst'] = $dst; + $tmp['filter'] = $Filter; + $this->postfixSenderRestrictions[] = $tmp; + } + + + /* Add sender restriction */ + if(($s_action == "RecipientRestrictDel") && (isset($this->postfixRecipientRestrictions[$s_entry]))){ + unset($this->postfixRecipientRestrictions[$s_entry]); + } + + if(isset($_POST['AddpostfixRecipientRestrictions'])){ + $src = $_POST['Source_postfixRecipientRestrictions']; + $dst = $_POST['Destination_postfixRecipientRestrictions']; + $Filter = $_POST['RecipientRestrictionFilter']; + $tmp['src'] = $src; + $tmp['dst'] = $dst; + $tmp['filter'] = $Filter; + $this->postfixRecipientRestrictions[] = $tmp; + } + + + /* Handle transports */ + if(($s_action == "TranslationDel") && (isset($this->postfixTransportTable[$s_entry]))){ + unset($this->postfixTransportTable[$s_entry]); + } + + if(isset($_POST['AddpostfixTransportTable'])){ + $src = trim($_POST['Source_postfixTransportTable']); + $dst = trim($_POST['Destination_postfixTransportTable']); + $prt = trim($_POST['TransportProtocol']); + + if((!empty($src)) && (!empty($dst))){ + if(preg_match("/:/",$dst)){ + $tmp = split("\:",$dst); + $port = trim($tmp[1]); + $ip = trim($tmp[0]); + + if((is_ip($ip)) && (is_numeric($port))){ + $dst = "[".$ip."]:".$port; + } + } + if(is_ip($dst)){ + $dst = "[".$dst."]"; + } + $tmp2 ['src'] = $src; + $tmp2 ['dst'] = $dst; + $tmp2 ['prt'] = $prt; + + $this->postfixTransportTable[] = $tmp2; + } + } + + + /* Set attributes */ + foreach($this->attributes as $attr){ + $smarty->assign($attr,$this->$attr); + } + + + /* Create divList for translation tables */ + $divTranslation = new divSelectBox("TransportProtocols"); + $divTranslation->SetHeight(110); + foreach($this->postfixTransportTable as $key => $entry){ + $img = ""; + + if($key != 0){ + $img.= " "; + }else{ + $img.= ""; + } + if(($key+1) < count($this->postfixTransportTable)){ + $img.= " "; + }else{ + $img.= ""; + } + + $img.= " "; + $field1 = array("string"=> $entry['src']); + $field2 = array("string"=> $entry['dst']); + $field3 = array("string"=> $entry['prt'],"attach"=>"style='width:120px;'"); + $field4 = array("string"=> $img, "attach"=>"style='border-right:0px;width:40px;'"); + $divTranslation->AddEntry(array($field1,$field2,$field3,$field4,)); + } + $smarty->assign("Div_postfixTransportTable" ,$divTranslation->DrawList()); + + + /* Create divList for sender restrictions */ + $DivSenderRestrict = new divSelectBox("postfixSenderRestrictions"); + $DivSenderRestrict->SetHeight(110); + foreach($this->postfixSenderRestrictions as $key => $entry){ + $img =""; + + if($key != 0){ + $img.= " "; + }else{ + $img.= ""; + } + if(($key+1) < count($this->postfixSenderRestrictions)){ + $img.= " "; + }else{ + $img.= ""; + } + + $img.= " "; + + $field1 = array("string"=> $entry['src']); + $field2 = array("string"=> $entry['dst']); + $field3 = array("string"=> $entry['filter'],"attach"=>"style='width:100px;'"); + $field4 = array("string"=> $img, "attach"=>"style='border-right:0px;width:40px;'"); + $DivSenderRestrict->AddEntry(array($field1,$field2,$field3,$field4,)); + } + $smarty->assign("Div_postfixSenderRestrictions" ,$DivSenderRestrict->DrawList()); + + + /* Create divList for translation tables */ + $DivRecipientRestrict = new divSelectBox("postfixRecipientRestrictions"); + $DivRecipientRestrict->SetHeight(110); + foreach($this->postfixRecipientRestrictions as $key => $entry){ + $img = ""; + if($key != 0){ + $img.= " "; + }else{ + $img.= ""; + } + if(($key+1) < count($this->postfixRecipientRestrictions)){ + $img.= " "; + }else{ + $img.= ""; + } + $img.= " "; + $field1 = array("string"=> $entry['src']); + $field2 = array("string"=> $entry['dst']); + $field3 = array("string"=> $entry['filter'],"attach"=>"style='width:100px;'"); + $field4 = array("string"=> $img, "attach"=>"style='border-right:0px;width:40px;'"); + $DivRecipientRestrict->AddEntry(array($field1,$field2,$field3,$field4,)); + } + $smarty->assign("Div_postfixRecipientRestrictions" ,$DivRecipientRestrict->DrawList()); + + + /* set new status */ + if(isset($_POST['ExecAction'])){ + if(isset($this->Actions[$_POST['action']])){ + $this->setStatus($_POST['action']); + } + } + + + $smarty->assign("TransportProtocols", $this->TransportProtocols); + $smarty->assign("Actions", $this->Actions); + $smarty->assign("RestrictionFilters", $this->RestrictionFilters); + $smarty->assign("postfixTransportTable" , $this->getTransports()); + $smarty->assign("postfixSenderRestrictions" , $this->getSenderRestrictions()); + $smarty->assign("postfixRecipientRestrictions" ,$this->getRecipientRestrictions()); + + return($smarty->fetch(get_template_path("goMailServer.tpl",TRUE,dirname(__FILE__)))); + } + + + /* return transports formated for select box */ + function getTransports() + { + $ret = array(); + foreach($this->postfixTransportTable as $key => $vals){ + $ret[$key] = $vals['src']." -> ".$vals['prt'].":".$vals['dst']; + } + return($ret); + } + + + /* return sender restriction formated for select box */ + function getSenderRestrictions() + { + $ret = array(); + foreach($this->postfixSenderRestrictions as $key => $vals){ + $ret[$key] = $vals['src']." ".$vals['filter']." ".$vals['dst']; + } + return($ret); + } + + + /* return recipient restriction formated for select box */ + function getRecipientRestrictions() + { + $ret = array(); + foreach($this->postfixRecipientRestrictions as $key => $vals){ + $ret[$key] = $vals['src']." ".$vals['filter']." ".$vals['dst']; + } + return($ret); + } + + + /* Return list entry */ + function getListEntry() + { + $flag = $this->StatusFlag; + $fields['Status'] = $this->$flag; + $fields['Message'] = _("Flag server as mail server"); + $fields['AllowStart'] = true; + $fields['AllowStop'] = true; + $fields['AllowReset'] = true; + $fields['AllowRemove']= true; + $fields['AllowEdit'] = true; + return($fields); + } + + + function remove_from_parent() + { + plugin::remove_from_parent(); + /* Check if this is a new entry ... add/modify */ + $ldap = $this->config->get_ldap_link(); + $ldap->cat($this->dn,array("objectClass")); + if($ldap->count()){ + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + }else{ + $ldap->cd($this->dn); + $ldap->add($this->attrs); + } + show_ldap_error($ldap->get_error()); + } + + + function save() + { + plugin::save(); + + /* Fix transport table*/ + $i = 0 ; + $this->attrs['postfixTransportTable'] = array(); + foreach($this->postfixTransportTable as $key => $entry){ + $this->attrs['postfixTransportTable'][] = $i.": ".$entry['src']." ".$entry['prt'].":".$entry['dst']; + $i ++; + } + + + /* Fix sender restrictions */ + $i = 0; + $this->attrs['postfixSenderRestrictions'] =array(); + foreach($this->postfixSenderRestrictions as $key => $entry){ + $this->attrs['postfixSenderRestrictions'][] = $i.": ".$entry['src']." ".$entry['filter']." ".$entry['dst']; + $i ++; + } + + + /* Fix recipient restrictions */ + $i = 0; + $this->attrs['postfixRecipientRestrictions'] =array(); + foreach($this->postfixRecipientRestrictions as $key => $entry){ + $this->attrs['postfixRecipientRestrictions'][] = $i.": ".$entry['src']." ".$entry['filter']." ".$entry['dst']; + $i ++; + } + + + /* Fix mydomains */ + $this->attrs['postfixMyDestinations'] = array(); + foreach($this->postfixMyDestinations as $entry){ + $this->attrs['postfixMyDestinations'][] =$entry; + } + + + /* Fix mydomains */ + if(count($this->postfixMyNetworks)){ + $this->attrs['postfixMyNetworks'] = ""; + foreach($this->postfixMyNetworks as $entry){ + $this->attrs['postfixMyNetworks'] .=$entry.","; + } + }else{ + $this->attrs['postfixMyNetworks'] = array(); + } + + $this->attrs['postfixMyNetworks'] = preg_replace("/,$/","",$this->attrs['postfixMyNetworks']); + + $this->attrs['postfixMyhostname'] = preg_replace("/\..*$/","",$this->postfixMyhostname); + $this->attrs['postfixMyDomain'] = preg_replace("/^[^\.]+\./","",$this->postfixMyhostname); + + /* Check if this is a new entry ... add/modify */ + $ldap = $this->config->get_ldap_link(); + $ldap->cat($this->dn,array("objectClass")); + if($ldap->count()){ + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + }else{ + $ldap->cd($this->dn); + $ldap->add($this->attrs); + } + show_ldap_error($ldap->get_error()); + } + + + /* Directly save new status flag */ + function setStatus($value) + { + $ldap = $this->config->get_ldap_link(); + $ldap->cd($this->dn); + $ldap->cat($this->dn,array("objectClass")); + + if($ldap->count()){ + + $attrs =array(); + $tmp = $ldap->fetch(); + for($i = 0; $i < $tmp['objectClass']['count']; $i ++){ + $attrs['objectClass'][] = $tmp['objectClass'][$i]; + } + if(!in_array("goMailServer",$attrs['objectClass'])){ + $attrs['objectClass'][] = "goMailServer"; + } + + $flag = $this->StatusFlag; + $attrs[$flag] = $value; + $this->$flag = $value; + $ldap->modify($attrs); + show_ldap_error($ldap->get_error()); + } + } + + + function check() + { + $message =plugin::check(); + + if(!is_numeric($this->postfixHeaderSizeLimit)){ + $message[] = _("Please specify a numeric value for header size limit."); + } + + if(!is_numeric($this->postfixMailboxSizeLimit)){ + $message[] = _("Please specify a numeric value for mailbox size limit."); + } + + if(!is_numeric($this->postfixMessageSizeLimit)){ + $message[] = _("Please specify a numeric value for message size limit."); + } + + return $message; + } + + + /* Combine new array */ + function combineArrays($ar0,$ar1,$ar2) + { + $ret = array(); + if(is_array($ar0)) + foreach($ar0 as $ar => $a){ + $ret[]=$a; + } + if(is_array($ar1)) + foreach($ar1 as $ar => $a){ + $ret[]=$a; + } + if(is_array($ar2)) + foreach($ar2 as $ar => $a){ + $ret[]=$a; + } + return($ret); + } + + + function getpos($atr,$attrs) + { + $i = 0; + foreach($attrs as $attr => $name) { + $i++; + if($attr == $atr){ + return($i); + } + } + + return(-1); + } + + + /* TRansports the geiven Arraykey one position up*/ + function ArrayUp($atr,$attrs) + { + $ret = $attrs; + $pos = $this->getpos($atr,$attrs) ; + $cn = count($attrs); + if(!(($pos == -1)||($pos == 1))){ + $before = array_slice($attrs,0,($pos-2)); + $mitte = array_reverse(array_slice($attrs,($pos-2),2)); + $unten = array_slice($attrs,$pos); + $ret = array(); + $ret = $this->combineArrays($before,$mitte,$unten); + } + return($ret); + } + + + /* TRansports the geiven Arraykey one position up*/ + function ArrayDown($atr,$attrs) + { + $ret = $attrs; + $pos = $this->getpos($atr,$attrs) ; + $cn = count($attrs); + if(!(($pos == -1)||($pos == $cn))){ + $before = array_slice($attrs,0,($pos-1)); + $mitte = array_reverse(array_slice($attrs,($pos-1),2)); + $unten = array_slice($attrs,($pos+1)); + $ret = array(); + $ret = $this->combineArrays($before,$mitte,$unten); + } + return($ret); + } + + + function save_object() + { + plugin::save_object(); + } +} +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/systems/ServerService/class_goNtpServer.inc b/plugins/admin/systems/ServerService/class_goNtpServer.inc new file mode 100644 index 000000000..dd05d153c --- /dev/null +++ b/plugins/admin/systems/ServerService/class_goNtpServer.inc @@ -0,0 +1,143 @@ + "Eins ist toll", "zwei" => "Zwei ist noch besser"); + + /* This plugin only writes its objectClass */ + var $objectclasses = array("goNtpServer"); + var $attributes = array("goTimeSource","goNtpServerStatus"); + var $StatusFlag = "goNtpServerStatus"; + + /* This class can't be assigned twice so it conflicts with itsself */ + var $conflicts = array("goNtpServer"); + + var $DisplayName = ""; + var $dn = NULL; + var $goTimeSource = array(); + var $goNtpServerStatus= ""; + var $acl; + + function goNtpServer($config,$dn) + { + plugin::plugin($config,$dn); + $this->DisplayName = _("NTP Service"); + + /* Load arrays */ + $tmp = array(); + if (isset($this->attrs['goTimeSource'])){ + for ($i= 0; $i<$this->attrs['goTimeSource']['count']; $i++){ + $tmp[$this->attrs['goTimeSource'][$i]]= $this->attrs['goTimeSource'][$i]; + } + } + $this->goTimeSource= $tmp; + } + + + function execute() + { + $smarty = get_smarty(); + + /* Here we add a new entry */ + if(isset($_POST['NewNTPAdd']) && $_POST['NewNTPExport'] != "") { + $this->goTimeSource[$_POST['NewNTPExport']]= $_POST['NewNTPExport']; + asort($this->goTimeSource); + } + + /* Deleting an Entry, is a bit more complicated than adding one*/ + if(isset($_POST['DelNTPEnt'])) { + foreach ($_POST['goTimeSource'] as $entry){ + if (isset($this->goTimeSource[$entry])){ + unset($this->goTimeSource[$entry]); + } + } + } + + $smarty->assign("goNtpServerACL",chkacl($this->acl,"goNtpServer")) ; + $smarty->assign("goTimeSource" , $this->goTimeSource); + return($smarty->fetch(get_template_path("goNtpServer.tpl",TRUE,dirname(__FILE__)))); + } + + + function getListEntry() + { + $flag = $this->StatusFlag; + $fields['Status'] = $this->$flag; + $fields['Message'] = _("NTP service"); + $fields['AllowStart'] = true; + $fields['AllowStop'] = true; + $fields['AllowReset'] = true; + $fields['AllowRemove']= true; + $fields['AllowEdit'] = true; + return($fields); + } + + + function remove_from_parent() + { + plugin::remove_from_parent(); + /* Check if this is a new entry ... add/modify */ + $ldap = $this->config->get_ldap_link(); + $ldap->cat($this->dn,array("objectClass")); + if($ldap->count()){ + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + }else{ + $ldap->cd($this->dn); + $ldap->add($this->attrs); + } + show_ldap_error($ldap->get_error()); + } + + + function save() + { + if(!$this->is_account) return; + plugin::save(); + /* Check if this is a new entry ... add/modify */ + $ldap = $this->config->get_ldap_link(); + $ldap->cat($this->dn,array("objectClass")); + if($ldap->count()){ + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + }else{ + $ldap->cd($this->dn); + $ldap->add($this->attrs); + } + show_ldap_error($ldap->get_error()); + } + + + /* Directly save new status flag */ + function setStatus($value) + { + $ldap = $this->config->get_ldap_link(); + $ldap->cd($this->dn); + $ldap->cat($this->dn,array("objectClass")); + + if($ldap->count()){ + $attrs =array(); + $tmp = $ldap->fetch(); + for($i = 0; $i < $tmp['objectClass']['count']; $i ++){ + $attrs['objectClass'][] = $tmp['objectClass'][$i]; + } + if(!in_array("goNtpServer",$attrs['objectClass'])){ + $attrs['objectClass'][] = "goNtpServer"; + } + + $flag = $this->StatusFlag; + $attrs[$flag] = $value; + $this->$flag = $value; + $ldap->modify($attrs); + show_ldap_error($ldap->get_error()); + } + } + + function check(){ return array();} + +function save_object(){;} +} +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/systems/ServerService/contents.tpl b/plugins/admin/systems/ServerService/contents.tpl new file mode 100644 index 000000000..001d50d43 --- /dev/null +++ b/plugins/admin/systems/ServerService/contents.tpl @@ -0,0 +1 @@ +{$Kekse} sind gesund diff --git a/plugins/admin/systems/ServerService/goImapServer.tpl b/plugins/admin/systems/ServerService/goImapServer.tpl new file mode 100644 index 000000000..774cf33bc --- /dev/null +++ b/plugins/admin/systems/ServerService/goImapServer.tpl @@ -0,0 +1,89 @@ +{t}Generic{/t} +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
{t}Server identifier{/t} + +
{t}Connect URL{/t} + +
{t}Admin user{/t} + +
{t}Password{/t} + +
{t}Sieve port{/t} + +
+
+ + + + + + + + + + + + + + + + + +
{t}Start IMAP service{/t} + + +
{t}Start IMAP SSL service{/t} + + +
{t}Start POP3 service{/t} + + +
{t}Start POP3 SSL service{/t} + + +
+
+

 

+

+
+ + + + +

 

+

+

+ +   + +
+

diff --git a/plugins/admin/systems/ServerService/goMailServer.tpl b/plugins/admin/systems/ServerService/goMailServer.tpl new file mode 100644 index 000000000..b29b3e1f8 --- /dev/null +++ b/plugins/admin/systems/ServerService/goMailServer.tpl @@ -0,0 +1,152 @@ +{t}Generic{/t} +

+{t}Visible full qualified hostname{/t}  + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + +
{t}Max mail header size{/t} + +  {t}KB{/t} +
{t}Max mailbox size{/t} + +  {t}KB{/t} +
{t}Max message size{/t} + +  {t}KB{/t} +
{t}Relay host{/t} + + +
+
+ + + + +
+ {t}Local networks{/t}
+ + + + +
+
+

 

+
+ + + + +
+ {t}Domains and routing{/t}
+ + + + +
+
+ + + + +
+ {t}Transports{/t}
+ {$Div_postfixTransportTable} + + + + +
+
+

 

+
+ + + + +
+ {t}Restrictions for sender{/t}
+ {$Div_postfixSenderRestrictions} + + + + +
+
+ + + + +
+ {t}Restrictions for recipient{/t}
+ {$Div_postfixRecipientRestrictions} + + + + + +
+
+ +

+ + + +

 

+

+

+ +   + +
+

+ diff --git a/plugins/admin/systems/ServerService/goNtpServer.tpl b/plugins/admin/systems/ServerService/goNtpServer.tpl new file mode 100644 index 000000000..4a3c0d168 --- /dev/null +++ b/plugins/admin/systems/ServerService/goNtpServer.tpl @@ -0,0 +1,26 @@ +
+{t}Time server{/t} +
+ + + + +
+ +
+ + + +
+ +

 

+

+

+ +   + +
+

diff --git a/plugins/admin/systems/class_servDB.inc b/plugins/admin/systems/class_servDB.inc index 6d4e25bc7..f7bd9b618 100644 --- a/plugins/admin/systems/class_servDB.inc +++ b/plugins/admin/systems/class_servDB.inc @@ -39,11 +39,8 @@ class servdb extends plugin "goLogAdmin", "goLogPassword", "goFonAdmin", "goFonPassword", "goFonAreaCode", "goFonCountryCode","goGlpiAdmin","goGlpiDatabase","goGlpiPassword"); var $objectclasses= array("top", "goServer"); - var $additionaloc= array("goImapServer" => array("goImapName", "goImapConnect", - "goImapAdmin", "goImapPassword", - "goImapSieveServer", - "goImapSievePort"), - "goKrbServer" => array("goKrbRealm", "goKrbAdmin", + var $additionaloc= array( + "goKrbServer" => array("goKrbRealm", "goKrbAdmin", "goKrbPassword"), "goFaxServer" => array("goFaxAdmin", "goFaxPassword"), "goLogDBServer" => array("goLogAdmin", "goLogPassword"), @@ -139,7 +136,7 @@ class servdb extends plugin } /* All fields are marked as *must* */ - if (in_array("goImapServer", $this->objectclasses)){ + if (1 == 0 && in_array("goImapServer", $this->objectclasses)){ foreach (array("goImapAdmin", "goImapName") as $attr){ if ($this->$attr == "" || preg_match("/ /", $this->$attr)){ $message[]= sprintf(_("The attribute '%s' is empty or contains invalid characters."), $attr);