X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-plugins%2Fgoto%2Fadmin%2Fsystems%2Fgoto%2Fclass_workstationStartup.inc;h=fc29543b07e6e34eb6ff4f57dfb75e50cec0f1b2;hb=a06c47716e539f260a3d19f5d8bb36dc80bf0e2d;hp=689bdfecd6e2c43420f60fadc691ab2fc2565784;hpb=7814ca6288504068b44345af8e2fc4e3ac3beed5;p=gosa.git diff --git a/gosa-plugins/goto/admin/systems/goto/class_workstationStartup.inc b/gosa-plugins/goto/admin/systems/goto/class_workstationStartup.inc index 689bdfecd..fc29543b0 100644 --- a/gosa-plugins/goto/admin/systems/goto/class_workstationStartup.inc +++ b/gosa-plugins/goto/admin/systems/goto/class_workstationStartup.inc @@ -35,8 +35,10 @@ class workstartup extends plugin /* FAI class selection */ var $FAIclass = array(); // The currently selected classes - var $FAIrelease = ""; - var $FAIdebianMirror = "auto"; + var $FAIrelease = ""; + var $FAIdebianMirror = "auto"; + var $si_active = FALSE; + var $si_fai_action_failed = FALSE; var $cache = array(); // Used as cache in fai mehtods @@ -68,6 +70,9 @@ class workstartup extends plugin plugin::plugin ($config, $dn, $parent); + /* Check for si daemon */ + $this->si_active = isset($this->config->current['GOSA_SI']) && !empty($this->config->current['GOSA_SI']); + /* Check object group membership */ if(!isset($this->parent->by_object['ogroup'])){ $ldap = $this->config->get_ldap_link(); @@ -97,7 +102,9 @@ class workstartup extends plugin foreach($this->attrs['gotoLdapServer'] as $value){ $this->gotoLdapServers[] = preg_replace("/^[0-9]*:/","",$value); } - } + } + natcasesort($this->gotoLdapServerList); + if(!count($this->gotoLdapServers) && $this->member_of_ogroup){ $this->gotoLdap_inherit = TRUE; } @@ -228,13 +235,13 @@ class workstartup extends plugin } - if($this->fai_activated){ + if($this->fai_activated && !$this->si_fai_action_failed && $this->si_active){ /* Check if the current mirror is available */ if(!isset($this->cache['SERVERS'][$this->FAIdebianMirror])){ if(count($this->FAIclass)){ - msg_dialog(_("Error"), sprintf(_("FAI mirror '%s' is not available - setting to mirror 'auto'!"), $this->FAIdebianMirror), ERROR_DIALOG); + msg_dialog::display(_("Error"), sprintf(_("FAI mirror '%s' is not available - setting to mirror 'auto'!"), $this->FAIdebianMirror), ERROR_DIALOG); } $this->FAIdebianMirror = "auto"; $this->FAIrelease = key($this->cache['SERVERS'][$this->FAIdebianMirror]); @@ -248,7 +255,7 @@ class workstartup extends plugin if(!isset($this->cache['SERVERS'][$this->FAIdebianMirror][$this->FAIrelease])){ $new_release = key($this->cache['SERVERS'][$this->FAIdebianMirror]); if(count($this->FAIclass)){ - msg_dialog(_("Error"), sprintf(_("FAI release '%s' is not available on mirror '%s' - setting to release '%s'!"), $this->FAIrelease, $this->FAIdebianmirror), ERROR_DIALOG); + msg_dialog::display(_("Error"), sprintf(_("FAI release '%s' is not available on mirror '%s' - setting to release '%s'!"), $this->FAIrelease, $this->FAIdebianMirror,$new_release), ERROR_DIALOG); } $this->FAIrelease = $new_release; $this->cache =array(); @@ -256,35 +263,35 @@ class workstartup extends plugin } } - /* Get list of boot kernels */ - if (isset($this->config->data['TABS'])){ - $command= $this->config->search(get_class($this), "KERNELS",array('tabs')); - if (!check_command($command)){ - $message[]= sprintf(_("Command '%s', specified as KERNELS hook for plugin '%s' doesn't seem to exist."), $command, - get_class($this)); - } else { - $fh= popen($command, "r"); - while (!feof($fh)) { - $buffer= trim(fgets($fh, 256)); - if(!empty($buffer)){ - $name=$value = $buffer; - if(preg_match("/:/",$buffer)){ - $name = preg_replace("/:.*$/","",$buffer); - $value= preg_replace("/^.*:/","",$buffer); - $this->gotoBootKernels[$name]= $name.":".$value; - }else{ - $this->gotoBootKernels[$name]= $value; - } - } - } - pclose($fh); - } - } - - /* Turn to default, if we've nothing to inherit */ - if (!isset($this->gotoBootKernels['default-inherited']) && $this->gotoBootKernel == "default-inherited"){ - $this->gotoBootKernel= "default"; - } +# /* Get list of boot kernels */ +# if (isset($this->config->data['TABS'])){ +# $command= $this->config->search(get_class($this), "KERNELS",array('tabs')); +# if (!check_command($command)){ +# $message[]= sprintf(_("Command '%s', specified as KERNELS hook for plugin '%s' doesn't seem to exist."), $command, +# get_class($this)); +# } else { +# $fh= popen($command, "r"); +# while (!feof($fh)) { +# $buffer= trim(fgets($fh, 256)); +# if(!empty($buffer)){ +# $name=$value = $buffer; +# if(preg_match("/:/",$buffer)){ +# $name = preg_replace("/:.*$/","",$buffer); +# $value= preg_replace("/^.*:/","",$buffer); +# $this->gotoBootKernels[$name]= $name.":".$value; +# }else{ +# $this->gotoBootKernels[$name]= $value; +# } +# } +# } +# pclose($fh); +# } +# } +# +# /* Turn to default, if we've nothing to inherit */ +# if (!isset($this->gotoBootKernels['default-inherited']) && $this->gotoBootKernel == "default-inherited"){ +# $this->gotoBootKernel= "default"; +# } } @@ -324,7 +331,7 @@ class workstartup extends plugin /* Do we represent a valid terminal? */ if (!$this->is_account && $this->parent === NULL){ - $display= "\"\" ". + $display= "\"\" ". msgPool::noValidExtension(_("workstation")).""; return ($display); } @@ -364,7 +371,7 @@ class workstartup extends plugin } if((isset($this->FAIclassInfo[$_POST['FAIclassesSel']]['FAIpartitionTable']))&&($found>0)){ - msg_dialog(_("Error"), _("There is already a profile containing a partition table in your configuration!") , ERROR_DIALOG); + msg_dialog::display(_("Error"), _("There is already a profile containing a partition table in your configuration!") , ERROR_DIALOG); }else{ $this->FAIclass[$_POST['FAIclassesSel']]=$_POST['FAIclassesSel']; } @@ -472,7 +479,7 @@ class workstartup extends plugin if((isset($_POST['gotoShareAdd'])) && ($this->acl_is_writeable("gotoShare"))) { /* We assign a share to this user, if we don't know where to mount the share */ if((!isset($_POST['gotoShareMountPoint']))||(empty($_POST['gotoShareMountPoint']))||(preg_match("/[\|]/i",$_POST['gotoShareMountPoint']))){ - msg_dialog(_("Error"), msgPool::required(_("Mount point")), ERROR_DIALOG); + msg_dialog::display(_("Error"), msgPool::required(_("Mount point")), ERROR_DIALOG); }else{ if(count($this->gotoAvailableShares)){ $a_share = $this->gotoAvailableShares[$_POST['gotoShareSelection']]; @@ -551,7 +558,7 @@ class workstartup extends plugin } /* Convert old style entry */ - if (!preg_match('%:ldap://%', $server)){ + if (!preg_match('%:ldaps?://%', $server)){ $server= "ldap://".preg_replace('/^([^:]+):/', '\1/', $server); /* Beautify new style entries */ @@ -562,9 +569,9 @@ class workstartup extends plugin $SelectBoxLdapServer->AddEntry( array(array("string" => $server), array("string" => - " ". - " ". - "", + " ". + " ". + "", "attach" => "style='text-align:right;width:40px;border-right:0px;'"))); } @@ -579,7 +586,7 @@ class workstartup extends plugin if(!in_array($entry,$this->gotoLdapServers)){ /* Convert old style entry */ - if (!preg_match('%:ldap://%', $entry)){ + if (!preg_match('%:ldap[s]*://%', $entry)){ $entry= "ldap://".preg_replace('/^([^:]+):/', '\1/', $entry); /* Beautify new style entries */ @@ -607,22 +614,34 @@ class workstartup extends plugin $smarty->assign("fai_activated",$this->fai_activated); /* Create FAI output */ - if($this->fai_activated){ - - $this->update_fai_cache(); + $this->update_fai_cache(); + $smarty->assign("si_fai_action_failed",$this->si_fai_action_failed); + $smarty->assign("si_active",$this->si_active); + + if(!$this->si_fai_action_failed && $this->si_active && $this->fai_activated){ $smarty->assign("FAIservers" , $this->cache['SERVERS']); $smarty->assign("FAIdebianMirror",$this->FAIdebianMirror); $smarty->assign("FAIrelease" , $this->FAIrelease); $smarty->assign("FAIclasses" , $this->selectable_classes()); + /* Get classes for release from cache. + * Or build cache + */ + if($this->FAIdebianMirror == "inherited"){ + $release = $this->InheritedFAIrelease; + }else{ + $release = $this->FAIrelease; + } + + $smarty->assign("gotoBootKernels",$this->cache['KERNELS'][$release]); $smarty->assign("InheritedFAIrelease",$this->InheritedFAIrelease); $div = new divSelectBox("WSFAIscriptClasses"); $div -> SetHeight("110"); - $str_up = "  "; - $str_down = "  "; - $str_remove = "  "; + $str_up = "  "; + $str_down = "  "; + $str_remove = "  "; $str_empty = "  \"\""; /* Get classes */ @@ -825,27 +844,25 @@ class workstartup extends plugin plugin::save(); unset( $this->attrs['FAIrelease'] ); - $str = ""; /* Skip FAI attribute handling if not necessary */ - if($this->fai_activated){ + if($this->fai_activated && !$this->si_fai_action_failed){ if($this->FAIdebianMirror == "inherited"){ - $this->attrs['FAIclass'] = $this->attrs['FAIrelease'] = $this->attrs['FAIdebianMirror'] = array(); + $this->attrs['FAIclass'] = $this->attrs['FAIrelease'] = $this->attrs['FAIdebianMirror'] = array(); }else{ foreach($this->FAIclass as $class){ $str .= $class." "; } - $str .= ":" . $this->FAIrelease; - $this->attrs['FAIclass']= ""; - $this->attrs['FAIclass']= trim($str); - + $str = trim($str); if(empty($this->attrs['FAIclass'])){ $this->attrs['FAIclass'] = array(); + }else{ + $this->attrs['FAIclass']= $str." :".$this->FAIrelease; } } } - + /* Add missing arrays */ foreach (array("gotoFilesystem", "gotoAutoFs", "gotoModules") as $val){ if (isset ($this->$val) && count ($this->$val) != 0){ @@ -865,19 +882,7 @@ class workstartup extends plugin } } - /* Check if LDAP server has changed */ - $ldap_changed= false; - if (isset($this->saved_attributes['gotoLdapServer'])){ - if (isset($this->attrs['gotoLdapServer']) && $this->attrs['gotoLdapServer'] != $this->saved_attributes['gotoLdapServer']){ - $ldap_changed= true; - } - } else { - if (isset($this->attrs['gotoLdapServer'])){ - $ldap_changed= true; - } - } - - if (($this->attrs['gotoBootKernel'] == "default-inherited") || ($this->attrs['gotoBootKernel'] == "%default%")){ + if ($this->attrs['gotoBootKernel'] == "default-inherited"){ $this->attrs['gotoBootKernel']= array(); } @@ -892,7 +897,7 @@ class workstartup extends plugin /* Skip FAI attribute handling if not necessary */ - if($this->fai_activated){ + if($this->fai_activated && !$this->si_fai_action_failed && $this->si_active){ $ldap->cat($this->dn,array("FAIstate")); $checkFAIstate = $ldap->fetch(); @@ -901,8 +906,13 @@ class workstartup extends plugin $this->attrs['FAIclass'] = array(); $this->attrs['FAIdebianMirror'] = array(); } - } + }else{ + /* Don't touch FAI objects if something went wrong with the si daemon. + */ + if(isset($this->attrs['FAIclass'])) unset($this->attrs['FAIclass']); + if(isset($this->attrs['FAIdebianMirror'])) unset($this->attrs['FAIdebianMirror']); + } /* prepare share settings */ $tmp = array(); @@ -912,7 +922,6 @@ class workstartup extends plugin $tmp[] = $settings['server']."|".$name."|".$settings['mountPoint']; } $this->attrs['gotoShare']=$tmp; - $this->cleanup(); $ldap->modify ($this->attrs); new log("modify","workstation/".get_class($this),$this->dn,array_keys($this->attrs),$ldap->get_error()); @@ -923,7 +932,7 @@ class workstartup extends plugin $this->handle_post_events("modify"); /* Check if LDAP server has changed */ - if ($ldap_changed && class_available("DaemonEvent")){ + if ((isset($this->attrs['gotoLdapServer']) && class_available("DaemonEvent")) || $this->gotoLdap_inherit){ $events = DaemonEvent::get_event_types(SYSTEM_EVENT | HIDDEN_EVENT); $o_queue = new gosaSupportDaemon(); if(isset($events['TRIGGERED']['DaemonEvent_reload_ldap_config'])){ @@ -950,6 +959,14 @@ class workstartup extends plugin if(!empty($mac)){ $macs[] = $mac; } + }elseif(isset($this->parent->by_object['servgeneric']->netConfigDNS->macAddress)){ + + /* We are a server. Add current mac. + */ + $mac = $this->parent->by_object['servgeneric']->netConfigDNS->macAddress; + if(!empty($mac)){ + $macs[] = $mac; + } } /* Trigger event for all member objects @@ -1072,6 +1089,12 @@ class workstartup extends plugin function update_fai_cache($first_call = FALSE) { $force = FALSE; + if(!$this->si_active) return; + $start = microtime(TRUE); + + if($this->si_fai_action_failed && !isset($_POST['fai_si_retry'])) return; + + $this->si_fai_action_failed = FALSE; /* Get the list of available servers and their releases. */ @@ -1084,11 +1107,18 @@ class workstartup extends plugin } $o_queue = new gosaSupportDaemon(); - $tmp = $o_queue->FAI_get_server(); - foreach($tmp as $entry){ - $rel = $entry['RELEASE']; - $this->cache['SERVERS']['auto'][$rel] = $rel; - $this->cache['SERVERS'][$entry['SERVER']][$rel] = $rel; + $tmp = $o_queue->FAI_get_server(); + if($o_queue->is_error()){ + msg_dialog::display(_("Service infrastructure"),msgPool::siError($o_queue->get_error()),ERROR_DIALOG); + $this->si_fai_action_failed = TRUE; + $this->cache = array(); + return; + }else{ + foreach($tmp as $entry){ + $rel = $entry['RELEASE']; + $this->cache['SERVERS']['auto'][$rel] = $rel; + $this->cache['SERVERS'][$entry['SERVER']][$rel] = $rel; + } } } @@ -1117,76 +1147,24 @@ class workstartup extends plugin }else{ $release = $this->FAIrelease; } - if($force || !isset($this->cache['CLASSES'][$release])){ - - -# -# Currently not working here, it seems that my FAI environment is not -# configured to support GOsa-si FAI - Packages -# -# /* Get the list of available servers and their releases. -# */ -# if($force || !isset($this->cache['SERVERS'])){ -# -# /* Only add inherit option, if we are part in an object group -# */ -# if($this->member_of_ogroup){ -# $this->cache['SERVERS']['inherited']=array(); -# } -# -# $o_queue = new gosaSupportDaemon(); -# $tmp = $o_queue->FAI_get_classes(); -# print_a($tmp); -# echo $o_queue->get_error(); -# } -# -# -# -# - - - - - - /* Create a list of available releases. - * $this->cache['RELEASE_DNS'][ou=siga...,c=de] = "siga"; - * $this->cache['RELEASE_DNS'][ou=siga,ou=rc1,...,c=de] = "siga/rc1"; - */ - if($force || !isset($this->cache['RELEASE_DNS'])){ - $this->cache['RELEASE_DNS'] = array(); - $fai_ou_parts = preg_replace("/\/.*$/","",$this->FAIrelease); - - $tmp = get_sub_list("(objectClass=FAIbranch)","",get_ou("faiou"), - $this->config->current['BASE'],array("ou"),GL_NO_ACL_CHECK | GL_SUBSEARCH); - - foreach($tmp as $attrs){ - if(preg_match("/".normalizePreg(get_ou("faiou"))."/",$attrs['dn'])){ - $this->cache['RELEASE_DNS'][$attrs['dn']] = $this->dn_to_release_name($attrs['dn']); - } - } - } + if($force || !isset($this->cache['CLASSES'][$release])){ - /* Create list of available classes for the currenlty selected release. + /* Get the list of available servers and their releases. */ - $base = array_search($release,$this->cache['RELEASE_DNS']); + $o_queue = new gosaSupportDaemon(); + $tmp = $o_queue->FAI_get_classes($release); $this->cache['CLASSES'][$release] = array(); - - if(class_exists("FAI")){ - if(!empty($base)){ - $filter = "(|(objectClass=FAIpackageList)(objectClass=FAItemplate)(objectClass=FAIvariable)". - "(objectClass=FAIscript)(objectClass=FAIhook)(objectClass=FAIprofile)". - "(objectClass=FAIpartitionTable))"; - $list = FAI::get_all_objects_for_given_base($base,$filter,TRUE); - foreach($list as $attrs){ - $info = $this->analyse_fai_object($attrs); - if(count($info)){ - $this->cache['CLASSES'][$release][$attrs['cn'][0]][] = $info; - } - } - } + if($o_queue->is_error()){ + msg_dialog::display(_("Service infrastructure"),msgPool::siError($o_queue->get_error()),ERROR_DIALOG); + $this->si_fai_action_failed = TRUE; + $this->cache=array(); + return; }else{ - msg_dialog(_("Configuration error"), _("Missing FAI plugin extension!"), ERROR_DIALOG); + foreach($tmp as $entry){ + $class = $entry['CLASS']; + $this->cache['CLASSES'][$release][$class] = $this->analyse_fai_object($entry); + } } /* Add object caught from external hook @@ -1197,20 +1175,23 @@ class workstartup extends plugin $server = $entries['0']; $url = $entries['1']; if (!empty($url)){ - + /* Split releases */ if (isset($entries[2])){ $releases= split(",", $entries[2]); foreach ($releases as $release_data){ - $release= preg_replace('/:.*$/', '', $release_data); - $sections = split(':', preg_replace('/^[^:]+:([^|]+)|.*$/', '\1', $release_data)); - $classes = split('\|', preg_replace('/^[^|]+\|(.*)$/', '\1', $release_data)); - $this->cache['SERVERS'][$url][$release]=$release; - $this->cache['SERVERS']['auto'][$release]=$release; - foreach ($classes as $class){ - if ($class != ""){ - $this->cache['CLASSES'][$release][$class]= array(); + $release_c = preg_replace('/:.*$/', '', $release_data); + $sections_c = split(':', preg_replace('/^[^:]+:([^|]+)|.*$/', '\1', $release_data)); + $classes_c = split('\|', preg_replace('/^[^|]+\|(.*)$/', '\1', $release_data)); + + if($release_c == $release){ + $this->cache['SERVERS'][$url][$release_c]=$release_c; + $this->cache['SERVERS']['auto'][$release_c]=$release_c; + foreach ($classes_c as $class){ + if ($class != ""){ + $this->cache['CLASSES'][$release_c][$class]= array(); + } } } } @@ -1218,6 +1199,22 @@ class workstartup extends plugin } } } + + /* Get list of available kernel for this release + */ + if($force || !isset($this->cache['KERNELS'][$release])){ + $o_queue = new gosaSupportDaemon(); + $tmp = $o_queue->FAI_get_kernels($release); + $this->cache['KERNELS'][$release] = array(); + foreach($this->gotoBootKernels as $name => $default){ + $this->cache['KERNELS'][$release][$name] = $default; + } + foreach($tmp as $kernel){ + if(empty($kernel)) continue; + $this->cache['KERNELS'][$release][$kernel]=$kernel; + } + } + ksort($this->cache['KERNELS'][$release]); } @@ -1281,46 +1278,40 @@ class workstartup extends plugin */ function analyse_fai_object($attr) { - $tmp2 = array(); - if(!isset($attr['description'])){ - $attr['description'][0] =""; - } - if(in_array('FAIpackageList',$attr['objectClass'])){ - $tmp2["Type"] = 'FAIpackageList'; - $tmp2["Abbr"] = 'Pl'; - $tmp2["Desc"] = $attr['description'][0]; - } - if(in_array('FAItemplate',$attr['objectClass'])){ - $tmp2["Type"] = 'FAItemplate'; - $tmp2["Abbr"] = 'T'; - $tmp2["Desc"] = $attr['description'][0]; - } - if(in_array('FAIvariable',$attr['objectClass'])){ - $tmp2["Type"] = 'FAIvariable'; - $tmp2["Abbr"] = 'V'; - $tmp2["Desc"] = $attr['description'][0]; - } - if(in_array('FAIscript',$attr['objectClass'])){ - $tmp2["Type"] = 'FAIscript'; - $tmp2["Abbr"] = 'S'; - $tmp2["Desc"] = $attr['description'][0]; - } - if(in_array('FAIhook',$attr['objectClass'])){ - $tmp2["Type"] = 'FAIhook'; - $tmp2["Abbr"] = 'H'; - $tmp2["Desc"] = $attr['description'][0]; - } - if(in_array('FAIpartitionTable',$attr['objectClass'])){ - $tmp2["Type"]= 'FAIpartitionTable'; - $tmp2["Abbr"]= 'Pt'; - $tmp2["Desc"] = $attr['description'][0]; - } - if(in_array('FAIprofile',$attr['objectClass'])){ - $tmp2["Type"]= 'FAIprofile'; - $tmp2["Abbr"]= 'P'; - $tmp2["Desc"] = $attr['description'][0]; - } - return($tmp2); + $tmp = array(); + switch($attr['TYPE']){ + + case 'FAIpackageList': + $tmp["Type"]= 'FAIpackageList'; + $tmp["Abbr"]= 'Pl'; + break; + case 'FAItemplate': + $tmp["Type"]= 'FAItemplate'; + $tmp["Abbr"]= 'T'; + break; + case 'FAIvariable': + $tmp["Type"]= 'FAIvariable'; + $tmp["Abbr"]= 'V'; + break; + case 'FAIscript': + $tmp["Type"]= 'FAIscript'; + $tmp["Abbr"]= 'S'; + break; + case 'FAIhook': + $tmp["Type"]= 'FAIhook'; + $tmp["Abbr"]= 'H'; + break; + case 'FAIpartitionTable': + $tmp["Type"]= 'FAIpartitionTable'; + $tmp["Abbr"]= 'Pt'; + break; + case 'FAIprofile': + $tmp["Type"]= 'FAIprofile'; + $tmp["Abbr"]= 'P'; + break; + default: trigger_error("Unknown FAI object type!");; + } + return($tmp); } @@ -1334,9 +1325,9 @@ class workstartup extends plugin $res = shell_exec($cmd); $res2 = trim($res); if((!$res)){ - msg_dialog(_("Configuration error"), msgPool::cmdexecfailed("REPOSITORY_HOOK", $cmd), ERROR_DIALOG); + msg_dialog::display(_("Configuration error"), msgPool::cmdexecfailed("REPOSITORY_HOOK", $cmd), ERROR_DIALOG); }elseif(empty($res2)){ - msg_dialog(_("Configuration error"), _("REPOSITORY_HOOK returned no result!"), ERROR_DIALOG); + msg_dialog::display(_("Configuration error"), _("REPOSITORY_HOOK returned no result!"), ERROR_DIALOG); }else{ $tmp = split("\n",$res); foreach($tmp as $line){