From 2a380018f9bd8246a343056e96b6aa6851844b6a Mon Sep 17 00:00:00 2001
From: vbenincasa <vbenincasa@gmail.com>
Date: Sun, 01 May 2011 15:27:15 -0400
Subject: [PATCH]  - Now the %s variable (used in default_host) works with IDN and with Master users from dovecot too (like user@domain.com*master)  - rcube_parse_host() now returns false if %s is used and an invalid email is provided (to work better when a prefix is used in default_host like 'mail.%s')

---
 program/include/main.inc |   11 +++++++----
 1 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/program/include/main.inc b/program/include/main.inc
index 0c83af2..1947e35 100644
--- a/program/include/main.inc
+++ b/program/include/main.inc
@@ -1679,11 +1679,14 @@
   $h = $_SESSION['imap_host'] ? $_SESSION['imap_host'] : $host;
   // %z - IMAP domain without first part, e.g. %h=imap.domain.tld, %z=domain.tld
   $z = preg_replace('/^[^\.]+\./', '', $h);
-  // %s - domain name after the '@' from e-mail address provided at login screen
-  if ( filter_var(get_input_value('_user', RCUBE_INPUT_POST), FILTER_VALIDATE_EMAIL) !== FALSE )
-    preg_match('/[^@]+$/', get_input_value('_user', RCUBE_INPUT_POST), $s);
+  // %s - domain name after the '@' from e-mail address provided at login screen. Returns FALSE if an invalid email is provided
+  if ( strpos($name, '%s') !== false ){
+    $user_email = rcube_idn_convert(get_input_value('_user', RCUBE_INPUT_POST), true);
+    if ( preg_match('/(.*)@([a-z0-9\.\-\[\]\:]+)/i', $user_email, $s) < 1 || filter_var($s[1]."@".$s[2], FILTER_VALIDATE_EMAIL) === false )
+      return false;
+  }
 
-  $name = str_replace(array('%n', '%d', '%h', '%z', '%s'), array($n, $d, $h, $z, $s[0]), $name);
+  $name = str_replace(array('%n', '%d', '%h', '%z', '%s'), array($n, $d, $h, $z, $s[2]), $name);
   return $name;
 }
 

--
Gitblit v1.9.1