X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fadmin%2Fsystems%2Fclass_workstationGeneric.inc;h=0330d015e3443af3949ddf272230a2ca545aad1f;hb=3b025e5d5db6344c74ff93b07a4ffb351ce4dc1b;hp=b61573302a721d87d37dca48e8418335b18429c1;hpb=7d291e06679edeea7e0763cd8127e66c10c30072;p=gosa.git diff --git a/plugins/admin/systems/class_workstationGeneric.inc b/plugins/admin/systems/class_workstationGeneric.inc index b61573302..0330d015e 100644 --- a/plugins/admin/systems/class_workstationGeneric.inc +++ b/plugins/admin/systems/class_workstationGeneric.inc @@ -124,6 +124,19 @@ 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 */ @@ -146,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(); @@ -207,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()); @@ -229,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){ @@ -303,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 (); + } } } @@ -325,21 +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; - } - } + $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")) )); }