X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=include%2Fclass_config.inc;h=8e9fb9fabedc754e7f4d94d632a6e890075e8e3b;hb=a587a3d7106e6636279f232eb5d2b3f25bb64a41;hp=6f649d70319688f29af76640cc4623652942b00d;hpb=3bde4a3fffba4099bd30a5878fea6ac238379acb;p=gosa.git diff --git a/include/class_config.inc b/include/class_config.inc index 6f649d703..8e9fb9fab 100644 --- a/include/class_config.inc +++ b/include/class_config.inc @@ -45,6 +45,8 @@ class config { /* Keep a copy of the current deparment list */ var $departments= array(); var $idepartments= array(); + var $adepartments= array(); + var $tdepartments= array(); function config($filename, $basedir= "") { @@ -66,7 +68,8 @@ class config { $xmldata= fread($fh, 100000); fclose($fh); if(!xml_parse($this->parser, chop($xmldata))){ - print_red(sprintf(_("XML error in gosa.conf: %s at line %d"), + print_red(sprintf(_("XML error in %s: %s at line %d"), + CONFIG_FILE, xml_error_string(xml_get_error_code($this->parser)), xml_get_current_line_number($this->parser))); echo $_SESSION['errors']; @@ -90,6 +93,15 @@ class config { return; } + /* yes/no to true/false and upper case TRUE to true and so on*/ + foreach($attrs as $name => $value){ + if(preg_match("/^(true|yes)$/i",$value)){ + $attrs[$name] = "true"; + }elseif(preg_match("/^(false|no)$/i",$value)){ + $attrs[$name] = "false"; + } + } + /* Look through attributes */ switch ($this->tags[$this->level-1]){ @@ -192,9 +204,11 @@ class config { /* Check for connection */ if (is_null($this->ldap) || (is_int($this->ldap) && $this->ldap == 0)){ + $smarty= get_smarty(); print_red (_("Can't bind to LDAP. Please contact the system administrator.")); - echo $_SESSION['errors']; - exit; + $smarty->display (get_template_path('headers.tpl')); + echo ''.$_SESSION['errors'].''; + exit(); } if (!isset($_SESSION['size_limit'])){ @@ -227,6 +241,15 @@ class config { if (!isset($this->current['GROUPS'])){ $this->current['GROUPS']= "ou=groups"; } + + if (isset($this->current['INITIAL_BASE'])){ + $_SESSION['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']); + if (!isset($this->current['WINSTATIONS'])){ $this->current['WINSTATIONS']= "ou=winstations,ou=systems"; } @@ -287,6 +310,17 @@ class config { $this->current['PASSWORD']= $referral['PASSWORD']; } + /* Possibly load kerberos style */ + if (isset($this->current['KRBSASL'])){ + if (preg_match('/^(yes|true)$/i', $this->current['KRBSASL'])){ + $this->current['KRBSASL']= "sasl"; + } else { + $this->current['KRBSASL']= "kerberos"; + } + } else { + $this->current['KRBSASL']= "kerberos"; + } + /* Load server informations */ $this->load_servers(); } @@ -347,30 +381,53 @@ class config { /* Get asterisk servers */ $ldap->cd ($this->current['BASE']); $ldap->search ("(objectClass=goFonServer)"); + $this->data['SERVERS']['FON']= array(); if ($ldap->count()){ - $attrs= $ldap->fetch(); - $this->data['SERVERS']['FON']= array( - 'SERVER' => $attrs['cn'][0], - 'LOGIN' => $attrs['goFonAdmin'][0], - 'PASSWORD' => $attrs['goFonPassword'][0], - 'DB' => "gophone", - 'SIP_TABLE' => "sip_users", - 'EXT_TABLE' => "extensions", - 'VOICE_TABLE' => "voicemail_users", - 'QUEUE_TABLE' => "queues", - 'QUEUE_MEMBER_TABLE' => "queue_members"); + while ($attrs= $ldap->fetch()){ + + /* Add 0 entry for development */ + if(count($this->data['SERVERS']['FON']) == 0){ + $this->data['SERVERS']['FON'][0]= array( + 'DN' => $attrs['dn'], + 'SERVER' => $attrs['cn'][0], + 'LOGIN' => $attrs['goFonAdmin'][0], + 'PASSWORD' => $attrs['goFonPassword'][0], + 'DB' => "gophone", + 'SIP_TABLE' => "sip_users", + 'EXT_TABLE' => "extensions", + 'VOICE_TABLE' => "voicemail_users", + 'QUEUE_TABLE' => "queues", + 'QUEUE_MEMBER_TABLE' => "queue_members"); + } + + /* Add entry with 'dn' as index */ + $this->data['SERVERS']['FON'][$attrs['dn']]= array( + 'DN' => $attrs['dn'], + 'SERVER' => $attrs['cn'][0], + 'LOGIN' => $attrs['goFonAdmin'][0], + 'PASSWORD' => $attrs['goFonPassword'][0], + 'DB' => "gophone", + 'SIP_TABLE' => "sip_users", + 'EXT_TABLE' => "extensions", + 'VOICE_TABLE' => "voicemail_users", + 'QUEUE_TABLE' => "queues", + 'QUEUE_MEMBER_TABLE' => "queue_members"); + } } - /* Get asterisk servers */ + /* Get glpi servers */ $ldap->cd ($this->current['BASE']); - $ldap->search ("(objectClass=goGlpiServer)"); + $ldap->search ("(&(objectClass=goGlpiServer)(cn=*)(goGlpiAdmin=*)(goGlpiDatabase=*))",array("cn","goGlpiPassword","goGlpiAdmin","goGlpiDatabase")); if ($ldap->count()){ $attrs= $ldap->fetch(); - $this->data['SERVERS']['GLPI']= array( - 'SERVER' => $attrs['cn'][0], - 'LOGIN' => $attrs['goGlpiAdmin'][0], - 'PASSWORD' => $attrs['goGlpiPassword'][0], - 'DB' => $attrs['goGlpiDatabase'][0]); + if(!isset($attrs['goGlpiPassword'])){ + $attrs['goGlpiPassword'][0] =""; + } + $this->data['SERVERS']['GLPI']= array( + 'SERVER' => $attrs['cn'][0], + 'LOGIN' => $attrs['goGlpiAdmin'][0], + 'PASSWORD' => $attrs['goGlpiPassword'][0], + 'DB' => $attrs['goGlpiDatabase'][0]); } /* Get logdb server */ $ldap->cd ($this->current['BASE']); @@ -411,7 +468,7 @@ class config { } /* Ldap Server */ - $this->data['SERVERS']['LDAP']= array("default"); + $this->data['SERVERS']['LDAP']= array(); $ldap->cd ($this->current['BASE']); $ldap->search ("(objectClass=goLdapServer)"); while ($attrs= $ldap->fetch()){ @@ -462,18 +519,72 @@ class config { } } + + function get_departments($ignore_dn= "") + { + global $config; + + /* Initialize result hash */ + $result= array(); + $administrative= array(); + $result['/']= $this->current['BASE']; + $this->tdepartments= array(); + + /* Get list of department objects */ + $ldap= $this->get_ldap_link(); + $ldap->cd ($this->current['BASE']); + $ldap->search ("(objectClass=gosaDepartment)", array("ou", "objectClass", "gosaUnitTag")); + while ($attrs= $ldap->fetch()){ + $dn= $ldap->getDN(); + $this->tdepartments[$dn]= ""; + + /* Save administrative departments */ + if (in_array_ics("gosaAdministrativeUnit", $attrs['objectClass']) && + isset($attrs['gosaUnitTag'][0])){ + $administrative[$dn]= $attrs['gosaUnitTag'][0]; + $this->tdepartments[$dn]= $attrs['gosaUnitTag'][0]; + } + + if (in_array_ics("gosaAdministrativeUnitTag", $attrs['objectClass']) && + isset($attrs['gosaUnitTag'][0])){ + $this->tdepartments[$dn]= $attrs['gosaUnitTag'][0]; + } + + if ($dn == $ignore_dn){ + continue; + } + + /* Only assign non-root departments */ + if ($dn != $result['/']){ + $result[convert_department_dn($dn)]= $dn; + } + } + + $this->adepartments= $administrative; + $this->departments= $result; + } + + function make_idepartments($max_size= 28) { global $config; $base = $config->current['BASE']; - $arr = array(); - + $arr= array(); + $ui= get_userinfo(); $this->idepartments= array(); /* Create multidimensional array, with all departments. */ 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]) && + $this->tdepartments[$val] != $ui->gosaUnitTag){ + continue; + } + } + /* remove base from dn */ $val2 = str_replace($base,"",$val); @@ -520,7 +631,8 @@ class config { $ret = array(); $depth ++; - /* Walk through array */ + /* Walk through array */ + ksort($arr); foreach($arr as $name => $entries){ /* If this department is the last in the current tree position @@ -541,7 +653,7 @@ class config { if(isset($entries['ENTRY'])){ $a = ""; for($i = 0 ; $i < $depth ; $i ++){ - $a.=" "; + $a.="."; } $ret[$entries['ENTRY']]=$a." ".$name; } @@ -563,24 +675,35 @@ class config { function getShareList($listboxEntry = false) { $ldap= $this->get_ldap_link(); - $a_res = $ldap->search("(objectClass=goShareServer)",array("goExportEntry","cn")); + + /* Set tag attribute if we've tagging activated */ + $tag= ""; + $ui= get_userinfo(); + if ($ui->gosaUnitTag != "" && isset($this->current['STRICT_UNITS']) && + preg_match('/TRUE/i', $this->current['STRICT_UNITS'])){ + $tag= "(gosaUnitTag=".$ui->gosaUnitTag.")"; + } + + $a_res = $ldap->search("(&(objectClass=goShareServer)$tag(objectClass=goServer))",array("goExportEntry","cn")); $return= array(); while($entry = $ldap->fetch($a_res)){ if(isset($entry['goExportEntry']['count'])){ unset($entry['goExportEntry']['count']); } - foreach($entry['goExportEntry'] as $export){ - $shareAttrs = split("\|",$export); - if($listboxEntry) { - $return[$shareAttrs[0]."|".$entry['cn'][0]] = $shareAttrs[0]." - ".$entry['cn'][0]; - }else{ - $return[$shareAttrs[0]."|".$entry['cn'][0]]['server'] = $entry['cn'][0]; - $return[$shareAttrs[0]."|".$entry['cn'][0]]['name'] = $shareAttrs[0]; - $return[$shareAttrs[0]."|".$entry['cn'][0]]['description'] = $shareAttrs[1]; - $return[$shareAttrs[0]."|".$entry['cn'][0]]['type'] = $shareAttrs[2]; - $return[$shareAttrs[0]."|".$entry['cn'][0]]['charset'] = $shareAttrs[3]; - $return[$shareAttrs[0]."|".$entry['cn'][0]]['path'] = $shareAttrs[4]; - $return[$shareAttrs[0]."|".$entry['cn'][0]]['option'] = $shareAttrs[5]; + if(isset($entry['goExportEntry'])){ + foreach($entry['goExportEntry'] as $export){ + $shareAttrs = split("\|",$export); + if($listboxEntry) { + $return[$shareAttrs[0]."|".$entry['cn'][0]] = $shareAttrs[0]." - ".$entry['cn'][0]; + }else{ + $return[$shareAttrs[0]."|".$entry['cn'][0]]['server'] = $entry['cn'][0]; + $return[$shareAttrs[0]."|".$entry['cn'][0]]['name'] = $shareAttrs[0]; + $return[$shareAttrs[0]."|".$entry['cn'][0]]['description'] = $shareAttrs[1]; + $return[$shareAttrs[0]."|".$entry['cn'][0]]['type'] = $shareAttrs[2]; + $return[$shareAttrs[0]."|".$entry['cn'][0]]['charset'] = $shareAttrs[3]; + $return[$shareAttrs[0]."|".$entry['cn'][0]]['path'] = $shareAttrs[4]; + $return[$shareAttrs[0]."|".$entry['cn'][0]]['option'] = $shareAttrs[5]; + } } } } @@ -590,16 +713,21 @@ class config { /* This function returns all available ShareServer */ function getShareServerList() { - $ldap= $this->get_ldap_link(); - $a_res = $ldap->search("(objectClass=goShareServer)",array("goExportEntry","cn")); - $return= array(); - while($entry = $ldap->fetch($a_res)){ - unset($entry['goExportEntry']['count']); + global $config; + $return = array(); + $ui = get_userinfo(); + $base = $config->current['BASE']; + $res = get_list("(&(objectClass=goShareServer)(goExportEntry=*))",$ui->subtreeACL,$base,array("goExportEntry","cn"),GL_SUBSEARCH); + foreach($res as $entry){ + 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."]"; } + } return($return); }