X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fadmin%2Fsystems%2Fclass_workstationGeneric.inc;h=0330d015e3443af3949ddf272230a2ca545aad1f;hb=3b025e5d5db6344c74ff93b07a4ffb351ce4dc1b;hp=4c25e5fb83cdf8aa8b02f8615208576279bbf30e;hpb=a492499542b190a2b7e81188fe32e2461cddb20b;p=gosa.git diff --git a/plugins/admin/systems/class_workstationGeneric.inc b/plugins/admin/systems/class_workstationGeneric.inc index 4c25e5fb8..0330d015e 100644 --- a/plugins/admin/systems/class_workstationGeneric.inc +++ b/plugins/admin/systems/class_workstationGeneric.inc @@ -60,9 +60,9 @@ class workgeneric extends plugin - function workgeneric ($config, $dn= NULL) + function workgeneric ($config, $dn= NULL, $parent= NULL) { - plugin::plugin ($config, $dn); + plugin::plugin ($config, $dn, $parent); $this->netConfigDNS = new termDNS($this->config,$this->dn,$this->objectclasses); /* Read arrays */ @@ -124,17 +124,34 @@ class workgeneric extends plugin $this->orig_dn= $this->dn; } + + function set_acl_base($base) + { + plugin::set_acl_base($base); + $this->netConfigDNS->set_acl_base($base); + } + + function set_acl_category($cat) + { + plugin::set_acl_category($cat); + $this->netConfigDNS->set_acl_category($cat); + } + function execute() { /* Call parent execute */ plugin::execute(); /* Do we need to flip is_account state? */ - if (isset($_POST['modify_state'])){ - $this->is_account= !$this->is_account; + if(isset($_POST['modify_state'])){ + if($this->is_account && $this->acl_is_removeable()){ + $this->is_account= FALSE; + }elseif(!$this->is_account && $this->acl_is_createable()){ + $this->is_account= TRUE; + } } - if (isset($_POST['action'])){ + if ((isset($_POST['action'])) && ($this->acl_is_writeable("FAIstate"))){ $cmd= search_config($this->config->data['TABS'], "workgeneric", "ACTIONCMD"); if ($cmd == ""){ print_red(_("No ACTIONCMD definition found in your gosa.conf")); @@ -142,7 +159,7 @@ class workgeneric extends plugin exec ($cmd." ".$this->netConfigDNS->macAddress." ".escapeshellarg($_POST['saction']), $dummy, $retval); if ($retval != 0){ print_red(sprintf(_("Execution of '%s' failed!"), $cmd)); - } else { + } elseif ($_POST['saction'] != "wake") { /* Set FAIstate */ $ldap = $this->config->get_ldap_link(); @@ -188,9 +205,9 @@ class workgeneric extends plugin /* Base select dialog */ $once = true; foreach($_POST as $name => $value){ - if(preg_match("/^chooseBase/",$name) && $once){ + if(preg_match("/^chooseBase/",$name) && $once && $this->acl_is_writeable("base")){ $once = false; - $this->dialog = new baseSelectDialog($this->config,$this); + $this->dialog = new baseSelectDialog($this->config,$this,$this->get_allowed_bases()); $this->dialog->setCurrentBase($this->base); } } @@ -203,7 +220,13 @@ class workgeneric extends plugin if($this->dialog->isClosed()){ $this->dialog = false; }elseif($this->dialog->isSelected()){ - $this->base = $this->dialog->isSelected(); + + /* A new base was selected, check if it is a valid one */ + $tmp = $this->get_allowed_bases(); + if(isset($tmp[$this->dialog->isSelected()])){ + $this->base = $this->dialog->isSelected(); + } + $this->dialog= false; }else{ return($this->dialog->execute()); @@ -211,12 +234,12 @@ class workgeneric extends plugin } /* Add new ntp Server to our list */ - if((isset($_POST['addNtpServer'])) && (isset($_POST['gotoNtpServers']))){ + if((isset($_POST['addNtpServer'])) && (isset($_POST['gotoNtpServers'])) && $this->acl_is_writeable("gotoNtpServer")){ $this->gotoNtpServer[$_POST['gotoNtpServers']] = $_POST['gotoNtpServers']; } /* Delete selected NtpServer for list of used servers */ - if((isset($_POST['delNtpServer'])) && (isset($_POST['gotoNtpServerSelected']))){ + if((isset($_POST['delNtpServer'])) && (isset($_POST['gotoNtpServerSelected'])) && $this->acl_is_writeable("gotoNtpServer")){ foreach($_POST['gotoNtpServerSelected'] as $name){ unset($this->gotoNtpServer[$name]); } @@ -225,13 +248,6 @@ class workgeneric extends plugin /* Fill templating stuff */ $smarty= get_smarty(); - /* Create base acls */ - $baseACL = $this->getacl("base"); - if(!$this->acl_is_moveable()) { - $baseACL = preg_replace("/w/","",$baseACL); - } - $smarty->assign("baseACL", $baseACL); - /* Set acls */ $tmp = $this->plInfo(); foreach($tmp['plProvidedAcls'] as $name => $translation){ @@ -240,7 +256,7 @@ class workgeneric extends plugin $smarty->assign("cn", $this->cn); $smarty->assign("l", $this->l); - $smarty->assign("bases", $this->config->idepartments); + $smarty->assign("bases", $this->get_allowed_bases()); $smarty->assign("staticAddress", ""); $tmp = array(); @@ -299,21 +315,24 @@ class workgeneric extends plugin function remove_from_parent() { - $this->netConfigDNS->remove_from_parent(); - $ldap= $this->config->get_ldap_link(); - $ldap->rmdir($this->dn); - show_ldap_error($ldap->get_error(), sprintf(_("Removing of system workstation/generic with dn '%s' failed."),$this->dn)); - - /* Optionally execute a command after we're done */ - $this->handle_post_events("remove", array("macAddress" => $this->netConfigDNS->macAddress)); + if($this->acl_is_removeable()){ - /* Delete references to object groups */ - $ldap->cd ($this->config->current['BASE']); - $ldap->search ("(&(objectClass=gosaGroupOfNames)(member=".$this->dn."))", array("cn")); - while ($ldap->fetch()){ - $og= new ogroup($this->config, $ldap->getDN()); - unset($og->member[$this->dn]); - $og->save (); + $this->netConfigDNS->remove_from_parent(); + $ldap= $this->config->get_ldap_link(); + $ldap->rmdir($this->dn); + show_ldap_error($ldap->get_error(), sprintf(_("Removing of system workstation/generic with dn '%s' failed."),$this->dn)); + + /* Optionally execute a command after we're done */ + $this->handle_post_events("remove", array("macAddress" => $this->netConfigDNS->macAddress)); + + /* Delete references to object groups */ + $ldap->cd ($this->config->current['BASE']); + $ldap->search ("(&(objectClass=gosaGroupOfNames)(member=".$this->dn."))", array("cn")); + while ($ldap->fetch()){ + $og= new ogroup($this->config, $ldap->getDN()); + unset($og->member[$this->dn]); + $og->save (); + } } } @@ -321,25 +340,22 @@ class workgeneric extends plugin /* Save data to object */ function save_object() { + + /* Create a base backup and reset the + base directly after calling plugin::save_object(); + Base will be set seperatly a few lines below */ + $base_tmp = $this->base; plugin::save_object(); + $this->base = $base_tmp; /* Save base, since this is no LDAP attribute */ - if((isset($_POST['base'])) && ($this->acl_is_moveable())){ - $this->set_acl_base('dummy,'.$_POST['base']); - if($this->acl_is_moveable()){ - - if(isset($this->config->idepartments[$_POST['base']])){ - $this->base = $_POST['base']; - if ($_POST['base'] != $this->base){ - $this->is_modified= TRUE; - } - } - }else{ - - print_red(sprintf(_("You are not allowed to move this object to '%s'."),LDAP::fix($_POST['base']))); - $this->set_acl_base('dummy,'.$this->base); + $tmp = $this->get_allowed_bases(); + if(isset($_POST['base'])){ + if(isset($tmp[$_POST['base']])){ + $this->base= $_POST['base']; } } + $this->netConfigDNS->save_object(); /* Set inherit mode */ @@ -359,13 +375,13 @@ class workgeneric extends plugin { /* Call common method to give check the hook */ $message= plugin::check(); - $message= array_merge($message, $this->netConfigDNS->check()); - - $this->dn= "cn=".$this->cn.",ou=workstations,ou=systems,".$this->base; - if ($this->orig_dn == "new" && !$this->acl_is_createable()){ - $message[]= _("You have no permissions to create a workstation on this 'Base'."); + + /* Skip IP & Mac checks if this is a template */ + if($this->cn != "wdefault"){ + $message= array_merge($message, $this->netConfigDNS->check()); } + $this->dn= "cn=".$this->cn.",ou=workstations,ou=systems,".$this->base; if ($this->cn == ""){ $message[]= _("The required field 'Workstation name' is not set."); @@ -374,7 +390,12 @@ class workgeneric extends plugin if ($this->orig_dn != $this->dn){ $ldap= $this->config->get_ldap_link(); $ldap->cd ($this->base); - $ldap->search ("(&(cn=".$this->cn.")(objectClass=gotoWorkstation))", array("cn")); + + if($this->cn == "wdefault"){ + $ldap->cat($this->dn); + }else{ + $ldap->search ("(&(cn=".$this->cn.")(objectClass=gotoWorkstation))", array("cn")); + } if ($ldap->count() != 0){ while ($attrs= $ldap->fetch()){ if (preg_match ("/,ou=incoming,/", $ldap->getDN())){ @@ -388,7 +409,7 @@ class workgeneric extends plugin } } } - + /* Check for valid ntpServer selection */ if((!$this->inheritTimeServer) && (!count($this->gotoNtpServer))){ $message[]= _("There must be at least one NTP server selected, or the inherit mode activated."); @@ -474,6 +495,12 @@ class workgeneric extends plugin $this->handle_post_events("modify"); } } + + /* cn=default and macAddress=- indicates that this is a template */ + if($this->cn == "wdefault"){ + $this->netConfigDNS->macAddress = "-"; + } + $this->netConfigDNS->cn = $this->cn; $this->netConfigDNS->save($this->dn); show_ldap_error($ldap->get_error(), sprintf(_("Saving of system workstation/generic with dn '%s' failed."),$this->dn)); @@ -500,6 +527,7 @@ class workgeneric extends plugin "gotoMode" => _("Goto mode"), "gotoSyslogServer" => _("Syslog server"), "gotoNtpServer" => _("Ntp server"), + "gotoRootPasswd" => _("Root password"), "FAIstate" => _("Action flag")) )); }