From cbfe5e879e20d7251a68a689f50d90d682c884fa Mon Sep 17 00:00:00 2001 From: andryyy Date: Wed, 21 Jun 2017 23:27:01 +0200 Subject: [PATCH] Fix error when adding alias with multiple alias addresses --- data/web/inc/functions.mailbox.inc.php | 68 ++++++++++++-------------- 1 file changed, 32 insertions(+), 36 deletions(-) diff --git a/data/web/inc/functions.mailbox.inc.php b/data/web/inc/functions.mailbox.inc.php index 7d5f893f..597d9d87 100644 --- a/data/web/inc/functions.mailbox.inc.php +++ b/data/web/inc/functions.mailbox.inc.php @@ -315,10 +315,42 @@ function mailbox($_action, $_type, $_data = null) { ); return false; } + foreach ($gotos as &$goto) { + if (empty($goto)) { + continue; + } + $goto_domain = idn_to_ascii(substr(strstr($goto, '@'), 1)); + $goto_local_part = strstr($goto, '@', true); + $goto = $goto_local_part.'@'.$goto_domain; + $stmt = $pdo->prepare("SELECT `username` FROM `mailbox` + WHERE `kind` REGEXP 'location|thing|group' + AND `username`= :goto"); + $stmt->execute(array(':goto' => $goto)); + $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC)); + if ($num_results != 0) { + $_SESSION['return'] = array( + 'type' => 'danger', + 'msg' => sprintf($lang['danger']['goto_invalid']) + ); + return false; + } + if (!filter_var($goto, FILTER_VALIDATE_EMAIL) === true) { + $_SESSION['return'] = array( + 'type' => 'danger', + 'msg' => sprintf($lang['danger']['goto_invalid']) + ); + return false; + } + } + $gotos = array_filter($gotos); + $goto = implode(",", $gotos); foreach ($addresses as $address) { if (empty($address)) { continue; } + if (in_array($address, $gotos)) { + continue; + } $stmt = $pdo->prepare("SELECT `address` FROM `alias` WHERE `address`= :address"); $stmt->execute(array(':address' => $address)); @@ -397,42 +429,6 @@ function mailbox($_action, $_type, $_data = null) { ); return false; } - foreach ($gotos as &$goto) { - if (empty($goto)) { - continue; - } - $goto_domain = idn_to_ascii(substr(strstr($goto, '@'), 1)); - $goto_local_part = strstr($goto, '@', true); - $goto = $goto_local_part.'@'.$goto_domain; - $stmt = $pdo->prepare("SELECT `username` FROM `mailbox` - WHERE `kind` REGEXP 'location|thing|group' - AND `username`= :goto"); - $stmt->execute(array(':goto' => $goto)); - $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC)); - if ($num_results != 0) { - $_SESSION['return'] = array( - 'type' => 'danger', - 'msg' => sprintf($lang['danger']['goto_invalid']) - ); - return false; - } - if (!filter_var($goto, FILTER_VALIDATE_EMAIL) === true) { - $_SESSION['return'] = array( - 'type' => 'danger', - 'msg' => sprintf($lang['danger']['goto_invalid']) - ); - return false; - } - if ($goto == $address) { - $_SESSION['return'] = array( - 'type' => 'danger', - 'msg' => sprintf($lang['danger']['alias_goto_identical']) - ); - return false; - } - } - $gotos = array_filter($gotos); - $goto = implode(",", $gotos); try { $stmt = $pdo->prepare("INSERT INTO `alias` (`address`, `goto`, `domain`, `active`) VALUES (:address, :goto, :domain, :active)");