Code

Closes #296 Language settings from gosa.conf wasnt used. IE Detection works here.
[gosa.git] / include / functions.inc
index 0de2bcfc11821c2eb49de7348eaee0929d722b96..e46df87dc7a07c11b7368d555570b5ee383e7344 100644 (file)
@@ -153,17 +153,19 @@ function get_browser_language()
   /* 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 */
@@ -311,28 +313,19 @@ function ldap_login_user ($username, $password)
     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()){
@@ -352,14 +345,14 @@ function ldap_login_user ($username, $password)
 
   /* 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 */
@@ -2318,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);