X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Finclude%2Fclass_config.inc;h=6dd0527b8a45e7755245a8970ae7d97ea7a8e744;hb=7db39a804ab721db300683f505c87b9c2b8808a5;hp=1b7dc1e648f9a0e537e982cf59740d1b758a3bc6;hpb=f92f4e713cc813a47aae663a4c3af101555c77a2;p=gosa.git diff --git a/gosa-core/include/class_config.inc b/gosa-core/include/class_config.inc index 1b7dc1e64..6dd0527b8 100644 --- a/gosa-core/include/class_config.inc +++ b/gosa-core/include/class_config.inc @@ -43,7 +43,7 @@ class config { 'MAIN' => array(), 'MENU' => array(), 'SERVICE' => array()); var $basedir= ""; - var $config_version =""; + var $config_version ="NOT SET"; /* Keep a copy of the current deparment list */ var $departments= array(); @@ -75,16 +75,14 @@ class config { /* Check if class_location.inc has changed, this is the case if we have installed or removed plugins. */ - if(session::is_set("class_location.inc:timestamp")){ + if(session::global_is_set("class_location.inc:timestamp")){ $tmp = stat("../include/class_location.inc"); - if($tmp['mtime'] != session::get("class_location.inc:timestamp")){ - session::un_set("plist"); + if($tmp['mtime'] != session::global_get("class_location.inc:timestamp")){ + session::global_un_set("plist"); } } $tmp = stat("../include/class_location.inc"); - session::set("class_location.inc:timestamp",$tmp['mtime']); - - + session::global_set("class_location.inc:timestamp",$tmp['mtime']); if($this->filename != "" && filemtime($this->filename) != $this->last_modified){ @@ -99,26 +97,26 @@ class config { xml_set_object($this->parser, $this); xml_set_element_handler($this->parser, "tag_open", "tag_close"); $this->parse($this->filename); -# if(session::is_set('plist')){ -# session::un_set('plist'); -# } -# if(session::is_set('plug')){ -# session::un_set('plug'); -# } -# if(isset($_GET['plug'])){ -# unset($_GET['plug']); -# } + $this->set_current($this->current['NAME']); } } function parse($filename) - { + { + + $this->data = array( + "TABS" => array(), + "LOCATIONS" => array(), + "MAIN" => array(), + "MENU" => array(), + "SERVICE" => array()); + $this->last_modified = filemtime($filename); $this->filename = $filename; $fh= fopen($filename, "r"); $xmldata= fread($fh, 100000); - fclose($fh); + fclose($fh); if(!xml_parse($this->parser, chop($xmldata))){ $msg = sprintf(_("XML error in gosa.conf: %s at line %d"), xml_error_string(xml_get_error_code($this->parser)), @@ -137,8 +135,8 @@ class config { /* Trigger on CONF section */ if ($tag == 'CONF'){ $this->config_found= TRUE; - if(isset($attrs['CONFIG_VERSION'])){ - $this->config_version = $attrs['CONFIG_VERSION']; + if(isset($attrs['CONFIGVERSION'])){ + $this->config_version = $attrs['CONFIGVERSION']; } } @@ -188,7 +186,7 @@ class config { /* Handle referral tags */ case 'REFERRAL': if ($this->tags[$this->level-2] == 'LOCATION'){ - $url= $attrs['URL']; + $url= $attrs['URI']; $server= preg_replace('!^([^:]+://[^/]+)/.*$!', '\\1', $url); /* Add location elements */ @@ -240,7 +238,15 @@ class config { function get_credentials($creds) { if (isset($_SERVER['HTTP_GOSA_KEY'])){ - return (cred_decrypt($creds, $_SERVER['HTTP_GOSA_KEY'])); + if (!session::global_is_set('HTTP_GOSA_KEY_CACHE')){ + session::global_set('HTTP_GOSA_KEY_CACHE',array()); + } + $cache = session::global_get('HTTP_GOSA_KEY_CACHE'); + if(!isset($cache[$creds])){ + $cache[$creds] = cred_decrypt($creds, $_SERVER['HTTP_GOSA_KEY']); + session::global_set('HTTP_GOSA_KEY_CACHE',$cache); + } + return ($cache[$creds]); } return ($creds); } @@ -252,7 +258,7 @@ class config { /* Build new connection */ $this->ldap= ldap_init ($this->current['SERVER'], $this->current['BASE'], - $this->current['ADMIN'], $this->get_credentials($this->current['PASSWORD'])); + $this->current['ADMINDN'], $this->get_credentials($this->current['ADMINPASSWORD'])); /* Check for connection */ if (is_null($this->ldap) || (is_int($this->ldap) && $this->ldap == 0)){ @@ -261,69 +267,69 @@ class config { exit(); } - if (!session::is_set('size_limit')){ - session::set('size_limit',$this->current['SIZELIMIT']); - session::set('size_ignore',$this->current['SIZEIGNORE']); - } - - if ($sizelimit){ - $this->ldap->set_size_limit(session::get('size_limit')); - } else { - $this->ldap->set_size_limit(0); - } - /* Move referrals */ if (!isset($this->current['REFERRAL'])){ $this->ldap->referrals= array(); } else { $this->ldap->referrals= $this->current['REFERRAL']; } + + if (!session::global_is_set('size_limit')){ + session::global_set('size_limit',$this->current['LDAPSIZELIMIT']); + session::global_set('size_ignore',$this->current['LDAPSIZEIGNORE']); + } } - return new ldapMultiplexer($this->ldap); + $obj = new ldapMultiplexer($this->ldap); + if ($sizelimit){ + $obj->set_size_limit(session::global_get('size_limit')); + } else { + $obj->set_size_limit(0); + } + return($obj); } function set_current($name) { $this->current= $this->data['LOCATIONS'][$name]; - if (!isset($this->current['PEOPLE'])){ - $this->current['PEOPLE']= "ou=people"; + if (!isset($this->current['SAMBAVERSION'])){ + $this->current['SAMBAVERSION']= 3; } - if (!isset($this->current['GROUPS'])){ + if (!isset($this->current['USERRDN'])){ + $this->current['USERRDN']= "ou=people"; + } + if (!isset($this->current['GROUPRDN'])){ $this->current['GROUPS']= "ou=groups"; } if (isset($this->current['INITIAL_BASE'])){ - session::set('CurrentMainBase',$this->current['INITIAL_BASE']); + session::global_set('CurrentMainBase',$this->current['INITIAL_BASE']); } /* Remove possibly added ',' from end of group and people ou */ - $this->current['GROUPS'] = preg_replace("/,*$/","",$this->current['GROUPS']); - $this->current['PEOPLE'] = preg_replace("/,*$/","",$this->current['PEOPLE']); + $this->current['GROUPS'] = preg_replace("/,*$/","",$this->current['GROUPRDN']); + $this->current['USERRDN'] = preg_replace("/,*$/","",$this->current['USERRDN']); - if (!isset($this->current['WINSTATIONS'])){ - $this->current['WINSTATIONS']= "ou=winstations,ou=systems"; - } - if (!isset($this->current['HASH'])){ - $this->current['HASH']= "crypt"; + if (!isset($this->current['SAMBAMACHINEACCOUNTRDN'])){ + $this->current['SAMBAMACHINEACCOUNTRDN']= "ou=winstations,ou=systems"; } - if (!isset($this->current['DNMODE'])){ - $this->current['DNMODE']= "cn"; + if (!isset($this->current['ACCOUNTPRIMARYATTRIBUTE'])){ + $this->current['ACCOUNTPRIMARYATTRIBUTE']= "cn"; } if (!isset($this->current['MINID'])){ $this->current['MINID']= 100; } - if (!isset($this->current['SIZELIMIT'])){ - $this->current['SIZELIMIT']= 200; + if (!isset($this->current['LDAPSIZELIMIT'])){ + $this->current['LDAPSIZELIMIT']= 200; } if (!isset($this->current['SIZEINGORE'])){ - $this->current['SIZEIGNORE']= TRUE; + $this->current['LDAPSIZEIGNORE']= TRUE; } else { - if (preg_match("/true/i", $this->current['SIZEIGNORE'])){ - $this->current['SIZEIGNORE']= TRUE; + if (preg_match("/true/i", $this->current['LDAPSIZEIGNORE'])){ + $this->current['LDAPSIZEIGNORE']= TRUE; } else { - $this->current['SIZEIGNORE']= FALSE; + $this->current['LDAPSIZEIGNORE']= FALSE; } } @@ -332,8 +338,8 @@ class config { $bases= array(); $servers= array(); foreach ($this->current['REFERRAL'] as $ref){ - $server= preg_replace('%^(.*)/[^/]+$%', '\\1', $ref['URL']); - $base= preg_replace('%^.*/([^/]+)$%', '\\1', $ref['URL']); + $server= preg_replace('%^(.*)/[^/]+$%', '\\1', $ref['URI']); + $base= preg_replace('%^.*/([^/]+)$%', '\\1', $ref['URI']); $bases[$base]= strlen($base); $servers[$base]= $server; } @@ -355,11 +361,11 @@ class config { $this->current['BASE']= @LDAP::convert($this->current['BASE']); /* Parse LDAP referral informations */ - if (!isset($this->current['ADMIN']) || !isset($this->current['PASSWORD'])){ + if (!isset($this->current['ADMINDN']) || !isset($this->current['ADMINPASSWORD'])){ $url= $this->current['SERVER']; $referral= $this->current['REFERRAL'][$url]; - $this->current['ADMIN']= $referral['ADMIN']; - $this->current['PASSWORD']= $referral['PASSWORD']; + $this->current['ADMINDN']= $referral['ADMINDN']; + $this->current['ADMINPASSWORD']= $referral['ADMINPASSWORD']; } /* Load server informations */ @@ -376,18 +382,28 @@ class config { /* Fill imap servers */ $ldap= $this->get_ldap_link(); $ldap->cd ($this->current['BASE']); + + /* Search mailMethod konfiguration in main section too + */ + $this->current['MAILMETHOD'] = $this->get_cfg_value("mailMethod",""); if (!isset($this->current['MAILMETHOD'])){ $this->current['MAILMETHOD']= ""; } if ($this->current['MAILMETHOD'] == ""){ $ldap->search ("(objectClass=goMailServer)", array('cn')); $this->data['SERVERS']['IMAP']= array(); - error_reporting(0); while ($attrs= $ldap->fetch()){ $name= $attrs['cn'][0]; - $this->data['SERVERS']['IMAP'][$name]= $name; + $this->data['SERVERS']['IMAP'][$name]= + array( + "server_dn" => $attrs['dn'], + "connect" => "", + "admin" => "", + "password" => "", + "sieve_server"=> "", + "sieve_option"=> "", + "sieve_port" => ""); } - error_reporting(E_ALL); } else { $ldap->search ("(&(objectClass=goImapServer)(goImapSieveServer=*))", array('goImapName', 'goImapConnect', 'goImapAdmin', 'goImapPassword', @@ -514,8 +530,12 @@ class config { $ldap->search ("(objectClass=goLogDBServer)"); if ($ldap->count()){ $attrs= $ldap->fetch(); + if(!isset($attrs['gosaLogDB'][0])){ + $attrs['gosaLogDB'][0] = "gomon"; + } $this->data['SERVERS']['LOG']= array( 'SERVER' => $attrs['cn'][0], 'LOGIN' => $attrs['goLogAdmin'][0], + 'DB' => $attrs['gosaLogDB'][0], 'PASSWORD' => $attrs['goLogPassword'][0]); } @@ -537,18 +557,23 @@ class config { /* Get NFS server lists */ $tmp= array("default"); + $tmp2= array("default"); $ldap->cd ($this->current['BASE']); $ldap->search ("(&(objectClass=goShareServer)(goExportEntry=*))"); while ($attrs= $ldap->fetch()){ for ($i= 0; $i<$attrs["goExportEntry"]["count"]; $i++){ - if(!preg_match('/^[^|]+\|[^|]+\|NFS\|.*$/', $attrs["goExportEntry"][$i])){ - continue; - } - $path= preg_replace ("/^[^|]+\|[^|]+\|[^|]+\|[^|]+\|([^|]+).*$/", '\1', $attrs["goExportEntry"][$i]); - $tmp[]= $attrs["cn"][0].":$path"; + if(preg_match('/^[^|]+\|[^|]+\|NFS\|.*$/', $attrs["goExportEntry"][$i])){ + $path= preg_replace ("/^[^|]+\|[^|]+\|[^|]+\|[^|]+\|([^|]+).*$/", '\1', $attrs["goExportEntry"][$i]); + $tmp[]= $attrs["cn"][0].":$path"; + } + if(preg_match('/^[^|]+\|[^|]+\|NBD\|.*$/', $attrs["goExportEntry"][$i])){ + $path= preg_replace ("/^[^|]+\|[^|]+\|[^|]+\|[^|]+\|([^|]+).*$/", '\1', $attrs["goExportEntry"][$i]); + $tmp2[]= $attrs["cn"][0].":$path"; + } } } $this->data['SERVERS']['NFS']= $tmp; + $this->data['SERVERS']['NBD']= $tmp2; /* Load Terminalservers */ $ldap->cd ($this->current['BASE']); @@ -567,16 +592,13 @@ class config { } } - /* Ldap Server */ + /* Ldap Server + */ $this->data['SERVERS']['LDAP']= array(); $ldap->cd ($this->current['BASE']); - $ldap->search ("(objectClass=goLdapServer)"); + $ldap->search ("(&(objectClass=goLdapServer)(goLdapBase=*))"); while ($attrs= $ldap->fetch()){ - if (isset($attrs["goLdapBase"])){ - for ($i= 0; $i<$attrs["goLdapBase"]["count"]; $i++){ - $this->data['SERVERS']['LDAP'][]= $attrs["cn"][0].":".$attrs["goLdapBase"][$i]; - } - } + $this->data['SERVERS']['LDAP'][$attrs['dn']] = $attrs; } /* Get misc server lists */ @@ -610,13 +632,12 @@ class config { /* If no samba servers are found, look for configured sid/ridbase */ if (count($this->data['SERVERS']['SAMBA']) == 0){ - if (!isset($this->current["SID"]) || !isset($this->current["RIDBASE"])){ - msg_dialog::display(_("Configuration error"), _("SID and/or RIDBASE missing in the configuration!"), FATAL_ERROR_DIALOG); - exit(); + if (!isset($this->current["SAMBASID"]) || !isset($this->current["SAMBARIDBASE"])){ + msg_dialog::display(_("Configuration error"), _("sambaSID and/or sambaRidBase missing in the configuration!"), ERROR_DIALOG); } else { $this->data['SERVERS']['SAMBA']['DEFAULT']= array( - "SID" => $this->current["SID"], - "RIDBASE" => $this->current["RIDBASE"]); + "SID" => $this->current["SAMBASID"], + "RIDBASE" => $this->current["SAMBARIDBASE"]); } } } @@ -704,6 +725,8 @@ class config { { global $config; $base = $config->current['BASE']; + $qbase = preg_quote($base, '/'); + $utags= isset($config->current['HONOURUNITTAGS']) && preg_match('/true/i', $config->current['HONOURUNITTAGS']); $arr = array(); $ui= get_userinfo(); @@ -714,16 +737,17 @@ class config { foreach ($this->departments as $key => $val){ /* When using strict_units, filter non relevant parts */ - if (isset($config->current['STRICT_UNITS']) && preg_match('/true/i', $config->current['STRICT_UNITS'])){ - if ($ui->gosaUnitTag != "" && isset($this->tdepartments[$val]) && + if ($utags){ + if ($ui->gosaUnitTag != '' && isset($this->tdepartments[$val]) && $this->tdepartments[$val] != $ui->gosaUnitTag){ -# continue; + + #TODO: link with strict* + #continue; } } - /* Split dn into single department pieces. - */ - $elements = array_reverse(split(",",preg_replace("/".normalizePreg($base)."$/","",$val))); + /* Split dn into single department pieces */ + $elements = array_reverse(split(',',preg_replace("/$qbase$/",'',$val))); /* Add last ou element of current dn to our array */ $last = &$arr; @@ -733,15 +757,14 @@ class config { if(empty($ele)) continue; /* Extract department name */ - $elestr = trim(preg_replace("/^[^=]*+=/","", $ele),","); - $nameA = trim(preg_replace("/=.*$/","", $ele),","); - if($nameA != "ou"){ - $nameA = " (".$nameA.")"; + $elestr = trim(preg_replace('/^[^=]*+=/','', $ele),','); + $nameA = trim(preg_replace('/=.*$/','', $ele),','); + if($nameA != 'ou'){ + $nameA = " ($nameA)"; }else{ - $nameA = ""; + $nameA = ''; } - /* Add to array */ if($key == (count($elements)-1)){ $last[$elestr.$nameA]['ENTRY'] = $val; @@ -754,14 +777,14 @@ class config { /* Add base entry */ - $ret["/"]["ENTRY"] = $base; - $ret["/"]["SUB"] = $arr; + $ret['/']['ENTRY'] = $base; + $ret['/']['SUB'] = $arr; $this->idepartments= $this->generateDepartmentArray($ret,-1,$max_size); } /* Creates display friendly output from make_idepartments */ - function generateDepartmentArray($arr,$depth = -1,$max_size) + function generateDepartmentArray($arr,$depth = -1,$max_size = 256) { $ret = array(); $depth ++; @@ -777,7 +800,7 @@ class config { } /* Fix name, if it contains a replace tag */ - $name= preg_replace('/\\\\,/', ',', @LDAP::fix($name)); + $name= preg_replace('/\\\\,/', ',', LDAP::fix($name)); /* Check if current name is too long, then cut it */ if(mb_strlen($name, 'UTF-8')> $max_size){ @@ -809,7 +832,7 @@ class config { */ function getShareList($listboxEntry = false) { - $tmp = get_sub_list("(&(objectClass=goShareServer)(goExportEntry=*))","server/goShareServer",get_ou("serverou"), + $tmp = get_sub_list("(&(objectClass=goShareServer)(goExportEntry=*))","server",get_ou("serverRDN"), $this->current['BASE'],array("goExportEntry","cn"), GL_NONE); $return =array(); foreach($tmp as $entry){ @@ -846,11 +869,11 @@ class config { $ui = get_userinfo(); $base = $config->current['BASE']; $res= get_sub_list("(&(objectClass=goShareServer)(goExportEntry=*))", "server", - get_ou("serverou"), $base,array("goExportEntry","cn"),GL_NONE | GL_NO_ACL_CHECK); + get_ou("serverRDN"), $base,array("goExportEntry","cn"),GL_NONE | GL_NO_ACL_CHECK); foreach($res as $entry){ - $acl = $ui->get_permissions($entry['dn'],"server/goShareServer",""); + $acl = $ui->get_permissions($entry['dn'],"server",""); if(isset($entry['goExportEntry']['count'])){ unset($entry['goExportEntry']['count']); } @@ -928,21 +951,38 @@ class config { } + function get_cfg_value($name, $default= "") { + $name= strtoupper($name); + + /* Check if we have a current value for $name */ + if (isset($this->current[$name])){ + return ($this->current[$name]); + } + + /* Check if we have a global value for $name */ + if (isset($this->data["MAIN"][$name])){ + return ($this->data["MAIN"][$name]); + } + + return ($default); + } + + function check_config_version() { /* Skip check, if we've already mentioned the mismatch */ - if(session::is_set("LastChecked") && session::get("LastChecked") == $this->config_version) return; + if(session::global_is_set("LastChecked") && session::global_get("LastChecked") == $this->config_version) return; /* Remember last checked version */ - session::set("LastChecked",$this->config_version); + session::global_set("LastChecked",$this->config_version); $current = md5(file_get_contents(CONFIG_TEMPLATE_DIR."/gosa.conf")); /* Check contributed config version and current config version. */ - if($this->config_version != $current && !empty($this->config_version)){ + if(($this->config_version == "NOT SET") || ($this->config_version != $current && !empty($this->config_version))){ msg_dialog::display(_("Configuration"),_("The configuration file you are using seems to be outdated. Please move the GOsa configuration file away to run the GOsa setup again.")); } } @@ -956,11 +996,72 @@ class config { */ function check_session_lifetime() { - $cfg_lifetime = $this->data['MAIN']['SESSION_LIFETIME']; - $ini_lifetime = ini_get('session.gc_maxlifetime'); - $deb_system = file_exists('/etc/debian_version'); - return(!($deb_system && ($ini_lifetime < $cfg_lifetime))); + if(isset($this->data['MAIN']['SESSIONLIFETIME'])){ + $cfg_lifetime = $this->data['MAIN']['SESSIONLIFETIME']; + $ini_lifetime = ini_get('session.gc_maxlifetime'); + $deb_system = file_exists('/etc/debian_version'); + return(!($deb_system && ($ini_lifetime < $cfg_lifetime))); + }else{ + return(TRUE); + } + } + + /* Returns true if snapshots are enabled, and false if it is disalbed + There will also be some errors psoted, if the configuration failed */ + function snapshotEnabled() + { + if($this->get_cfg_value("enableSnapshots") == "true"){ + + /* Check if the snapshot_base is defined */ + if ($this->get_cfg_value("snapshotBase") == ""){ + + /* Send message if not done already */ + if(!session::is_set("snapshotFailMessageSend")){ + session::set("snapshotFailMessageSend",TRUE); + msg_dialog::display(_("Configuration error"), + sprintf(_("The snapshot functionality is enabled, but the required variable '%s' is not set."), + "snapshotBase"), ERROR_DIALOG); + } + return(FALSE); + } + + /* Check if the snapshot_base is defined */ + if (!is_callable("gzcompress")){ + + /* Send message if not done already */ + if(!session::is_set("snapshotFailMessageSend")){ + session::set("snapshotFailMessageSend",TRUE); + msg_dialog::display(_("Configuration error"), + sprintf(_("The snapshot functionality is enabled, but the required compression module is missing. Please install '%s'."),"php5-zip / php5-gzip"), ERROR_DIALOG); + } + return(FALSE); + } + + /* check if there are special server configurations for snapshots */ + if ($this->get_cfg_value("snapshotURI") != ""){ + + /* check if all required vars are available to create a new ldap connection */ + $missing = ""; + foreach(array("snapshotURI","snapshotAdminDn","snapshotAdminPassword","snapshotBase") as $var){ + if($this->get_cfg_value($var) == ""){ + $missing .= $var." "; + + /* Send message if not done already */ + if(!session::is_set("snapshotFailMessageSend")){ + session::set("snapshotFailMessageSend",TRUE); + msg_dialog::display(_("Configuration error"), + sprintf(_("The snapshot functionality is enabled, but the required variable '%s' is not set."), + $missing), ERROR_DIALOG); + } + return(FALSE); + } + } + } + return(TRUE); + } + return(FALSE); } + } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: