From b6a95500972ce565490f23144c06f581b8d72f0d Mon Sep 17 00:00:00 2001 From: PseudoResonance Date: Mon, 11 Nov 2024 22:00:27 -0800 Subject: [PATCH] Fix #2752: Domain recipient for address rewrite (cherry picked from commit 40f6d691d8774d6f813153974f8fe462a8db9ab3) --- .../inc/functions.address_rewriting.inc.php | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/data/web/inc/functions.address_rewriting.inc.php b/data/web/inc/functions.address_rewriting.inc.php index 140ae4764..87b882782 100644 --- a/data/web/inc/functions.address_rewriting.inc.php +++ b/data/web/inc/functions.address_rewriting.inc.php @@ -285,7 +285,13 @@ function recipient_map($_action, $_data = null, $attr = null) { ); return false; } - if (!filter_var($new_dest, FILTER_VALIDATE_EMAIL)) { + if (is_valid_domain_name($new_dest)) { + $new_dest_sane = '@' . idn_to_ascii($new_dest, 0, INTL_IDNA_VARIANT_UTS46); + } + elseif (filter_var($new_dest, FILTER_VALIDATE_EMAIL)) { + $new_dest_sane = $new_dest; + } + else { $_SESSION['return'][] = array( 'type' => 'danger', 'log' => array(__FUNCTION__, $_action, $_data, $_attr), @@ -308,7 +314,7 @@ function recipient_map($_action, $_data = null, $attr = null) { (:old_dest, :new_dest, :active)"); $stmt->execute(array( ':old_dest' => $old_dest_sane, - ':new_dest' => $new_dest, + ':new_dest' => $new_dest_sane, ':active' => $active )); $_SESSION['return'][] = array( @@ -351,7 +357,13 @@ function recipient_map($_action, $_data = null, $attr = null) { ); continue; } - if (!filter_var($new_dest, FILTER_VALIDATE_EMAIL)) { + if (is_valid_domain_name($new_dest)) { + $new_dest_sane = '@' . idn_to_ascii($new_dest, 0, INTL_IDNA_VARIANT_UTS46); + } + elseif (filter_var($new_dest, FILTER_VALIDATE_EMAIL)) { + $new_dest_sane = $new_dest; + } + else { $_SESSION['return'][] = array( 'type' => 'danger', 'log' => array(__FUNCTION__, $_action, $_data, $_attr), @@ -378,7 +390,7 @@ function recipient_map($_action, $_data = null, $attr = null) { WHERE `id`= :id"); $stmt->execute(array( ':old_dest' => $old_dest_sane, - ':new_dest' => $new_dest, + ':new_dest' => $new_dest_sane, ':active' => $active, ':id' => $id ));