X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=include%2Fclass_config.inc;h=fa068e7906351a3059c09d4fbdb991d572ec2a8b;hb=c71ce4ba7b5e4492c62bf2f1af27e202f28ed299;hp=ef1c93c669e9b47ec270b12b36545c872f95b1e9;hpb=ec2413db23159069935684bc98a051c9aa0f7478;p=gosa.git diff --git a/include/class_config.inc b/include/class_config.inc index ef1c93c66..fa068e790 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= "") { @@ -90,9 +92,19 @@ 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]){ + /* Handle tab section */ case 'TAB': $name= $this->tags[$this->level-2]; @@ -112,8 +124,8 @@ class config { $this->currentLocation= $name; /* Add location elements */ - $this->data['LOCATIONS'][$name]= $attrs; - } + $this->data['LOCATIONS'][$name]= $attrs; + } break; /* Handle referral tags */ @@ -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'])){ @@ -363,9 +377,12 @@ class config { /* Get asterisk 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(); + if(!isset($attrs['goGlpiPassword'])){ + $attrs['goGlpiPassword'][0] =""; + } $this->data['SERVERS']['GLPI']= array( 'SERVER' => $attrs['cn'][0], 'LOGIN' => $attrs['goGlpiAdmin'][0], @@ -388,13 +405,15 @@ class config { $ldap->search ("(&(objectClass=goShareServer)(goExportEntry=*))"); while ($attrs= $ldap->fetch()){ for ($i= 0; $i<$attrs["goExportEntry"]["count"]; $i++){ - $path= preg_replace ("/\s.*$/", "", $attrs["goExportEntry"][$i]); + if(!preg_match('/^[^|]+\|[^|]+\|NFS\|.*$/', $attrs["goExportEntry"][$i])){ + continue; + } + $path= preg_replace ("/^[^|]+\|[^|]+\|[^|]+\|[^|]+\|([^|]+).*$/", '\1', $attrs["goExportEntry"][$i]); $tmp[]= $attrs["cn"][0].":$path"; } } $this->data['SERVERS']['NFS']= $tmp; - /* Load Terminalservers */ $ldap->cd ($this->current['BASE']); $ldap->search ("(objectClass=goTerminalServer)"); @@ -411,7 +430,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()){ @@ -469,14 +488,30 @@ class 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")); + $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; } @@ -487,6 +522,7 @@ class config { } } + $this->adepartments= $administrative; $this->departments= $result; } @@ -497,12 +533,21 @@ class config { $base = $config->current['BASE']; $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); @@ -592,46 +637,57 @@ class config { function getShareList($listboxEntry = false) { $ldap= $this->get_ldap_link(); - $a_res = $ldap->search("(objectClass=goShareServer)",array("goExportEntry","cn")); - $return= array(); - while($entry = $ldap->fetch($a_res)){ - if(isset($entry['goExportEntry']['count'])){ - unset($entry['goExportEntry']['count']); - } - 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]; + $base = $this->current['BASE']; + $res= get_list("(&(objectClass=goShareServer)(goExportEntry=*))","server",$base,array("goExportEntry","cn"),GL_SUBSEARCH); + $return = array(); + + foreach($res as $entry){ + if(obj_is_readable($entry['dn'], "server/goShareServer","goExportEntry")){ + + if(isset($entry['goExportEntry']['count'])){ + unset($entry['goExportEntry']['count']); + } + 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]; + } } } - } + } } + return($return); } /* This function returns all available ShareServer */ function getShareServerList() { - $ldap= $this->get_ldap_link(); - $a_res = $ldap->search("(&(objectClass=goShareServer)(goExportEntry=*))",array("goExportEntry","cn")); - $return= array(); - while($entry = $ldap->fetch($a_res)){ - 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."]"; + global $config; + $return = array(); + $ui = get_userinfo(); + $base = $config->current['BASE']; + + $res= get_list("(&(objectClass=goShareServer)(goExportEntry=*))", "server", $base,array("goExportEntry","cn"),GL_SUBSEARCH); + foreach($res as $entry){ + if(obj_is_readable($entry['dn'], "server/goShareServer","goExportEntry")){ + 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);