From d6363ba9dd38e98c8f2d48085677c4bafdfdc7cd Mon Sep 17 00:00:00 2001
From: mcramer <m.cramer@pixcept.de>
Date: Thu, 27 Sep 2012 04:46:29 -0400
Subject: [PATCH] Fixed: Added missing idn converts to mail functions Added: Changed idn function to support multi-line fields (like mail forward)

---
 interface/lib/classes/functions.inc.php |   88 +++++++++++++++++++++++---------------------
 1 files changed, 46 insertions(+), 42 deletions(-)

diff --git a/interface/lib/classes/functions.inc.php b/interface/lib/classes/functions.inc.php
index fcb6055..0801c1c 100644
--- a/interface/lib/classes/functions.inc.php
+++ b/interface/lib/classes/functions.inc.php
@@ -315,7 +315,7 @@
     /** IDN converter wrapper.
      * all converter classes should be placed in ISPC_CLASS_PATH.'/idn/'
      */
-    public function idn_encode($domain) {
+    private function _idn_encode_decode($domain, $encode = true) {
         if($domain == '') return '';
         if(preg_match('/^[0-9\.]+$/', $domain)) return $domain; // may be an ip address - anyway does not need to bee encoded
         
@@ -326,56 +326,60 @@
             $domain = substr($domain, strrpos($domain, '@') + 1);
         }
         
-        if(function_exists('idn_to_ascii')) {
-            $domain = idn_to_ascii($domain);
-        } elseif(file_exists(ISPC_CLASS_PATH.'/idn/idna_convert.class.php')) {
-             /* use idna class:
-             * @author  Matthias Sommerfeld <mso@phlylabs.de>
-             * @copyright 2004-2011 phlyLabs Berlin, http://phlylabs.de
-             * @version 0.8.0 2011-03-11
-             */
-            
-            if(!is_object($this->idn_converter) || $this->idn_converter_name != 'idna_convert.class') {
-                include_once(ISPC_CLASS_PATH.'/idn/idna_convert.class.php');
-                $this->idn_converter = new idna_convert(array('idn_version' => 2008));
-                $this->idn_converter_name = 'idna_convert.class';
+        if($encode == true) {
+            if(function_exists('idn_to_ascii')) {
+                $domain = idn_to_ascii($domain);
+            } elseif(file_exists(ISPC_CLASS_PATH.'/idn/idna_convert.class.php')) {
+                 /* use idna class:
+                 * @author  Matthias Sommerfeld <mso@phlylabs.de>
+                 * @copyright 2004-2011 phlyLabs Berlin, http://phlylabs.de
+                 * @version 0.8.0 2011-03-11
+                 */
+                
+                if(!is_object($this->idn_converter) || $this->idn_converter_name != 'idna_convert.class') {
+                    include_once(ISPC_CLASS_PATH.'/idn/idna_convert.class.php');
+                    $this->idn_converter = new idna_convert(array('idn_version' => 2008));
+                    $this->idn_converter_name = 'idna_convert.class';
+                }
+                $domain = $this->idn_converter->encode($domain);
             }
-            $domain = $this->idn_converter->encode($domain);
+        } else {
+            if(function_exists('idn_to_utf8')) {
+                $domain = idn_to_utf8($domain);
+            } elseif(file_exists(ISPC_CLASS_PATH.'/idn/idna_convert.class.php')) {
+                 /* use idna class:
+                 * @author  Matthias Sommerfeld <mso@phlylabs.de>
+                 * @copyright 2004-2011 phlyLabs Berlin, http://phlylabs.de
+                 * @version 0.8.0 2011-03-11
+                 */
+                
+                if(!is_object($this->idn_converter) || $this->idn_converter_name != 'idna_convert.class') {
+                    include_once(ISPC_CLASS_PATH.'/idn/idna_convert.class.php');
+                    $this->idn_converter = new idna_convert(array('idn_version' => 2008));
+                    $this->idn_converter_name = 'idna_convert.class';
+                }
+                $domain = $this->idn_converter->decode($domain);
+            }
         }
         
         if($user_part !== false) return $user_part . '@' . $domain;
         else return $domain;
     }
+     
+    public function idn_encode($domain) {
+        $domains = explode("\n", $domain);
+        for($d = 0; $d < count($domains); $d++) {
+            $domains[$d] = $this->_idn_encode_decode($domains[$d], true);
+        }
+        return implode("\n", $domains);
+    }
     
     public function idn_decode($domain) {
-        if($domain == '') return '';
-        if(preg_match('/^[0-9\.]+$/', $domain)) return $domain; // may be an ip address - anyway does not need to bee decoded
-        
-        // get domain and user part if it is an email
-        $user_part = false;
-        if(strpos($domain, '@') !== false) {
-            $user_part = substr($domain, 0, strrpos($domain, '@'));
-            $domain = substr($domain, strrpos($domain, '@') + 1);
+        $domains = explode("\n", $domain);
+        for($d = 0; $d < count($domains); $d++) {
+            $domains[$d] = $this->_idn_encode_decode($domains[$d], false);
         }
-        if(function_exists('idn_to_utf8')) {
-            $domain = idn_to_utf8($domain);
-        } elseif(file_exists(ISPC_CLASS_PATH.'/idn/idna_convert.class.php')) {
-             /* use idna class:
-             * @author  Matthias Sommerfeld <mso@phlylabs.de>
-             * @copyright 2004-2011 phlyLabs Berlin, http://phlylabs.de
-             * @version 0.8.0 2011-03-11
-             */
-            
-            if(!is_object($this->idn_converter) || $this->idn_converter_name != 'idna_convert.class') {
-                include_once(ISPC_CLASS_PATH.'/idn/idna_convert.class.php');
-                $this->idn_converter = new idna_convert(array('idn_version' => 2008));
-                $this->idn_converter_name = 'idna_convert.class';
-            }
-            $domain = $this->idn_converter->decode($domain);
-        }
-        
-        if($user_part !== false) return $user_part . '@' . $domain;
-        else return $domain;
+        return implode("\n", $domains);
     }
 		
 }

--
Gitblit v1.9.1