X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fadmin%2Fsystems%2Fclass_servService.inc;h=266c0edc37472da54f253df2ceb103ffe0daacf5;hb=d9f1895952e9b02c1b0c398cc5dc09b88178e603;hp=afc35e42b5e5d2e4c2db9be4209a05db3d7d15e6;hpb=77131c17caff27e8fbd4552f3d066f2006146826;p=gosa.git diff --git a/plugins/admin/systems/class_servService.inc b/plugins/admin/systems/class_servService.inc index afc35e42b..266c0edc3 100644 --- a/plugins/admin/systems/class_servService.inc +++ b/plugins/admin/systems/class_servService.inc @@ -8,6 +8,7 @@ class servservice extends plugin var $cli_parameters= array("eins" => "Eins ist toll", "zwei" => "Zwei ist noch besser"); var $goExportEntry = array(); + var $goExportEntryList= array(); var $goTimeSource = array(); var $goLdapBase = ""; var $goXdmcpIsEnabled = ""; @@ -40,10 +41,10 @@ class servservice extends plugin var $mounts_to_remove = array(); var $oldone = NULL; //temp dave for old mount entry - function servservice ($config, $dn= NULL) + function servservice ($config, $dn= NULL, $parent= NULL) { - plugin::plugin ($config, $dn); + plugin::plugin ($config, $dn, $parent); $ldap = $this->config->get_ldap_link(); $avl_objectclasses = $ldap->get_objectclasses(); @@ -69,19 +70,17 @@ class servservice extends plugin $this->$name= $tmp; } - $tmp =array(); $tmp2=array(); if(isset($this->attrs['goExportEntry'])){ - unset($this->attrs['goExportEntry']['count']); - if((isset($this->attrs['goExportEntry']))&&(isset($this->attrs['goExportEntry']))){ - foreach($this->attrs['goExportEntry'] as $entry){ - $tmp2= split("\|",$entry); - $tmp[$tmp2[0]]= $entry; + if(isset($this->attrs['goExportEntry']['count'])){ + for($i= 0; $i<$this->attrs['goExportEntry']['count']; $i++){ + $entry= $this->attrs['goExportEntry'][$i]; + $tmp[preg_replace('/\|.*$/', '', $entry)]= $entry; } } } - $this->goExportEntry = $tmp; + $this->goExportEntryList = $tmp; /* Always is account... */ $this->is_account= TRUE; @@ -96,11 +95,28 @@ class servservice extends plugin function addToList($entry){ $key = key($entry); - $this->goExportEntry[$key]=$entry[$key]; + $this->goExportEntryList[$key]=$entry[$key]; } function deleteFromList($id){ - unset($this->goExportEntry[$id]); + /* Check if the share is used by someone */ + $ldap = $this->config->get_ldap_link(); + $ldap->cd($this->config->current['BASE']); + $ldap->search("(|(gotoProfileServer=*|$id)(gotoShare=*|$id|*))", array("cn")); + $cnt= $ldap->count(); + if ($cnt){ + $msg= sprintf(_("The share can't be removed since it is still used by %d users:"), $cnt); + $msg.= "

