Code

Closes #296 Language settings from gosa.conf wasnt used. IE Detection works here.
[gosa.git] / include / functions.inc
index cae474cb80a6e95ba647eb7f2747d790b1400ac9..e46df87dc7a07c11b7368d555570b5ee383e7344 100644 (file)
@@ -39,6 +39,7 @@ 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");
@@ -152,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 */
@@ -310,8 +313,19 @@ function ldap_login_user ($username, $password)
     echo "<body>".$_SESSION['errors']."</body></html>";
     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()){
@@ -331,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();
@@ -754,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){
@@ -934,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)
 {
@@ -2267,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);
@@ -2522,17 +2566,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)." &nbsp;(".$name.")";
+        $ret[$key] = _($name)." &nbsp;(".$tmp2[$key].")";
       }
     }
     setlocale(LC_ALL, $old_lang);