X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Finclude%2Fclass_config.inc;h=481da05236d2f7d39cdca2c3e8db040025fd97ab;hb=06cc53394cf695b3bc663073e526d7d94e4bb2d6;hp=8001926bbbdfcf5221470710755c41de9d72c83f;hpb=60df3e95fad489695341edbdf566f384a997303d;p=gosa.git diff --git a/gosa-core/include/class_config.inc b/gosa-core/include/class_config.inc index 8001926bb..481da0523 100644 --- a/gosa-core/include/class_config.inc +++ b/gosa-core/include/class_config.inc @@ -70,6 +70,22 @@ class config { function check_and_reload() { + global $ui; + + /* 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")){ + $tmp = stat("../include/class_location.inc"); + if($tmp['mtime'] != session::get("class_location.inc:timestamp")){ + session::un_set("plist"); + } + } + $tmp = stat("../include/class_location.inc"); + session::set("class_location.inc:timestamp",$tmp['mtime']); + + + if($this->filename != "" && filemtime($this->filename) != $this->last_modified){ $this->config_found= FALSE; @@ -121,8 +137,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']; } } @@ -160,11 +176,13 @@ class config { case 'LOCATION': if ($this->tags[$this->level-2] == 'MAIN'){ $name= $attrs['NAME']; + $name = preg_replace("/[<>\"']/","",$name); + $attrs['NAME'] = $name; $this->currentLocation= $name; /* Add location elements */ - $this->data['LOCATIONS'][$name]= $attrs; - } + $this->data['LOCATIONS'][$name]= $attrs; + } break; /* Handle referral tags */ @@ -268,8 +286,12 @@ class config { 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['USERRDN'])){ + $this->current['USERRDN']= "ou=people"; } if (!isset($this->current['GROUPS'])){ $this->current['GROUPS']= "ou=groups"; @@ -281,7 +303,7 @@ class config { /* 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['USERRDN'] = preg_replace("/,*$/","",$this->current['USERRDN']); if (!isset($this->current['WINSTATIONS'])){ $this->current['WINSTATIONS']= "ou=winstations,ou=systems"; @@ -289,8 +311,8 @@ class config { if (!isset($this->current['HASH'])){ $this->current['HASH']= "crypt"; } - 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; @@ -363,12 +385,18 @@ class config { 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', @@ -397,6 +425,7 @@ class config { $this->data['SERVERS']['IMAP'][$imap_server]= array( + "server_dn" => $attrs['dn'], "connect" => $imap_connect, "admin" => $imap_admin, "password" => $pwd, @@ -494,8 +523,12 @@ class config { $ldap->search ("(objectClass=goLogDBServer)"); if ($ldap->count()){ $attrs= $ldap->fetch(); + if(!isset($attrs['goLogDB'][0])){ + $attrs['goLogDB'][0] = "gomon"; + } $this->data['SERVERS']['LOG']= array( 'SERVER' => $attrs['cn'][0], 'LOGIN' => $attrs['goLogAdmin'][0], + 'DB' => $attrs['goLogDB'][0], 'PASSWORD' => $attrs['goLogPassword'][0]); } @@ -613,11 +646,41 @@ class config { $result['/']= $this->current['BASE']; $this->tdepartments= array(); + /* Get all department types from department Management, to be able detect the department type. + -It is possible that differnty department types have the same name, + in this case we have to mark the department name to be able to differentiate. + (e.g l=Name or o=Name) + */ + $types = departmentManagement::get_support_departments(); + + /* Create a list of attributes to fetch */ + $ldap_values = array("objectClass","gosaUnitTag"); + $filter = ""; + foreach($types as $type){ + $ldap_values[] = $type['ATTR']; + $filter .= "(objectClass=".$type['OC'].")"; + } + $filter = "(&(objectClass=gosaDepartment)(|".$filter."))"; + /* Get list of department objects */ $ldap= $this->get_ldap_link(); $ldap->cd ($this->current['BASE']); - $ldap->search ("(objectClass=gosaDepartment)", array("ou", "objectClass", "gosaUnitTag")); + $ldap->search ($filter, $ldap_values); while ($attrs= $ldap->fetch()){ + + /* Detect department type */ + $type_data = array(); + foreach($types as $t => $data){ + if(in_array($data['OC'],$attrs['objectClass'])){ + $type_data = $data; + break; + } + } + + /* Unknown department type -> skip + */ + if(!count($type_data)) continue; + $dn= $ldap->getDN(); $this->tdepartments[$dn]= ""; @@ -637,9 +700,11 @@ class config { continue; } + $c_dn = convert_department_dn($dn)." (".$type_data['ATTR'].")"; + /* Only assign non-root departments */ if ($dn != $result['/']){ - $result[convert_department_dn($dn)]= $dn; + $result[$c_dn]= $dn; } } @@ -669,49 +734,48 @@ class config { } } - /* remove base from dn */ - $val2 = str_replace($base,"",$val); - - /* Get every single ou */ - $str = preg_replace("/ou=/","|ou=",$val2); - $elements = array_reverse(split("\|",$str)); - - /* Save last array position */ - $last = &$arr; - - /* Get array depth */ - $cnt = count($elements); + /* Split dn into single department pieces. + */ + $elements = array_reverse(split(",",preg_replace("/".normalizePreg($base)."$/","",$val))); /* Add last ou element of current dn to our array */ + $last = &$arr; foreach($elements as $key => $ele){ - /* skip enpty */ + /* skip empty */ if(empty($ele)) continue; /* Extract department name */ - $elestr = preg_replace("/^ou=/","", $ele); - $elestr = preg_replace("/,$/","",$elestr); + $elestr = trim(preg_replace("/^[^=]*+=/","", $ele),","); + $nameA = trim(preg_replace("/=.*$/","", $ele),","); + if($nameA != "ou"){ + $nameA = " (".$nameA.")"; + }else{ + $nameA = ""; + } + /* Add to array */ - if($key == ($cnt-2)){ - $last[$elestr]['ENTRY'] = $val; + if($key == (count($elements)-1)){ + $last[$elestr.$nameA]['ENTRY'] = $val; } /* Set next array appending position */ - $last = &$last[$elestr]['SUB']; + $last = &$last[$elestr.$nameA]['SUB']; } } + /* Add base entry */ $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) + { $ret = array(); $depth ++; @@ -726,7 +790,7 @@ class config { } /* Fix name, if it contains a replace tag */ - $name= @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){ @@ -792,18 +856,27 @@ class config { { global $config; $return = array(); + $ui = get_userinfo(); $base = $config->current['BASE']; $res= get_sub_list("(&(objectClass=goShareServer)(goExportEntry=*))", "server", - get_ou("serverou"), $base,array("goExportEntry","cn"),GL_NONE); + get_ou("serverou"), $base,array("goExportEntry","cn"),GL_NONE | GL_NO_ACL_CHECK); foreach($res as $entry){ + + $acl = $ui->get_permissions($entry['dn'],"server",""); if(isset($entry['goExportEntry']['count'])){ unset($entry['goExportEntry']['count']); } foreach($entry['goExportEntry'] as $share){ $a_share = split("\|",$share); $sharename = $a_share[0]; - $return[$entry['cn'][0]."|".$sharename] = $entry['cn'][0]." [".$sharename."]"; + $data= array(); + $data['NAME'] = $sharename; + $data['ACL'] = $acl; + $data['SERVER'] = $entry['cn']['0']; + $data['SHARE'] = $sharename; + $data['DISPLAY']= $entry['cn'][0]." [".$sharename."]"; + $return[$entry['cn'][0]."|".$sharename] = $data; } } return($return); @@ -868,11 +941,25 @@ class config { } - function check_config_version() - { + function get_cfg_value($name, $default= "") { + $name= strtoupper($name); - $current = get_gosa_version(); + /* 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; @@ -881,22 +968,12 @@ class config { */ session::set("LastChecked",$this->config_version); - if(preg_match("/\(Rev[^\)]*\)/",$current)){ + $current = md5(file_get_contents(CONFIG_TEMPLATE_DIR."/gosa.conf")); - /* Development Version - */ - $c_v = preg_replace("/^.*\(Rev ([0-9]*)\).*$/","\\1",$current); - $g_v = preg_replace("/^.*\(Rev ([0-9]*)\).*$/","\\1",$this->config_version); - if($c_v != $g_v){ -# 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.")); - } - }else{ - - /* Tagged version - */ - if($this->config_version != $current){ - 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.")); - } + /* Check contributed config version and current config version. + */ + if($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.")); } } @@ -909,7 +986,7 @@ class config { */ function check_session_lifetime() { - $cfg_lifetime = $this->data['MAIN']['SESSION_LIFETIME']; + $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)));