X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=include%2Ffunctions.inc;h=ec1d945f9d081d7dddb91b0f38672d7e0eeb4ee5;hb=0b8a059bcd0e78a5c74acedcc5880f841a385384;hp=e9e3622ac726f45629a4e2cd2bcef4c907f4784a;hpb=90a15bbbdcf416acec9e7a469c01e389f717d900;p=gosa.git diff --git a/include/functions.inc b/include/functions.inc index e9e3622ac..ec1d945f9 100644 --- a/include/functions.inc +++ b/include/functions.inc @@ -18,9 +18,24 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -/* Configuration file location */ -define ("CONFIG_DIR", "/etc/gosa"); -define ("CONFIG_FILE", "gosa.conf"); +/* Allow setting the config patih 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 ("HELP_BASEDIR", "/var/www/doc/"); @@ -39,12 +54,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,54 +163,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"); - } - if (preg_match('/sv/', $lang)){ - return ("sv_SE"); + /* 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')); } @@ -328,8 +328,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()){ @@ -349,13 +360,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(); @@ -772,9 +789,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){ @@ -952,6 +989,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) { @@ -2038,34 +2079,33 @@ function progressbar($percentage,$width=100,$height=15,$showvalue=false) $progress = (int)(($percentage /100)*$width); - /* Abort printing out percentage, if divs are to small */ - - /* If theres a better solution for this, use it... */ - $str = " -
- -
+ $str = "\n
"; -
"; + $str.= "\n
"; - if(($height >10)&&($showvalue)){ - $str.= " - ".$percentage."% - "; - } + if(($height >10)&&($showvalue)){ + $str.= "\n "; + $str.= "\n ".$percentage."% "; + $str.= "\n "; + } - $str.= "
"; + $str.= "\n
"; + $str.= "\n
"; + $str.= "\n
"; + $str.= "\n
"; - return($str); + return($str); } @@ -2285,7 +2325,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); @@ -2454,48 +2494,6 @@ function get_base_from_hook($dn, $attrib) } -function prepare4mailbody($string) -{ - $string = html_entity_decode($string); - - $from = array( - "/%/", - "/ /", - "/\n/", - "/\r/", - "/!/", - "/#/", - "/\*/", - "/\//", - "//", - "/\?/", - "/\&/", - "/\(/", - "/\)/", - "/\"/"); - - $to = array( - "%25", - "%20", - "%0A", - "%0D", - "%21", - "%23", - "%2A", - "%2F", - "%3C", - "%3E", - "%3F", - "%38", - "%28", - "%29", - "%22"); - - $string = preg_replace($from,$to,$string); - - return($string); -} function mac2company($mac) @@ -2540,17 +2538,30 @@ function get_languages($languages_in_own_language = FALSE,$strip_region_tag = FA "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)." (".$name.")"; + $ret[preg_replace("/^([^_]*).*$/","\\1",$key)] = _($name)." (".$tmp2[$key].")"; }else{ - $ret[$key] = _($name)."  (".$name.")"; + $ret[$key] = _($name)."  (".$tmp2[$key].")"; } } setlocale(LC_ALL, $old_lang); @@ -2607,6 +2618,62 @@ function is_in_network($network, $netmask, $address) } +/* Add a given objectClass to an attrs entry */ +function add_objectClass($classes, &$attrs) +{ + if (is_array($classes)){ + $list= $classes; + } else { + $list= array($classes); + } + + foreach ($list as $class){ + $attrs['objectClass'][]= $class; + } +} + + +/* Removes a given objectClass from the attrs entry */ +function remove_objectClass($classes, &$attrs) +{ + if (isset($attrs['objectClass'])){ + /* Array? */ + if (is_array($classes)){ + $list= $classes; + } else { + $list= array($classes); + } + + $tmp= array(); + foreach ($attrs['objectClass'] as $oc) { + foreach ($list as $class){ + if ($oc != $class){ + $tmp[]= $oc; + } + } + } + $attrs['objectClass']= $tmp; + } +} + + +function cred_encrypt($input, $password) { + + $size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC); + $iv = mcrypt_create_iv($size, MCRYPT_DEV_RANDOM); + + return bin2hex(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $password, $input, MCRYPT_MODE_ECB, $iv)); +} + + +function cred_decrypt($input,$password) { + $size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC); + $iv = mcrypt_create_iv($size, MCRYPT_DEV_RANDOM); + + return mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $password, pack("H*", $input), MCRYPT_MODE_ECB, $iv); +} + + /* Returns contents of the given POST variable and check magic quotes settings */ function get_post($name) {