X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;ds=sidebyside;f=include%2Fclass_config.inc;h=270f1e2565c7f5484e10308ce47d45a1a1805a40;hb=0b8a059bcd0e78a5c74acedcc5880f841a385384;hp=fa1823503c2786c6d0adaa39f61a5d2d93cf2b63;hpb=cce4905353f4e5af7339773984598442ea5d3dab;p=gosa.git diff --git a/include/class_config.inc b/include/class_config.inc index fa1823503..270f1e256 100644 --- a/include/class_config.inc +++ b/include/class_config.inc @@ -38,7 +38,7 @@ class config { /* Configuration data */ var $data= array( 'TABS' => array(), 'LOCATIONS' => array(), 'SERVERS' => array(), - 'MAIN' => array( 'LANGUAGES' => array(), 'FAXFORMATS' => array() ), + 'MAIN' => array(), 'MENU' => array(), 'SERVICE' => array()); var $basedir= ""; @@ -46,6 +46,7 @@ class config { var $departments= array(); var $idepartments= array(); var $adepartments= array(); + var $tdepartments= array(); function config($filename, $basedir= "") { @@ -67,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']; @@ -91,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]){ @@ -132,23 +143,6 @@ class config { } break; - /* Handle language */ - case 'LANGUAGE': - if ($this->tags[$this->level-2] == 'MAIN'){ - /* Add languages */ - $this->data['MAIN']['LANGUAGES'][$attrs['NAME']]= - $attrs['TAG']; - } - break; - - /* Handle faxformat */ - case 'FAXFORMAT': - if ($this->tags[$this->level-2] == 'MAIN'){ - /* Add fax formats */ - $this->data['MAIN']['FAXFORMATS'][]= $attrs['TYPE']; - } - break; - /* Load main parameters */ case 'MAIN': $this->data['MAIN']= array_merge ($this->data['MAIN'], $attrs); @@ -185,37 +179,49 @@ class config { $this->level--; } - function get_ldap_link($sizelimit= FALSE) - { - /* Build new connection */ - $this->ldap= ldap_init ($this->current['SERVER'], $this->current['BASE'], - $this->current['ADMIN'], $this->current['PASSWORD']); - /* Check for connection */ - if (is_null($this->ldap) || (is_int($this->ldap) && $this->ldap == 0)){ - print_red (_("Can't bind to LDAP. Please contact the system administrator.")); - echo $_SESSION['errors']; - exit; + function get_credentials($creds) + { + if (isset($_SERVER['HTTP_GOSA_KEY'])){ + return (cred_decrypt($creds, $_SERVER['HTTP_GOSA_KEY'])); } + return ($creds); + } - if (!isset($_SESSION['size_limit'])){ - $_SESSION['size_limit']= $this->current['SIZELIMIT']; - $_SESSION['size_ignore']= $this->current['SIZEIGNORE']; - } - if ($sizelimit){ - $this->ldap->set_size_limit($_SESSION['size_limit']); - } else { - $this->ldap->set_size_limit(0); - } + function get_ldap_link($sizelimit= FALSE) + { + /* Build new connection */ + $this->ldap= ldap_init ($this->current['SERVER'], $this->current['BASE'], + $this->current['ADMIN'], $this->get_credentials($this->current['PASSWORD'])); + + /* 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.")); + $smarty->display (get_template_path('headers.tpl')); + echo ''.$_SESSION['errors'].''; + exit(); + } - /* Move referrals */ - if (!isset($this->current['REFERRAL'])){ - $this->ldap->referrals= array(); - } else { - $this->ldap->referrals= $this->current['REFERRAL']; - } + if (!isset($_SESSION['size_limit'])){ + $_SESSION['size_limit']= $this->current['SIZELIMIT']; + $_SESSION['size_ignore']= $this->current['SIZEIGNORE']; + } + if ($sizelimit){ + $this->ldap->set_size_limit($_SESSION['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']; + } +# } return ($this->ldap); } @@ -228,6 +234,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"; } @@ -288,6 +303,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(); } @@ -302,19 +328,34 @@ class config { /* Fill imap servers */ $ldap= $this->get_ldap_link(); $ldap->cd ($this->current['BASE']); - $ldap->search ("(objectClass=goImapServer)"); - - $this->data['SERVERS']['IMAP']= array(); - error_reporting(0); - while ($attrs= $ldap->fetch()){ - $name= $attrs['goImapName'][0]; - $this->data['SERVERS']['IMAP'][$name]= array( "connect" => $attrs['goImapConnect'][0], - "admin" => $attrs['goImapAdmin'][0], - "password" => $attrs['goImapPassword'][0], - "sieve_server" => $attrs['goImapSieveServer'][0], - "sieve_port" => $attrs['goImapSievePort'][0]); + 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; + } + error_reporting(E_ALL); + } else { + $ldap->search ("(objectClass=goImapServer)", array('goImapName', 'goImapConnect', 'goImapAdmin', 'goImapPassword', + 'goImapSieveServer', 'goImapSievePort')); + + $this->data['SERVERS']['IMAP']= array(); + error_reporting(0); + while ($attrs= $ldap->fetch()){ + $name= $attrs['goImapName'][0]; + $this->data['SERVERS']['IMAP'][$name]= array( "connect" => $attrs['goImapConnect'][0], + "admin" => $attrs['goImapAdmin'][0], + "password" => $attrs['goImapPassword'][0], + "sieve_server" => $attrs['goImapSieveServer'][0], + "sieve_port" => $attrs['goImapSievePort'][0]); + } + error_reporting(E_ALL); } - error_reporting(E_ALL); /* Get kerberos server. FIXME: only one is supported currently */ $ldap->cd ($this->current['BASE']); @@ -348,30 +389,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']); @@ -412,7 +476,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()){ @@ -443,9 +507,13 @@ class config { $ldap->cd ($this->current['BASE']); $ldap->search ("(objectClass=sambaDomain)"); while ($attrs= $ldap->fetch()){ - $this->data['SERVERS']['SAMBA'][$attrs['sambaDomainName'][0]]= array( - "SID" => $attrs["sambaSID"][0], - "RIDBASE" => $attrs["sambaAlgorithmicRidBase"][0]); + $this->data['SERVERS']['SAMBA'][$attrs['sambaDomainName'][0]]= array( "SID" =>"","RIDBASE" =>""); + if(isset($attrs["sambaSID"][0])){ + $this->data['SERVERS']['SAMBA'][$attrs['sambaDomainName'][0]]["SID"] = $attrs["sambaSID"][0]; + } + if(isset($attrs["sambaAlgorithmicRidBase"][0])){ + $this->data['SERVERS']['SAMBA'][$attrs['sambaDomainName'][0]]["RIDBASE"] = $attrs["sambaAlgorithmicRidBase"][0]; + } } /* If no samba servers are found, look for configured sid/ridbase */ @@ -472,6 +540,7 @@ class config { $result= array(); $administrative= array(); $result['/']= $this->current['BASE']; + $this->tdepartments= array(); /* Get list of department objects */ $ldap= $this->get_ldap_link(); @@ -479,11 +548,18 @@ class config { $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']; + $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){ @@ -506,13 +582,21 @@ class config { 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); @@ -559,7 +643,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 @@ -580,7 +665,7 @@ class config { if(isset($entries['ENTRY'])){ $a = ""; for($i = 0 ; $i < $depth ; $i ++){ - $a.=" "; + $a.="."; } $ret[$entries['ENTRY']]=$a." ".$name; } @@ -602,7 +687,16 @@ 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'])){ @@ -631,10 +725,12 @@ class config { /* 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)){ + 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']); } @@ -643,6 +739,7 @@ class config { $sharename = $a_share[0]; $return[$entry['cn'][0]."|".$sharename] = $entry['cn'][0]." [".$sharename."]"; } + } return($return); }