From 88078fcdc3a897a8ac2783c82c7d7eae3bcfdab2 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Tue, 22 Sep 2020 09:33:47 +0200
Subject: [PATCH] Validate mail forwarding destination

---
 interface/web/mail/lib/lang/de_mail_forward.lng |  2 ++
 interface/web/mail/lib/lang/en_mail_forward.lng |  2 ++
 interface/web/mail/mail_forward_edit.php        | 11 +++++++++++
 3 files changed, 15 insertions(+)

diff --git a/interface/web/mail/lib/lang/de_mail_forward.lng b/interface/web/mail/lib/lang/de_mail_forward.lng
index f10d789671..4825ef7811 100644
--- a/interface/web/mail/lib/lang/de_mail_forward.lng
+++ b/interface/web/mail/lib/lang/de_mail_forward.lng
@@ -6,6 +6,8 @@ $wb['limit_mailforward_txt'] = 'Die maximale Anzahl an E-Mail Weiterleitungen f
 $wb['duplicate_mailbox_txt'] = 'Es existiert bereits ein E-Mail Konto mit dieser Adresse.';
 $wb['domain_txt'] = 'Domain';
 $wb['source_txt'] = 'Quell E-Mail Adresse';
+$wb['destination_error_empty'] = 'Das Weiterleitungsziel darf nicht leer sein.';
+$wb['destination_error_isemail'] = 'Das Weiterleitungsziel enthält mindestens eine ungültige E-Mail-Adresse.';
 $wb['email_error_isemail'] = 'Bitte geben Sie eine gültige E-Mail Adresse an.';
 $wb['send_as_txt'] = 'Senden als';
 $wb['send_as_exp'] = 'Ziel erlauben, die Adresse als Absender zu nutzen (Nur, falls das Ziel intern ist)';
diff --git a/interface/web/mail/lib/lang/en_mail_forward.lng b/interface/web/mail/lib/lang/en_mail_forward.lng
index afa3363560..c38e2bf4ff 100644
--- a/interface/web/mail/lib/lang/en_mail_forward.lng
+++ b/interface/web/mail/lib/lang/en_mail_forward.lng
@@ -6,6 +6,8 @@ $wb['limit_mailforward_txt'] = 'The max. number of email forwarders for your acc
 $wb['duplicate_mailbox_txt'] = 'There is already a mailbox with this email address';
 $wb['domain_txt'] = 'Domain';
 $wb['source_txt'] = 'Source Email';
+$wb['destination_error_empty'] = 'The destination must not be empty.';
+$wb['destination_error_isemail'] = 'The destination contains at least one invalid email address.';
 $wb['email_error_isemail'] = 'Please enter a valid email address.';
 $wb['send_as_txt'] = 'Send as';
 $wb['send_as_exp'] = 'Allow target to send mail using this address as origin (if target is internal)';
diff --git a/interface/web/mail/mail_forward_edit.php b/interface/web/mail/mail_forward_edit.php
index e783ad98a9..51ad19e823 100644
--- a/interface/web/mail/mail_forward_edit.php
+++ b/interface/web/mail/mail_forward_edit.php
@@ -120,6 +120,17 @@ class page_action extends tform_actions {
 		unset($this->dataRecord["email_local_part"]);
 		unset($this->dataRecord["email_domain"]);
 
+		if(trim($this->dataRecord['destination']) == '') {
+			$app->tform->errorMessage .= $app->tform->lng('destination_error_empty') . '<br />';
+		} else {
+			$targets = preg_split('/\s*[,;]\s*/', trim($this->dataRecord['destination']));
+			foreach($targets as $target) {
+				if(!$target || filter_var($target, FILTER_VALIDATE_EMAIL) === false) {
+					$app->tform->errorMessage .= $app->tform->lng('destination_error_isemail') . '<br />'
+				}
+			}
+		}
+
 		//* Check if there is no active mailbox with this address
 		$tmp = $app->db->queryOneRecord("SELECT count(mailuser_id) as number FROM mail_user WHERE postfix = 'y' AND email = ?", $this->dataRecord["source"]);
 		if($tmp['number'] > 0) $app->tform->errorMessage .= $app->tform->lng("duplicate_mailbox_txt")."<br>";
-- 
GitLab