From aad102f73868ea83357856c3afe57617f411c83a Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Tue, 19 Jul 2016 14:29:38 -0400
Subject: [PATCH] Fixed #4033 Special characters in email mailbox password

---
 interface/lib/classes/tform_base.inc.php |   11 +++++++++++
 1 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/interface/lib/classes/tform_base.inc.php b/interface/lib/classes/tform_base.inc.php
index 1c5c6e0..f5e1793 100644
--- a/interface/lib/classes/tform_base.inc.php
+++ b/interface/lib/classes/tform_base.inc.php
@@ -901,6 +901,9 @@
 				case 'IDNTOUTF8':
 					$returnval = $app->functions->idn_decode($returnval);
 					break;
+				case 'TOLATIN1':
+					$returnval = mb_convert_encoding($returnval, 'ISO-8859-1', 'UTF-8');
+					break;
 				case 'TRIM':
 					$returnval = trim($returnval);
 					break;
@@ -1263,6 +1266,10 @@
 							} elseif(isset($field['encryption']) && $field['encryption'] == 'CRYPT') {
 								$record[$key] = $app->auth->crypt_password(stripslashes($record[$key]));
 								$sql_insert_val .= "'".$app->db->quote($record[$key])."', ";
+							} elseif(isset($field['encryption']) && $field['encryption'] == 'CRYPTMAIL') {
+								// The password for the mail system needs to be converted to latin1 before it is hashed.
+								$record[$key] = $app->auth->crypt_password(stripslashes($record[$key]),'ISO-8859-1');
+								$sql_insert_val .= "'".$app->db->quote($record[$key])."', ";
 							} elseif (isset($field['encryption']) && $field['encryption'] == 'MYSQL') {
 								$tmp = $app->db->queryOneRecord("SELECT PASSWORD(?) as `crypted`", stripslashes($record[$key]));
 								$record[$key] = $tmp['crypted'];
@@ -1291,6 +1298,10 @@
 							} elseif(isset($field['encryption']) && $field['encryption'] == 'CRYPT') {
 								$record[$key] = $app->auth->crypt_password(stripslashes($record[$key]));
 								$sql_update .= "`$key` = '".$app->db->quote($record[$key])."', ";
+							} elseif(isset($field['encryption']) && $field['encryption'] == 'CRYPTMAIL') {
+								// The password for the mail system needs to be converted to latin1 before it is hashed.
+								$record[$key] = $app->auth->crypt_password(stripslashes($record[$key]),'ISO-8859-1');
+								$sql_update .= "`$key` = '".$app->db->quote($record[$key])."', ";
 							} elseif (isset($field['encryption']) && $field['encryption'] == 'MYSQL') {
 								$tmp = $app->db->queryOneRecord("SELECT PASSWORD(?) as `crypted`", stripslashes($record[$key]));
 								$record[$key] = $tmp['crypted'];

--
Gitblit v1.9.1