X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=include%2Ffunctions.inc;h=e83805413ea93da35bb4f1171bef0653a685d113;hb=9bd5e2a21394fc3282170ab76e31a7bb632c9548;hp=94164fbf81b40cbe1100dfb4786a2f5ef7ec507f;hpb=13a7b8685b30e1b6592dfa8079b96f351059bfdc;p=gosa.git diff --git a/include/functions.inc b/include/functions.inc index 94164fbf8..e83805413 100644 --- a/include/functions.inc +++ b/include/functions.inc @@ -39,12 +39,14 @@ require_once ("class_ldap.inc"); require_once ("class_config.inc"); require_once ("class_userinfo.inc"); require_once ("class_plugin.inc"); +require_once ("class_dhcpPlugin.inc"); require_once ("class_pluglist.inc"); require_once ("class_tabs.inc"); require_once ("class_mail-methods.inc"); require_once("class_password-methods.inc"); require_once ("functions_debug.inc"); require_once ("functions_dns.inc"); +require_once ("accept-to-gettext.inc"); require_once ("class_MultiSelectWindow.inc"); /* Define constants for debugging */ @@ -146,51 +148,37 @@ function DEBUG($level, $line, $function, $file, $data, $info="") } -/* Simple function to get browser language and convert it to - xx_XY needed by locales. Ignores sublanguages and weights. */ function get_browser_language() { - global $BASE_DIR; - /* Try to use users primary language */ + global $config; $ui= get_userinfo(); - if ($ui != NULL){ + if (isset($ui) && $ui !== NULL){ if ($ui->language != ""){ - return ($ui->language); + return ($ui->language.".UTF-8"); } } - /* Get list of languages */ - if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){ - $lang= preg_replace("/\s+/", "", $_SERVER['HTTP_ACCEPT_LANGUAGE']); - $languages= split (',', $lang); - $languages[]= "C"; - } else { - $languages= array("C"); - } - - /* Walk through languages and get first supported */ - foreach ($languages as $val){ - - /* Strip off weight */ - $lang= preg_replace("/;q=.*$/i", "", $val); - - /* Simplify sub language handling */ - $lang= preg_replace("/-.*$/", "", $lang); - - /* Cancel loop if available in GOsa, or the last - entry has been reached */ - if (is_dir("$BASE_DIR/locale/$lang")){ - break; + /* 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(!preg_match("/utf/i",$lang)){ + $lang .= ".UTF-8"; } + return($lang); } - /* We've just one zh variation. Fix code... */ - if (preg_match('/zh/', $lang)){ - return ("zh_CN"); + /* Load supported languages */ + $gosa_languages= get_languages(); + + /* Move supported languages to flat list */ + $langs= array(); + foreach($gosa_languages as $lang => $dummy){ + $langs[]= $lang.'.UTF-8'; } - return (strtolower($lang)."_".strtoupper($lang)); + /* Return gettext based string */ + return (al2gt($langs, 'text/html')); } @@ -325,8 +313,19 @@ function ldap_login_user ($username, $password) echo "".$_SESSION['errors'].""; exit(); } + + /* Check if mail address is also a valid auth name */ + $auth_mail = FALSE; + if(isset($config->current['AUTH_MAIL']) && preg_match("/^true$/i",$config->current['AUTH_MAIL'])){ + $auth_mail = TRUE; + } + $ldap->cd($config->current['BASE']); - $ldap->search("(&(uid=$username)(objectClass=gosaAccount))", array("uid")); + if(!$auth_mail){ + $ldap->search("(&(uid=$username)(objectClass=gosaAccount))", array("uid")); + }else{ + $ldap->search("(&(|(uid=".$username.")(mail=".$username."))(objectClass=gosaAccount))", array("uid","mail")); + } /* get results, only a count of 1 is valid */ switch ($ldap->count()){ @@ -346,13 +345,19 @@ function ldap_login_user ($username, $password) /* LDAP schema is not case sensitive. Perform additional check. */ $attrs= $ldap->fetch(); - if ($attrs['uid'][0] != $username){ - return(NULL); + if($auth_mail){ + if ($attrs['uid'][0] != $username && strcasecmp($attrs['mail'][0], $username) != 0){ + return(NULL); + } + }else{ + if ($attrs['uid'][0] != $username){ + return(NULL); + } } /* got user dn, fill acl's */ $ui= new userinfo($config, $ldap->getDN()); - $ui->username= $username; + $ui->username= $attrs['uid'][0]; /* password check, bind as user with supplied password */ $ldap->disconnect(); @@ -769,9 +774,29 @@ function get_permissions ($dn, $subtreeACL) } -function get_module_permission($acl_array, $module, $dn) -{ - global $ui; +function get_module_permission($acl_array, $module, $dn, $checkTag= TRUE){ + global $ui, $config; + + /* Check for strict tagging */ + $ttag= ""; + if ($checkTag && isset($config->current['STRICT_UNITS']) && + preg_match('/^(yes|true)$/i', $config->current['STRICT_UNITS']) && + $ui->gosaUnitTag != ""){ + $size= 0; + foreach ($config->tdepartments as $tdn => $tag){ + if (preg_match("/$tdn$/", $dn)){ + if (strlen($tdn) > $size){ + $size= strlen($tdn); + $ttag= $tag; + } + } + } + + /* We have no permission for areas that don't carry our tag */ + if ($ttag != $ui->gosaUnitTag){ + return ("#none#"); + } + } $final= ""; foreach($acl_array as $acl){ @@ -949,6 +974,10 @@ function is_phone_nr($nr) return preg_match ("/^[\/0-9 ()+*-]+$/", $nr); } +function is_dns_name($str) +{ + return(preg_match("/^[a-z0-9\.\-]*$/i",$str)); +} function is_url($url) { @@ -1185,8 +1214,7 @@ function print_red() "position:absolute' id='e_layer'>". "". - "

"._("An error occurred while processing your request"). - "

$string

$addmsg


"; @@ -1712,7 +1740,7 @@ function gen_uids($rule, $attributes) if ($rule[$pos] == "}" ){ $variables[$pos]= expand_id($part, $attributes); - $stripped.= "\{$pos}"; + $stripped.= "{".$pos."}"; $trigger= false; continue; } @@ -2283,7 +2311,7 @@ function get_base_from_hook($dn, $attrib) $command= $config->current['BASE_HOOK']; if ($command != ""){ - $command.= " '$dn' $attrib"; + $command.= " '".LDAP::fix($dn)."' $attrib"; if (check_command($command)){ @DEBUG (DEBUG_SHELL, __LINE__, __FUNCTION__, __FILE__, $command, "Execute"); exec($command, $output); @@ -2452,19 +2480,143 @@ function get_base_from_hook($dn, $attrib) } -function prepare4mailbody($string) + + +function mac2company($mac) { - $string = html_entity_decode($string); + $vendor= ""; + + /* Generate a normailzed mac... */ + $mac= substr(preg_replace('/[:-]/', '', $mac), 0, 6); - $from = array("/\n/" , "/&/" ,"/(\'|\")/"); - $to = array("%0A" , "%26" ,"%22"); + /* Check for existance of the oui file */ + if (!is_readable(CONFIG_DIR."/oui.txt")){ + return (""); + } - $string = preg_replace($from,$to,$string); + /* Open file and look for mac addresses... */ + $handle = @fopen(CONFIG_DIR."/oui.txt", "r"); + if ($handle) { + while (!feof($handle)) { + $line = fgets($handle, 4096); + + if (preg_match("/^$mac/i", $line)){ + $vendor= substr($line, 32); + } + } + fclose($handle); + } - echo "
".$string."
"; - return($string); + return ($vendor); } +function get_languages($languages_in_own_language = FALSE,$strip_region_tag = FALSE) +{ + $tmp = array( + "de_DE" => "German", + "fr_FR" => "French", + "it_IT" => "Italian", + "es_ES" => "Spanish", + "en_US" => "English", + "nl_NL" => "Dutch", + "pl_PL" => "Polish", + "sv_SE" => "Swedish", + "zh_CN" => "Chinese", + "ru_RU" => "Russian"); + + $tmp2= array( + "de_DE" => _("German"), + "fr_FR" => _("French"), + "it_IT" => _("Italian"), + "es_ES" => _("Spanish"), + "en_US" => _("English"), + "nl_NL" => _("Dutch"), + "pl_PL" => _("Polish"), + "sv_SE" => _("Swedish"), + "zh_CN" => _("Chinese"), + "ru_RU" => _("Russian")); + + $ret = array(); + if($languages_in_own_language){ + + $old_lang = setlocale(LC_ALL, 0); + foreach($tmp as $key => $name){ + $lang = $key.".UTF-8"; + setlocale(LC_ALL, $lang); + if($strip_region_tag){ + $ret[preg_replace("/^([^_]*).*$/","\\1",$key)] = _($name)." (".$tmp2[$key].")"; + }else{ + $ret[$key] = _($name)."  (".$tmp2[$key].")"; + } + } + setlocale(LC_ALL, $old_lang); + }else{ + foreach($tmp as $key => $name){ + if($strip_region_tag){ + $ret[preg_replace("/^([^_]*).*/","\\1",$key)] = _($name); + }else{ + $ret[$key] = _($name); + } + } + } + return($ret); +} + + +/* Check if $ip1 and $ip2 represents a valid IP range + * returns TRUE in case of a valid range, FALSE in case of an error. + */ +function is_ip_range($ip1,$ip2) +{ + if(!is_ip($ip1) || !is_ip($ip2)){ + return(FALSE); + }else{ + $ar1 = split("\.",$ip1); + $var1 = $ar1[0] * (16777216) + $ar1[1] * (65536) + $ar1[2] * (256) + $ar1[3]; + + $ar2 = split("\.",$ip2); + $var2 = $ar2[0] * (16777216) + $ar2[1] * (65536) + $ar2[2] * (256) + $ar2[3]; + return($var1 < $var2); + } +} + + +/* Check if the specified IP address $address is inside the given network */ +function is_in_network($network, $netmask, $address) +{ + $nw= split('\.', $network); + $nm= split('\.', $netmask); + $ad= split('\.', $address); + + /* Generate inverted netmask */ + for ($i= 0; $i<4; $i++){ + $ni[$i]= 255-$nm[$i]; + $la[$i]= $nw[$i] | $ni[$i]; + } + + /* Transform to integer */ + $first= $nw[0] * (16777216) + $nw[1] * (65536) + $nw[2] * (256) + $nw[3]; + $curr= $ad[0] * (16777216) + $ad[1] * (65536) + $ad[2] * (256) + $ad[3]; + $last= $la[0] * (16777216) + $la[1] * (65536) + $la[2] * (256) + $la[3]; + + return ($first < $curr&& $last > $curr); +} + + +/* Returns contents of the given POST variable and check magic quotes settings */ +function get_post($name) +{ + if(!isset($_POST[$name])){ + trigger_error("Requested POST value (".$name.") does not exists, you should add a check to prevent this message."); + return(FALSE); + } + if(get_magic_quotes_gpc()){ + return(stripcslashes($_POST[$name])); + }else{ + return($_POST[$name]); + } +} + // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: ?>