X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Finclude%2Ffunctions.inc;h=4354fdaea3094d60b6bf72a55b31b7e24029ee0c;hb=8242fde1a538dd582896d842945b121a4bb985d4;hp=4f7236ae5ca02b5e6d145a2752aeef9a5789e1d4;hpb=ca820b53aa9911874a3c6e7253ea12b72a5cf513;p=gosa.git diff --git a/gosa-core/include/functions.inc b/gosa-core/include/functions.inc index 4f7236ae5..4354fdaea 100644 --- a/gosa-core/include/functions.inc +++ b/gosa-core/include/functions.inc @@ -21,9 +21,27 @@ */ /* Configuration file location */ -define ("CONFIG_DIR", "/etc/gosa"); -define ("CONFIG_FILE", "gosa.conf"); -define ("CONFIG_TEMPLATE_DIR", "../contrib/"); + +/* Allow setting the config patj in the apache configuration + e.g. SetEnv CONFIG_FILE /etc/path + */ +if(!isset($_SERVER['CONFIG_DIR'])){ + define ("CONFIG_DIR", "/etc/gosa"); +}else{ + define ("CONFIG_DIR",$_SERVER['CONFIG_DIR']); +} + +/* Allow setting the config file in the apache configuration + e.g. SetEnv CONFIG_FILE gosa.conf.2.5 + */ +if(!isset($_SERVER['CONFIG_FILE'])){ + define ("CONFIG_FILE", "gosa.conf"); +}else{ + define ("CONFIG_FILE",$_SERVER['CONFIG_FILE']); +} + +define ("CONFIG_TEMPLATE_DIR", "../contrib"); +define ("TEMP_DIR","/var/cache/gosa/tmp"); /* Define get_list flags */ define("GL_NONE", 0); @@ -174,8 +192,8 @@ function get_browser_language() } /* Check for global language settings in gosa.conf */ - if(isset($config->data['MAIN']['LANG']) && !empty($config->data['MAIN']['LANG'])) { - $lang = $config->data['MAIN']['LANG']; + if (isset ($config) && $config->get_cfg_value('lang') != ""){ + $lang = $config->get_cfg_value('lang'); if(!preg_match("/utf/i",$lang)){ $lang .= ".UTF-8"; } @@ -212,11 +230,8 @@ function get_template_path($filename= '', $plugin= FALSE, $path= "") { global $config, $BASE_DIR; - if (!@isset($config->data['MAIN']['THEME'])){ - $theme= 'default'; - } else { - $theme= $config->data['MAIN']['THEME']; - } + /* Set theme */ + $theme= $config->get_cfg_value("theme", "default"); /* Return path for empty filename */ if ($filename == ''){ @@ -333,7 +348,7 @@ function process_htaccess ($username, $kerberos= FALSE) $config->set_current($name); $mode= "kerberos"; - if (isset($config->current['KRBSASL']) && preg_match('/^true$/i', $config->current['KRBSASL'])){ + if ($config->get_cfg_value("krbsasl") == "true"){ $mode= "sasl"; } @@ -414,8 +429,8 @@ function ldap_login_user ($username, $password) $ldap->cd($config->current['BASE']); $allowed_attributes = array("uid","mail"); $verify_attr = array(); - if(isset($config->current['LOGIN_ATTRIBUTE'])){ - $tmp = split(",",$config->current['LOGIN_ATTRIBUTE']); + if($config->get_cfg_value("login_attribute") != ""){ + $tmp = split(",", $config->get_cfg_value("login_attribute")); foreach($tmp as $attr){ if(in_array($attr,$allowed_attributes)){ $verify_attr[] = $attr; @@ -597,7 +612,7 @@ function add_lock ($object, $user) /* Check for existing entries in lock area */ $ldap= $config->get_ldap_link(); - $ldap->cd ($config->current['CONFIG']); + $ldap->cd ($config->get_cfg_value("config")); $ldap->search("(&(objectClass=gosaLockEntry)(gosaUser=$user)(gosaObject=".base64_encode($object)."))", array("gosaUser")); if (!$ldap->success()){ @@ -609,14 +624,14 @@ function add_lock ($object, $user) if ($ldap->count() == 0){ $attrs= array(); $name= md5($object); - $ldap->cd("cn=$name,".$config->current['CONFIG']); + $ldap->cd("cn=$name,".$config->get_cfg_value("config")); $attrs["objectClass"] = "gosaLockEntry"; $attrs["gosaUser"] = $user; $attrs["gosaObject"] = base64_encode($object); $attrs["cn"] = "$name"; $ldap->add($attrs); if (!$ldap->success()){ - msg_dialog::display(_("LDAP error"), msgPool::ldaperror($ldap->get_error(), "cn=$name,".$config->current['CONFIG'], 0, ERROR_DIALOG)); + msg_dialog::display(_("LDAP error"), msgPool::ldaperror($ldap->get_error(), "cn=$name,".$config->get_cfg_value("config"), 0, ERROR_DIALOG)); return; } } @@ -641,7 +656,7 @@ function del_lock ($object) /* Check for existance and remove the entry */ $ldap= $config->get_ldap_link(); - $ldap->cd ($config->current['CONFIG']); + $ldap->cd ($config->get_cfg_value("config")); $ldap->search ("(&(objectClass=gosaLockEntry)(gosaObject=".base64_encode($object)."))", array("gosaObject")); $attrs= $ldap->fetch(); if ($ldap->getDN() != "" && $ldap->success()){ @@ -661,7 +676,7 @@ function del_user_locks($userdn) /* Get LDAP ressources */ $ldap= $config->get_ldap_link(); - $ldap->cd ($config->current['CONFIG']); + $ldap->cd ($config->get_cfg_value("config")); /* Remove all objects of this user, drop errors silently in this case. */ $ldap->search("(&(objectClass=gosaLockEntry)(gosaUser=$userdn))", array("gosaUser")); @@ -684,7 +699,7 @@ function get_lock ($object) /* Get LDAP link, check for presence of the lock entry */ $user= ""; $ldap= $config->get_ldap_link(); - $ldap->cd ($config->current['CONFIG']); + $ldap->cd ($config->get_cfg_value("config")); $ldap->search("(&(objectClass=gosaLockEntry)(gosaObject=".base64_encode($object)."))", array("gosaUser")); if (!$ldap->success()){ msg_dialog::display(_("LDAP error"), msgPool::ldaperror($ldap->get_error(), "", LDAP_SEARCH, ERROR_DIALOG)); @@ -729,7 +744,7 @@ function get_multiple_locks($objects) /* Get LDAP link, check for presence of the lock entry */ $user= ""; $ldap= $config->get_ldap_link(); - $ldap->cd ($config->current['CONFIG']); + $ldap->cd ($config->get_cfg_value("config")); $ldap->search($filter, array("gosaUser","gosaObject")); if (!$ldap->success()){ msg_dialog::display(_("LDAP error"), msgPool::ldaperror($ldap->get_error(), "", LDAP_SEARCH, ERROR_DIALOG)); @@ -887,16 +902,14 @@ function get_sub_list($filter, $category,$sub_deps, $base= "", $attributes= arra }else{ /* Sort in every value that fits the permissions */ - if (is_array($category)){ - foreach ($category as $o){ - if ($ui->get_category_permissions($dn, $o) != ""){ - $result[]= $attrs; - break; - } - } - } else { - if ( $ui->get_category_permissions($dn, $category) != ""){ + if (!is_array($category)){ + $category = array($category); + } + foreach ($category as $o){ + if((preg_match("/\//",$o) && preg_match("/r/",$ui->get_permissions($dn,$o))) || + (!preg_match("/\//",$o) && preg_match("/r/",$ui->get_category_permissions($dn, $o)))){ $result[]= $attrs; + break; } } } @@ -957,19 +970,14 @@ function get_list($filter, $category, $base= "", $attributes= array(), $flags= G }else{ /* Sort in every value that fits the permissions */ - if (is_array($category)){ - foreach ($category as $o){ - if ($ui->get_category_permissions($dn, $o) != ""){ - - /* We found what we were looking for, break speeds things up */ - $result[]= $attrs; - } - } - } else { - if ($ui->get_category_permissions($dn, $category) != ""){ - - /* We found what we were looking for, break speeds things up */ + if (!is_array($category)){ + $category = array($category); + } + foreach ($category as $o){ + if((preg_match("/\//",$o) && preg_match("/r/",$ui->get_permissions($dn,$o))) || + (!preg_match("/\//",$o) && preg_match("/r/",$ui->get_category_permissions($dn, $o)))){ $result[]= $attrs; + break; } } } @@ -1087,31 +1095,27 @@ function &get_smarty() } -function convert_department_dn($dn) +function convert_department_dn($dn, $base = NULL) { - $dep= ""; + global $config; + + if($base == NULL){ + $base = $config->current['BASE']; + } /* Build a sub-directory style list of the tree level specified in $dn */ - global $config; - $dn = preg_replace("/".normalizePreg($config->current['BASE'])."$/i","",$dn); + $dn = preg_replace("/".normalizePreg($base)."$/i","",$dn); if(empty($dn)) return("/"); - foreach (split(',', $dn) as $rdn){ - - /* We're only interested in organizational units... */ - if (substr($rdn,0,3) == 'ou='){ - $dep= substr($rdn,3)."/$dep"; - } - /* ... and location objects */ - if (substr($rdn,0,2) == 'l='){ - $dep= substr($rdn,2)."/$dep"; - } + $dep= ""; + foreach (split(',', $dn) as $rdn){ + $dep = preg_replace("/^[^=]+=/","",$rdn)."/".$dep; } /* Return and remove accidently trailing slashes */ - return rtrim($dep, "/"); + return(trim($dep, "/")); } @@ -1137,6 +1141,8 @@ function get_ou($name) "printerou" => "ou=printers,ou=systems,", "phoneou" => "ou=phones,ou=systems,", "componentou" => "ou=netdevices,ou=systems,", + "winstations" => "ou=winstation,", + "blocklistou" => "ou=gofax,ou=systems,", "incomingou" => "ou=incoming,", "aclroleou" => "ou=aclroles,", @@ -1156,8 +1162,8 @@ function get_ou($name) "mimetypeou" => "ou=mime,"); /* Preset ou... */ - if (isset($config->current[strtoupper($name)])){ - $ou= $config->current[strtoupper($name)]; + if ($config->get_cfg_value($name) != ""){ + $ou= $config->get_cfg_value($name); } elseif (isset($map[$name])) { $ou = $map[$name]; return($ou); @@ -1224,7 +1230,7 @@ function strict_uid_mode() { global $config; - return !(isset($config->current['STRICT']) && preg_match('/^(no|false)$/i', $config->current['STRICT'])); + return ($config->get_cfg_value("strict") == "true"); } @@ -2164,10 +2170,10 @@ function get_base_from_hook($dn, $attrib) { global $config; - if (isset($config->current['BASE_HOOK'])){ + if ($config->get_cfg_value("base_hook") != ""){ /* Call hook script - if present */ - $command= $config->current['BASE_HOOK']; + $command= $config->get_cfg_value("base_hook"); if ($command != ""){ $command.= " '".LDAP::fix($dn)."' $attrib"; @@ -2178,17 +2184,17 @@ function get_base_from_hook($dn, $attrib) return ($output[0]); } else { msg_dialog::display(_("Warning"), _("'base_hook' is not available. Using default base!"), WARNING_DIALOG); - return ($config->current['UIDBASE']); + return ($config->get_cfg_value("uidbase")); } } else { msg_dialog::display(_("Warning"), _("'base_hook' is not available. Using default base!"), WARNING_DIALOG); - return ($config->current['UIDBASE']); + return ($config->get_cfg_value("uidbase")); } } else { msg_dialog::display(_("Warning"), _("'base_hook' is not available. Using default base!"), WARNING_DIALOG); - return ($config->current['UIDBASE']); + return ($config->get_cfg_value("uidbase")); } } @@ -2347,6 +2353,7 @@ function get_languages($languages_in_own_language = FALSE,$strip_region_tag = FA "pl_PL" => "Polish", "sv_SE" => "Swedish", "zh_CN" => "Chinese", + "vi_VN" => "Vietnamese", "ru_RU" => "Russian"); $tmp2= array( @@ -2359,12 +2366,23 @@ function get_languages($languages_in_own_language = FALSE,$strip_region_tag = FA "pl_PL" => _("Polish"), "sv_SE" => _("Swedish"), "zh_CN" => _("Chinese"), + "vi_VN" => _("Vietnamese"), "ru_RU" => _("Russian")); $ret = array(); if($languages_in_own_language){ $old_lang = setlocale(LC_ALL, 0); + + /* If the locale wasn't correclty set before, there may be an incorrect + locale returned. Something like this: + C_CTYPE=de_DE.UTF-8;LC_NUMERIC=C;LC_TIME=de_DE.UTF-8;LC ... + Extract the locale name from this string and use it to restore old locale. + */ + if(preg_match("/LC_CTYPE/",$old_lang)){ + $old_lang = preg_replace("/^.*LC_CTYPE=([^;]*).*$/","\\1",$old_lang); + } + foreach($tmp as $key => $name){ $lang = $key.".UTF-8"; setlocale(LC_ALL, $lang); @@ -2458,9 +2476,9 @@ function change_password ($dn, $password, $mode=0, $hash= "") /* Extract used hash */ if ($hash == ""){ - $test = passwordMethod::get_method($attrs['userPassword'][0]); + $test = passwordMethod::get_method($attrs['userPassword'][0],$dn); } else { - $test = new $available[$hash]($config); + $test = new $available[$hash]($config,$dn); $test->set_hash($hash); } @@ -2514,7 +2532,9 @@ function change_password ($dn, $password, $mode=0, $hash= "") } else { /* Run backend method for change/create */ - $test->set_password($password); + if(!$test->set_password($password)){ + return(FALSE); + } /* Find postmodify entries for this class */ $command= $config->search("password", "POSTMODIFY",array('menu')); @@ -2533,6 +2553,7 @@ function change_password ($dn, $password, $mode=0, $hash= "") } } } + return(TRUE); } @@ -2542,7 +2563,7 @@ function generate_smb_nt_hash($password) global $config; # Try to use gosa-si? - if (isset($config->current['GOSA_SI'])){ + if ($config->get_cfg_value("gosa_si") != ""){ $res= gosaSupportDaemon::send("gosa_gen_smb_hash", "GOSA", array("password" => $password), TRUE); if (isset($res['XML']['HASH'])){ $hash= $res['XML']['HASH']; @@ -2550,7 +2571,7 @@ function generate_smb_nt_hash($password) $hash= ""; } } else { - $tmp= $config->data['MAIN']['SMBHASH']." ".escapeshellarg($password); + $tmp= $config->get_cfg_value('smbhash')." ".escapeshellarg($password); @DEBUG (DEBUG_LDAP, __LINE__, __FUNCTION__, __FILE__, $tmp, "Execute"); exec($tmp, $ar); @@ -2566,7 +2587,7 @@ function generate_smb_nt_hash($password) list($lm,$nt)= split (":", trim($hash)); - if ($config->current['SAMBAVERSION'] == 3) { + if ($config->get_cfg_value("sambaversion") == 3) { $attrs['sambaLMPassword']= $lm; $attrs['sambaNTPassword']= $nt; $attrs['sambaPwdLastSet']= date('U'); @@ -2589,12 +2610,8 @@ function getEntryCSN($dn) } /* Get attribute that we should use as serial number */ - if(isset($config->current['UNIQ_IDENTIFIER'])){ - $attr = $config->current['UNIQ_IDENTIFIER']; - }elseif(isset($config->data['MAIN']['UNIQ_IDENTIFIER'])){ - $attr = $config->data['MAIN']['UNIQ_IDENTIFIER']; - } - if(!empty($attr)){ + $attr= $config->get_cfg_value("uniq_identifier"); + if($attr != ""){ $ldap = $config->get_ldap_link(); $ldap->cat($dn,array($attr)); $csn = $ldap->fetch(); @@ -2658,6 +2675,13 @@ function send_binary_content($data,$name,$type = "application/octet-stream") header("Cache-Control: post-check=0, pre-check=0"); header("Content-type: ".$type.""); + $HTTP_USER_AGENT = $_SERVER['HTTP_USER_AGENT']; + + /* Strip name if it is a complete path */ + if (preg_match ("/\//", $name)) { + $name= basename($name); + } + /* force download dialog */ if (preg_match('/MSIE 5.5/', $HTTP_USER_AGENT) || preg_match('/MSIE 6.0/', $HTTP_USER_AGENT)) { header('Content-Disposition: filename="'.$name.'"'); @@ -2670,6 +2694,19 @@ function send_binary_content($data,$name,$type = "application/octet-stream") } +function reverse_html_entities($str,$type = ENT_QUOTES , $charset = "UTF-8") +{ + if(is_string($str)){ + return(htmlentities($str,$type,$charset)); + }elseif(is_array($str)){ + foreach($str as $name => $value){ + $str[$name] = reverse_html_entities($value,$type,$charset); + } + } + return($str); +} + + /*! \brief Encode special string characters so we can use the string in \ HTML output, without breaking quotes. @param The String we want to encode. @@ -2678,7 +2715,22 @@ function send_binary_content($data,$name,$type = "application/octet-stream") function xmlentities($str) { if(is_string($str)){ - return(htmlentities($str,ENT_QUOTES)); + + static $asc2uni= array(); + if (!count($asc2uni)){ + for($i=128;$i<256;$i++){ + # $asc2uni[chr($i)] = "&#x".dechex($i).";"; + } + } + + $str = str_replace("&", "&", $str); + $str = str_replace("<", "<", $str); + $str = str_replace(">", ">", $str); + $str = str_replace("'", "'", $str); + $str = str_replace("\"", """, $str); + $str = str_replace("\r", "", $str); + $str = strtr($str,$asc2uni); + return $str; }elseif(is_array($str)){ foreach($str as $name => $value){ $str[$name] = xmlentities($value);