From 10d2601963a2fad0e28d927e062e66c159fc2402 Mon Sep 17 00:00:00 2001 From: Dario Ernst Date: Thu, 10 Jan 2019 17:30:11 +0100 Subject: [PATCH] Unsimplify alias precedence handling MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As discussed with hoellen on matrix, since postfix indeed supports including the recipient delimiter character in a verbatim alias, we should support so too — and handle its precedence correctly. The clearer and simpler formulation of the precedence-clauses are credit to @hoellen. Thanks! --- core/admin/mailu/models.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/core/admin/mailu/models.py b/core/admin/mailu/models.py index 5115b1c0..8b7b8d63 100644 --- a/core/admin/mailu/models.py +++ b/core/admin/mailu/models.py @@ -260,14 +260,22 @@ class Email(object): @classmethod def resolve_destination(cls, localpart, domain_name, ignore_forward_keep=False): - localpart_maybe_split = localpart + localpart_stripped = None + stripped_alias = None + if os.environ.get('RECIPIENT_DELIMITER') in localpart: - localpart_maybe_split = localpart.rsplit(os.environ.get('RECIPIENT_DELIMITER'), 1)[0] + localpart_stripped = localpart.rsplit(os.environ.get('RECIPIENT_DELIMITER'), 1)[0] - alias = Alias.resolve(localpart_maybe_split, domain_name) + pure_alias = Alias.resolve(localpart, domain_name) + pure_alias_has_wildcard = pure_alias and '%' in pure_alias.email and pure_alias.wildcard + stripped_alias = Alias.resolve(localpart_stripped, domain_name) - if alias: - return alias.destination + if pure_alias and not pure_alias_has_wildcard: + return pure_alias.destination + elif stripped_alias: + return stripped_alias.destination + elif pure_alias: + return pure_alias.destination user = User.query.get('{}@{}'.format(localpart, domain_name)) if not user and localpart_stripped: