X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fadmin%2Fsystems%2Fclass_systemManagement.inc;h=ac36a2034057729f02f3d917f9962884c62053dd;hb=9695395f399e680d3fbb0c6b7a2df7d8b37d17c8;hp=de5f19e02be081ef24ca03962ae2bd1317e1ed4d;hpb=64f22047f84beb22c9b0eb4a64f3502ef9085a55;p=gosa.git diff --git a/plugins/admin/systems/class_systemManagement.inc b/plugins/admin/systems/class_systemManagement.inc index de5f19e02..ac36a2034 100644 --- a/plugins/admin/systems/class_systemManagement.inc +++ b/plugins/admin/systems/class_systemManagement.inc @@ -54,7 +54,7 @@ class systems extends plugin /* Call parent execute */ plugin::execute(); - $_SESSION['LOCK_VARS_TO_USE'] = array("/^user_edit_/i","/^user_del_/","/^act/","/^id/"); + $_SESSION['LOCK_VARS_TO_USE'] = array("/^system_edit_/i","/^system_del_/","/^act/","/^id/"); /******************** Check for functional posts, edit|delete|add|... system devices @@ -67,21 +67,21 @@ class systems extends plugin /* Test Posts */ foreach($_POST as $key => $val){ // Post for delete - if(preg_match("/user_del.*/",$key)){ + if(preg_match("/system_del.*/",$key)){ $s_action = "del"; - $s_entry = preg_replace("/user_".$s_action."_/i","",$key); + $s_entry = preg_replace("/system_del_/i","",$key); // Post for edit - }elseif(preg_match("/user_edit_.*/",$key)){ + }elseif(preg_match("/system_edit_.*/",$key)){ $s_action="edit"; - $s_entry = preg_replace("/user_".$s_action."_/i","",$key); + $s_entry = preg_replace("/system_edit_/i","",$key); // Post for new - }elseif(preg_match("/user_new.*/",$key)){ + }elseif(preg_match("/system_new.*/",$key)){ $s_action="new"; - }elseif(preg_match("/user_tplnew.*/i",$key)){ + }elseif(preg_match("/system_tplnew.*/i",$key)){ $s_action="new_tpl"; - }elseif(preg_match("/user_setpwd_.*/i",$key)){ + }elseif(preg_match("/system_setpwd_.*/i",$key)){ $s_action="change_pw"; - $s_entry = preg_replace("/user_setpwd_/i","",$key); + $s_entry = preg_replace("/system_setpwd_/i","",$key); }elseif(preg_match("/gen_cd_.*/i",$key)){ $s_action="gen_cd"; $s_entry = preg_replace("/gen_cd_/i","",$key); @@ -121,7 +121,7 @@ class systems extends plugin return ($smarty->fetch(get_template_path('chooser.tpl', TRUE))); } - + /******************** Create FAI CD ... ********************/ @@ -132,6 +132,83 @@ class systems extends plugin } + /* Start CD-Creation */ + if ((isset($_POST["cd_create"])) && !empty($this->dn)){ + $smarty->assign("src", "?plug=".$_GET['plug']."&PerformIsoCreation"); + return ($smarty->fetch(get_template_path('gencd_frame.tpl', TRUE))); + } + + + if ($this->dn != "" && isset($_GET['PerformIsoCreation'])){ + + $return_button = "
+ + +
"; + + $dsc = array(0 => array("pipe", "r"), 1 => array("pipe", "w"), 2 => array("pipe", "w")); + + /* Get and check command */ + $command= search_config($this->config->data['TABS'], "workgeneric", "ISOCMD"); + if (check_command($command)){ + @DEBUG (DEBUG_SHELL, __LINE__, __FUNCTION__, __FILE__, $command, "Execute"); + + /* Print out html introduction */ + echo ' + + + + + + + +
';
+
+        /* Open process handle and check if it is a valid process */
+        $process= proc_open($command." '".$this->dn."'", $dsc, $pipes);
+        if (is_resource($process)) {
+          fclose($pipes[0]);
+
+          /* Print out returned lines && write JS to scroll down each line */
+          while (!feof($pipes[1])){
+            $cur_dat = fgets($pipes[1], 1024);
+            echo $cur_dat;
+            echo '' ;
+            flush();
+          }
+        }
+
+        /* Get error string && close streams */
+        $buffer= stream_get_contents($pipes[2]);
+
+        fclose($pipes[1]);
+        fclose($pipes[2]);
+        echo "
"; + + /* Check return code */ + $ret= proc_close($process); + if ($ret != 0){ + echo "

"._("Creating the image failed. Please see the report below.")."

"; + echo "
$buffer
"; + } + + + + echo $return_button."
"; + + } else { + $tmp= "

".sprintf(_("Command '%s', specified for ISO creation doesn't seem to exist."), $command)."

"; + echo $tmp; + } + + /* Scroll down completly */ + echo '' ; + echo ''; + flush(); + exit; + } + + /******************** Create new system ... ********************/ @@ -359,7 +436,7 @@ class systems extends plugin "terminal" => array("CLASS"=>"TERMTABS", "TABCLASS" =>"termtabs", "ACL"=> "terminal/termgeneric"), "workstation" => array("CLASS"=>"WORKTABS", "TABCLASS" =>"worktabs", "ACL"=> "workstation/workgeneric"), "server" => array("CLASS"=>"SERVTABS", "TABCLASS" =>"servtabs", "ACL"=> "server/servgeneric"), - "printer" => array("CLASS"=>"PRINTTABS", "TABCLASS" =>"printtabs", "ACL"=> "printer/printgenric"), + "printer" => array("CLASS"=>"PRINTTABS", "TABCLASS" =>"printtabs", "ACL"=> "printer/printgeneric"), "phone" => array("CLASS"=>"PHONETABS", "TABCLASS" =>"phonetabs", "ACL"=> "phone/phoneGeneric"), "winstation" => array("CLASS"=>"WINTABS", "TABCLASS" =>"wintabs", "ACL"=> "winworkstation/wingeneric"), "component" => array("CLASS"=>"COMPONENTTABS","TABCLASS" =>"componenttabs", "ACL"=> "component/componentGeneric")); @@ -416,7 +493,7 @@ class systems extends plugin "terminal" => array("CLASS"=>"TERMTABS", "TABCLASS" =>"termtabs", "ACL"=> "terminal/termgeneric"), "workstation" => array("CLASS"=>"WORKTABS", "TABCLASS" =>"worktabs", "ACL"=> "workstation/workgeneric"), "server" => array("CLASS"=>"SERVTABS", "TABCLASS" =>"servtabs", "ACL"=> "server/servgeneric"), - "printer" => array("CLASS"=>"PRINTTABS", "TABCLASS" =>"printtabs", "ACL"=> "printer/printgenric"), + "printer" => array("CLASS"=>"PRINTTABS", "TABCLASS" =>"printtabs", "ACL"=> "printer/printgeneric"), "phone" => array("CLASS"=>"PHONETABS", "TABCLASS" =>"phonetabs", "ACL"=> "phone/phoneGeneric"), "winstation" => array("CLASS"=>"WINTABS", "TABCLASS" =>"wintabs", "ACL"=> "winworkstation/wingeneric"), "component" => array("CLASS"=>"COMPONENTTABS","TABCLASS" =>"componenttabs", "ACL"=> "component/componentGeneric")); @@ -604,8 +681,25 @@ class systems extends plugin function get_used_snapshot_bases() { $tmp = array(); - foreach(array("phones","servers","printers","terminals","netdevices","workstations") as $ent){ - $tmp[] = "ou=".$ent.",ou=systems,".$this->DivListSystem->selectedBase; + + /* Check acls, if we are not allowed to create and write each plugin tab, skip this object */ + + $tabs = array( + "terminal" => "ou=terminals,ou=systems,", + "workstation" => "ou=workstations,ou=systems,", + "server" => "ou=servers,ou=systems,", + "printer" => "ou=printers,ou=systems,", + "phone" => "ou=phones,ou=systems,", + "winworkstation" => get_winstations_ou(), + "component" => "ou=netdevices,ou=systems," + ); + + foreach($tabs as $acl_cat => $dn){ + + $acl_all = $this->ui->has_complete_category_acls($dn.$this->DivListSystem->selectedBase,$acl_cat); + if(preg_match("/(c.*w|w.*c)/",$acl_all)){ + $tmp[] = $dn.$this->DivListSystem->selectedBase; + } } return($tmp); } @@ -679,21 +773,36 @@ class systems extends plugin $userregex = "(gotoLastUser=".$this->DivListSystem->UserRegex.")"; } + /* Attributes to fetch */ + $sys_attrs = array("cn", "description", "macAddress", "objectClass", "sambaDomainName"); + $sys_categories = array("terminal", "workstation", "server", "phone" ,"printer"); + + /* Add FAIstate to attributes if FAI is activated */ + $tmp = search_config($this->config->data,"faiManagement","CLASS"); + if(!empty($tmp)){ + $sys_attrs[] = "FAIstate"; + } + /* Walk through all possible search combinations, and search for some objects if the checkbox is enabled */ foreach($objs as $checkBox => $oc){ if($this->DivListSystem->$checkBox){ if($this->DivListSystem->SubSearch){ if($oc['CLASS'] != ""){ $filter = "(|(&".$userregex."(objectClass=".$oc['CLASS'].")(cn=".$this->DivListSystem->Regex.")))"; - $res = array_merge($res,get_list($filter, array("terminal", "workstation", "server", "phone" ,"printer"), $base, - array("cn", "description", "macAddress", "objectClass", "sambaDomainName", "FAIstate"), GL_NONE | GL_SUBSEARCH | GL_SIZELIMIT)); + $new_res = get_list($filter, $sys_categories , $base,$sys_attrs, GL_NONE | GL_SUBSEARCH | GL_SIZELIMIT); + + /* Remove all objects that are not in the expected sub department */ + foreach($new_res as $key => $obj){ + if(preg_match("/^[^,]+,".normalizePreg($oc['TREE'])."/",$obj['dn'])){ + $res[$obj['dn']] = $obj; + } + } } }else{ /* User filter? */ if($oc['CLASS'] != ""){ $filter = "(|(&".$userregex."(objectClass=".$oc['CLASS'].")(cn=".$this->DivListSystem->Regex.")))"; - $res = array_merge($res,get_list($filter,array("terminal", "workstation", "server", "phone" ,"printer"),$oc['TREE'].$base, - array("cn", "description", "macAddress", "objectClass", "sambaDomainName", "FAIstate"), GL_NONE | GL_SIZELIMIT)); + $res = array_merge($res,get_list($filter,$sys_categories,$oc['TREE'].$base, $sys_attrs, GL_NONE | GL_SIZELIMIT)); } } } @@ -701,8 +810,7 @@ class systems extends plugin /* Search for incoming objects */ $filter = "(|(&".$userregex."(objectClass=goHard)(cn=".$this->DivListSystem->Regex.")))"; - $res = array_merge($res,get_list($filter,array("terminal", "workstation", "server", "phone" ,"printer"),"ou=incoming,".$base, - array("cn", "description", "macAddress", "objectClass", "sambaDomainName"), GL_NONE | GL_SIZELIMIT)); + $res = array_merge($res,get_list($filter,$sys_categories,"ou=incoming,".$base,$sys_attrs, GL_NONE | GL_SIZELIMIT)); /* Get all gotoTerminal's */ foreach ($res as $value){