From a76cbddfc92adbf4e8cb18dda5f668ec4de8a114 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Mon, 17 Jan 2011 07:21:08 -0500
Subject: [PATCH] - Fix %h/%z variables in username_domain option (#1487701)

---
 CHANGELOG                  |    1 +
 program/include/main.inc   |    5 +++--
 program/include/rcmail.php |    4 ++--
 3 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index b7de814..28f6914 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -3,6 +3,7 @@
 
 - Fix login redirect issues (#1487686)
 - Require PHP 5.2.1 or greater
+- Fix %h/%z variables in username_domain option (#1487701)
 
 RELEASE 0.5
 -----------
diff --git a/program/include/main.inc b/program/include/main.inc
index 7466207..1ddb5f9 100644
--- a/program/include/main.inc
+++ b/program/include/main.inc
@@ -1771,16 +1771,17 @@
  * Replaces hostname variables
  *
  * @param string $name Hostname
+ * @param string $host Optional IMAP hostname
  * @return string
  */
-function rcube_parse_host($name)
+function rcube_parse_host($name, $host='')
 {
   // %n - host
   $n = preg_replace('/:\d+$/', '', $_SERVER['SERVER_NAME']);
   // %d - domain name without first part, e.g. %d=mail.domain.tld, %m=domain.tld
   $d = preg_replace('/^[^\.]+\./', '', $n);
   // %h - IMAP host
-  $h = $_SESSION['imap_host'];
+  $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);
 
diff --git a/program/include/rcmail.php b/program/include/rcmail.php
index 7c8d4fc..cdf959f 100644
--- a/program/include/rcmail.php
+++ b/program/include/rcmail.php
@@ -674,9 +674,9 @@
     // Check if we need to add domain
     if (!empty($config['username_domain']) && strpos($username, '@') === false) {
       if (is_array($config['username_domain']) && isset($config['username_domain'][$host]))
-        $username .= '@'.rcube_parse_host($config['username_domain'][$host]);
+        $username .= '@'.rcube_parse_host($config['username_domain'][$host], $host);
       else if (is_string($config['username_domain']))
-        $username .= '@'.rcube_parse_host($config['username_domain']);
+        $username .= '@'.rcube_parse_host($config['username_domain'], $host);
     }
 
     // Convert username to lowercase. If IMAP backend

--
Gitblit v1.9.1