X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;ds=sidebyside;f=gosa-plugins%2Fgoto%2Fadmin%2Fsystems%2Fgoto%2Fclass_workstationStartup.inc;h=5485aaafb4550816e3d6976513b4ec7395c22b56;hb=bbb8900dc7676ee039cd0b45b7f99e65da42a883;hp=555ddd8b4e02ddefe4527889ddfe781330f06244;hpb=72b3e1800ce430688a467297503aad6375689f89;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 555ddd8b4..5485aaafb 100644
--- a/gosa-plugins/goto/admin/systems/goto/class_workstationStartup.inc
+++ b/gosa-plugins/goto/admin/systems/goto/class_workstationStartup.inc
@@ -1,11 +1,6 @@
"Eins ist toll", "zwei" => "Zwei ist noch besser");
-
/* Ldap server list */
var $gotoLdapServers = array();
var $gotoLdapServerList = array();
@@ -239,8 +234,7 @@ class workstartup extends plugin
*/
if(!isset($this->cache['SERVERS'][$this->FAIdebianMirror])){
if(count($this->FAIclass)){
- print_red(sprintf(_("The selected FAI mirror '%s' is no longer available, the mirror was set to 'auto'."),
- $this->FAIdebianMirror));
+ 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]);
@@ -254,8 +248,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)){
- print_red(sprintf(_("The selected FAI release '%s' is not available for mirror '%s', the release was set to '%s'."),
- $this->FAIrelease,$this->FAIdebianMirror,$new_release));
+ msg_dialog::display(_("Error"), sprintf(_("FAI release '%s' is not available on mirror '%s' - setting to release '%s'!"), $this->FAIrelease, $this->FAIdebianmirror), ERROR_DIALOG);
}
$this->FAIrelease = $new_release;
$this->cache =array();
@@ -332,7 +325,7 @@ class workstartup extends plugin
/* Do we represent a valid terminal? */
if (!$this->is_account && $this->parent === NULL){
$display= " ".
- _("This 'dn' has no terminal features.")."";
+ msgPool::noValidExtension(_("workstation"))."";
return ($display);
}
@@ -371,7 +364,7 @@ class workstartup extends plugin
}
if((isset($this->FAIclassInfo[$_POST['FAIclassesSel']]['FAIpartitionTable']))&&($found>0)){
- print_red(_("There is already a profile in your selection that contain partition table configurations."));
+ msg_dialog(_("Error"), _("There is already a profile containing a partition table in your configuration!") , ERROR_DIALOG);
}else{
$this->FAIclass[$_POST['FAIclassesSel']]=$_POST['FAIclassesSel'];
}
@@ -479,7 +472,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']))){
- print_red(_("You must specify a valid mount point."));
+ msg_dialog(_("Error"), msgPool::required(_("Mount point")), ERROR_DIALOG);
}else{
if(count($this->gotoAvailableShares)){
$a_share = $this->gotoAvailableShares[$_POST['gotoShareSelection']];
@@ -550,13 +543,22 @@ class workstartup extends plugin
}
}
- /* Add Entries
- */
+ /* Add Entries */
foreach($this->gotoLdapServers as $key => $server){
+ /* Announce missing entries */
if(!in_array($server,$this->gotoLdapServerList)){
$server = $server." (missing)";
}
+ /* Convert old style entry */
+ if (!preg_match('%:ldap://%', $server)){
+ $server= "ldap://".preg_replace('/^([^:]+):/', '\1/', $server);
+
+ /* Beautify new style entries */
+ } else {
+ $server= preg_replace("/^[^:]+:/", "", $server);
+ }
+
$SelectBoxLdapServer->AddEntry(
array(array("string" => $server),
array("string" =>
@@ -575,6 +577,16 @@ class workstartup extends plugin
$list = array();
foreach($this->gotoLdapServerList as $key => $entry){
if(!in_array($entry,$this->gotoLdapServers)){
+
+ /* Convert old style entry */
+ if (!preg_match('%:ldap://%', $entry)){
+ $entry= "ldap://".preg_replace('/^([^:]+):/', '\1/', $entry);
+
+ /* Beautify new style entries */
+ } else {
+ $entry= preg_replace("/^[^:]+:/", "", $entry);
+ }
+
$list[$key] = $entry;
}
}
@@ -813,27 +825,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->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){
@@ -854,7 +864,16 @@ class workstartup extends plugin
}
/* Check if LDAP server has changed */
- $ldap_changed= ($this->attrs['gotoLdapServer'] != $this->saved_attributes['gotoLdapServer']);
+ $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%")){
$this->attrs['gotoBootKernel']= array();
@@ -896,14 +915,53 @@ class workstartup extends plugin
$ldap->modify ($this->attrs);
new log("modify","workstation/".get_class($this),$this->dn,array_keys($this->attrs),$ldap->get_error());
- show_ldap_error($ldap->get_error(), sprintf(_("Saving of system workstation/startup with dn '%s' failed."),$this->dn));
+ if (!$ldap->success()){
+ msg_dialog::display(_("LDAP error"), msgPool::ldaperror($ldap->get_error(), $this->dn, LDAP_MOD, get_class()));
+ }
$this->handle_post_events("modify");
/* Check if LDAP server has changed */
- if ($ldap_changed){
- gosaSupportDaemon::send("gosa_reload_ldap_config", $this->parent->by_object['workgeneric']->netConfigDNS->macAddress);
- }
+ if ($ldap_changed && class_available("DaemonEvent")){
+ $events = DaemonEvent::get_event_types(SYSTEM_EVENT | HIDDEN_EVENT);
+ $o_queue = new gosaSupportDaemon();
+ if(isset($events['TRIGGERED']['DaemonEvent_reload_ldap_config'])){
+ $evt = $events['TRIGGERED']['DaemonEvent_reload_ldap_config'];
+ $macs = array();
+
+ /* Get list of macAddresses
+ */
+ if(isset($this->parent->by_object['ogroup'])){
+
+ /* If we are an object group, add all member macs
+ */
+ $p = $this->parent->by_object['ogroup'];
+ foreach($p->memberList as $dn => $obj){
+ if(isset($p->objcache[$dn]['macAddress']) && !empty($p->objcache[$dn]['macAddress'])){
+ $macs[] = $p->objcache[$dn]['macAddress'];
+ }
+ }
+ }elseif(isset($this->parent->by_object['workgeneric']->netConfigDNS->macAddress)){
+
+ /* We are a workstation. Add current mac.
+ */
+ $mac = $this->parent->by_object['workgeneric']->netConfigDNS->macAddress;
+ if(!empty($mac)){
+ $macs[] = $mac;
+ }
+ }
+ /* Trigger event for all member objects
+ */
+ foreach($macs as $mac){
+ $tmp = new $evt['CLASS_NAME']($this->config);
+ $tmp->set_type(TRIGGERED_EVENT);
+ $tmp->add_targets(array($mac));
+ if(!$o_queue->append($tmp)){
+ msg_dialog::display(_("Service infrastructure"),msgPool::siError($o_queue->get_error()),ERROR_DIALOG);
+ }
+ }
+ }
+ }
}
@@ -1013,13 +1071,11 @@ class workstartup extends plugin
{
$force = FALSE;
+ $start = microtime(TRUE);
+
/* Get the list of available servers and their releases.
*/
if($force || !isset($this->cache['SERVERS'])){
- $ldap = $this->config->get_ldap_link();
- $ldap->cd($this->config->current['BASE']);
- $ldap->search("(&(FAIrepository=*)(objectClass=FAIrepositoryServer))",array("FAIrepository"));
- $this->cache['SERVERS'] = array();
/* Only add inherit option, if we are part in an object group
*/
@@ -1027,34 +1083,17 @@ class workstartup extends plugin
$this->cache['SERVERS']['inherited']=array();
}
- /* Add auto value
- */
- $this->cache['SERVERS']['auto'] = array();
- $sort_by = array("auto");
- $server_tmp = array("auto"=>array());
- while($attr = $ldap->fetch()){
- if(isset($attr['FAIrepository'])){
- for($i = 0 ; $i < $attr['FAIrepository']['count'] ; $i ++ ){
- $rep = $attr['FAIrepository'][$i];
- $tmp = split("\|",$rep);
- if(count($tmp)==4){
- $sections = split(",",$tmp[3]);
- $release = $tmp[2];
- $server = $tmp[1];
- $url = $tmp[0];
- $server_tmp[$url][$release]=$release;
- $server_tmp['auto'][$release]=$release;
- $sort_by[$url] = $url;
- }
- }
+ $o_queue = new gosaSupportDaemon();
+ $tmp = $o_queue->FAI_get_server();
+ if($o_queue->is_error()){
+ msg_dialog::display(_("Service infrastructure"),msgPool::siError($o_queue->get_error()),ERROR_DIALOG);
+ }else{
+ foreach($tmp as $entry){
+ $rel = $entry['RELEASE'];
+ $this->cache['SERVERS']['auto'][$rel] = $rel;
+ $this->cache['SERVERS'][$entry['SERVER']][$rel] = $rel;
}
}
- natcasesort($sort_by);
- foreach($sort_by as $name){
- $releases = $server_tmp[$name];
- natcasesort($releases);
- $this->cache['SERVERS'][$name] = $releases;
- }
}
/* Build up arrays, without checks */
@@ -1082,45 +1121,21 @@ class workstartup extends plugin
}else{
$release = $this->FAIrelease;
}
- if($force || !isset($this->cache['CLASSES'][$release])){
- /* 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);
- $ldap = $this->config->get_ldap_link();
- $ldap->cd($this->config->current['BASE']);
- $ldap->search("(objectClass=FAIbranch)",array("ou"));
- while($attrs = $ldap->fetch()){
- 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);
}else{
- print_red(_("Could not load available classes, the fai extension plugin seems not to be installed."));
+ foreach($tmp as $entry){
+ $class = $entry['CLASS'];
+ $this->cache['CLASSES'][$release][$class] = $this->analyse_fai_object($entry);
+ }
}
/* Add object caught from external hook
@@ -1131,20 +1146,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();
+ }
}
}
}
@@ -1152,6 +1170,7 @@ class workstartup extends plugin
}
}
}
+# echo sprintf("Took %.6f
",microtime(1) - $start);
}
@@ -1215,46 +1234,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);
}
@@ -1268,9 +1281,9 @@ class workstartup extends plugin
$res = shell_exec($cmd);
$res2 = trim($res);
if((!$res)){
- print_red(sprintf(_("Can't execute specified REPOSITORY_HOOK '%s' please check your gosa.conf."),$cmd));
+ msg_dialog(_("Configuration error"), msgPool::cmdexecfailed("REPOSITORY_HOOK", $cmd), ERROR_DIALOG);
}elseif(empty($res2)){
- print_red(sprintf(_("The specified REPOSITORY_HOOK '%s', specified in your gosa.conf, returns an empty string."),$cmd));
+ msg_dialog(_("Configuration error"), _("REPOSITORY_HOOK returned no result!"), ERROR_DIALOG);
}else{
$tmp = split("\n",$res);
foreach($tmp as $line){