diff --git a/include/functions.inc b/include/functions.inc
index 0de2bcfc11821c2eb49de7348eaee0929d722b96..e46df87dc7a07c11b7368d555570b5ee383e7344 100644 (file)
--- a/include/functions.inc
+++ b/include/functions.inc
/* 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.".UTF-8");
}
}
- /* Try to use users primary language */
- if ($ui != NULL){
- if ($ui->language != ""){
- return ($ui->language.".UTF-8");
+ /* 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);
}
/* Load supported languages */
echo "<body>".$_SESSION['errors']."</body></html>";
exit();
}
- $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']);
- foreach($tmp as $attr){
- if(in_array($attr,$allowed_attributes)){
- $verify_attr[] = $attr;
- }
- }
- }
- if(count($verify_attr) == 0){
- $verify_attr = array("uid");
+
+ /* 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;
}
- $tmp= $verify_attr;
- $tmp[] = "uid";
- $filter = "";
- foreach($verify_attr as $attr) {
- $filter.= "(".$attr."=".$username.")";
+
+ $ldap->cd($config->current['BASE']);
+ if(!$auth_mail){
+ $ldap->search("(&(uid=$username)(objectClass=gosaAccount))", array("uid"));
+ }else{
+ $ldap->search("(&(|(uid=".$username.")(mail=".$username."))(objectClass=gosaAccount))", array("uid","mail"));
}
- $filter = "(&(|".$filter.")(objectClass=gosaAccount))";
- $ldap->search($filter,$tmp);
/* get results, only a count of 1 is valid */
switch ($ldap->count()){
/* LDAP schema is not case sensitive. Perform additional check. */
$attrs= $ldap->fetch();
- $success = FALSE;
- foreach($verify_attr as $attr){
- if ($attrs[$attr][0] == $username){
- $success = TRUE;
+ if($auth_mail){
+ if ($attrs['uid'][0] != $username && strcasecmp($attrs['mail'][0], $username) != 0){
+ return(NULL);
+ }
+ }else{
+ if ($attrs['uid'][0] != $username){
+ return(NULL);
}
- }
- if(!$success){
- return(FALSE);
}
/* got user dn, fill acl's */
$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);