"._("Please correct the share-/profile settings of these users"); + print_red($msg); + + } else { + /* Finally remove it */ + unset($this->goExportEntryList[$id]); + } } function addToMountList($entry) { @@ -122,29 +138,32 @@ class servservice extends plugin function execute() { - /* Call parent execute */ - plugin::execute(); + /* Call parent execute */ + plugin::execute(); /* Fill templating stuff */ $smarty= get_smarty(); - $smarty->assign("staticAddress", ""); - - if((isset($_POST['DelNfsEnt']))&&(isset($_POST['goExportEntry']))){ + + if((isset($_POST['DelNfsEnt'])) && (isset($_POST['goExportEntryList'])) && chkacl($this->acl,"goExportEntry") == ""){ if($this->allow_mounts){ - $this->deleteFromMountList($this->goExportEntry[$_POST['goExportEntry']]); + foreach($_POST['goExportEntryList'] as $entry){ + $this->deleteFromMountList($this->goExportEntryList[$entry]); + } + } + foreach($_POST['goExportEntryList'] as $entry){ + $this->deleteFromList($entry); } - $this->deleteFromList($_POST['goExportEntry']); } - if(isset($_POST['NewNfsAdd'])){ + if(isset($_POST['NewNfsAdd']) && chkacl($this->acl,"goExportEntry") == ""){ $this->oldone = NULL; $this->o_subWindow = new servnfs($this->config,$this->acl, $this->allow_mounts, $this->dn); $this->dialog = true; } - if((isset($_POST['NewNfsEdit']))&&(isset($_POST['goExportEntry']))){ - $entry = $this->goExportEntry[$_POST['goExportEntry']]; + if((isset($_POST['NewNfsEdit']))&&(isset($_POST['goExportEntryList'])) && chkacl($this->acl,"goExportEntry") == ""){ + $entry = $this->goExportEntryList[$_POST['goExportEntryList'][0]]; $add_mount=isset($this->mounts_to_add[$entry]); $this->oldone=$entry; $this->o_subWindow = new servnfs($this->config,$this->acl,$this->allow_mounts,$this->dn,$entry,$add_mount); @@ -191,13 +210,13 @@ class servservice extends plugin } /* Here we add a new entry */ - if(isset($_POST['NewNTPAdd']) && $_POST['NewNTPExport'] != "") { + if(isset($_POST['NewNTPAdd']) && $_POST['NewNTPExport'] != "" && chkacl($this->acl,"goNtpServer") == "") { $this->goTimeSource[$_POST['NewNTPExport']]= $_POST['NewNTPExport']; asort($this->goTimeSource); } /* Deleting an Entry, is a bit more complicated than adding one*/ - if(isset($_POST['DelNTPEnt'])) { + if(isset($_POST['DelNTPEnt']) && chkacl($this->acl,"goNtpServer") == "") { foreach ($_POST['goTimeSource'] as $entry){ if (isset($this->goTimeSource[$entry])){ unset($this->goTimeSource[$entry]); @@ -213,8 +232,8 @@ class servservice extends plugin } $tellSmarty=array(); - ksort($this->goExportEntry); - foreach($this->goExportEntry as $name=>$values){ + ksort($this->goExportEntryList); + foreach($this->goExportEntryList as $name=>$values){ $tmp = split("\|",$values); $tellSmarty[$name] = $tmp[0]." ".$tmp[4]." (".$tmp[2].")"; } @@ -246,7 +265,7 @@ class servservice extends plugin $smarty->assign("goExportEntryACL", " disabled "); }else{ $smarty->assign("goShareServerState", " "); - $smarty->assign("goExportEntryACL", " "); + $smarty->assign("goExportEntryACL", chkacl($this->acl, "goExportEntry")); } /* Different handling for checkbox */ @@ -273,9 +292,9 @@ class servservice extends plugin if (isset($_POST['servicetab'])){ $tmp = $this->goTimeSource; - if(isset($_POST['goLdapBase'])){ + if(isset($_POST['goLdapBase']) && chkacl($this->acl,"goLdapBase") == ""){ $this->goLdapBase = $_POST['goLdapBase']; - } + } /* Save checkbox state */ foreach ($this->additionaloc as $oc => $dummy){ @@ -290,17 +309,21 @@ class servservice extends plugin } /* Save xdmcp is enabled flag */ - if (isset($_POST['goXdmcpIsEnabled'])){ - $this->goXdmcpIsEnabled= "true"; - } else { - $this->goXdmcpIsEnabled= "false"; + if(chkacl($this->acl,"goXdmcpIsEnabled") == ""){ + if (isset($_POST['goXdmcpIsEnabled'])){ + $this->goXdmcpIsEnabled= "true"; + } else { + $this->goXdmcpIsEnabled= "false"; + } } /* Save xdmcp is enabled flag */ - if (isset($_POST['goShareServer'])){ - $this->goShareServer = true; - } else { - $this->goShareServer = false; + if(chkacl($this->acl,"goExportEntry") == ""){ + if (isset($_POST['goShareServer'])){ + $this->goShareServer = true; + } else { + $this->goShareServer = false; + } } $this->goTimeSource = array(); $this->goTimeSource = $tmp; @@ -347,10 +370,10 @@ class servservice extends plugin $this->attrs['objectClass']= $tmp; /* Arrays */ - foreach (array("goTimeSource", "goExportEntry") as $name){ - $this->attrs[$name]= array(); - foreach ($this->$name as $element){ - $this->attrs[$name][]= $element; + foreach (array("goTimeSource"=>"goTimeSource", "goExportEntryList"=>"goExportEntry") as $source => $destination){ + $this->attrs[$destination]= array(); + foreach ($this->$source as $element){ + $this->attrs[$destination][]= $element; } } @@ -374,12 +397,12 @@ class servservice extends plugin $this->cleanup(); $ldap->modify ($this->attrs); - show_ldap_error($ldap->get_error()); + show_ldap_error($ldap->get_error(), _("Saving server service object failed")); /* Optionally execute a command after we're done */ if ($this->initially_was_account == $this->is_account){ if ($this->is_modified){ - $this->handle_post_events("mofify"); + $this->handle_post_events("modify"); } } else { $this->handle_post_events("add"); @@ -398,42 +421,42 @@ class servservice extends plugin # load data from mounts container $ldap = $this->config->get_ldap_link(); - $ldap->cat($mountsdn); + $ldap->cat($mountsdn, array('dn')); $attrs = $ldap->fetch(); # mounts container not present yet, so we create it if (count($attrs) == 0) { $ldap->cd($mountsdn); $ldap->add($mounts); - show_ldap_error($ldap->get_error()); + show_ldap_error($ldap->get_error(), _("Creating mount container failed")); gosa_log("Mount container '$mountsdn' has been created"); } - # remove deleted mounts from the container - foreach ($this->mounts_to_remove as $entry) { - $mount=$this->returnMountEntry($entry); + # remove deleted mounts from the container + foreach ($this->mounts_to_remove as $entry) { + $mount=$this->returnMountEntry($entry); $mountdn = "cn=".$mount["cn"].","."$mountsdn"; - - $ldap->cat($mountdn); - $attrs = $ldap->fetch(); - - if (count($attrs) != 0) { - $ldap->rmdir($mountdn); - show_ldap_error($ldap->get_error()); - gosa_log("Mount object '".$mountdn."' has been removed"); - } - } - # add new mounts to the container - foreach ($this->mounts_to_add as $entry) { - + $ldap->cat($mountdn, array('dn')); + $attrs = $ldap->fetch(); + + if (count($attrs) != 0) { + $ldap->rmdir($mountdn); + show_ldap_error($ldap->get_error(), _("Removing mount container failed")); + gosa_log("Mount object '".$mountdn."' has been removed"); + } + } + + # add new mounts to the container + foreach ($this->mounts_to_add as $entry) { + $mount=$this->returnMountEntry($entry); $mountdn = "cn=".$mount["cn"].","."$mountsdn"; - $ldap->cd($mountdn); - $ldap->add($mount); - show_ldap_error($ldap->get_error()); - gosa_log("Mount object '".$mountdn."' has been added"); - } + $ldap->cd($mountdn); + $ldap->add($mount); + show_ldap_error($ldap->get_error(), _("Saving mount container failed")); + gosa_log("Mount object '".$mountdn."' has been added"); + } } function get_share_type($share) {