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