Allow users to send emails from alias domains

### Problem

Currently, if I have a domain `bla.com` that is an alias of `blub.com` and John has user account as `john@blub.com`, then will not be able to send e-mails as `john@bla.com` because the system will not recognize / communicate to Postfix that `john@bla.com` is the same as `john@blub.com` and hence Postfix will reject this attempt.

### Proposed Solution

When calculating the allowed SASL usernames for an email address, also include aliases from aliased domains in the result of the query. (This will also work for the primary username, since that is added as “internal” alias to that table as well.)

### Caveats

I only tested the proposed query with PostgreSQL.
This commit is contained in:
Alexander Schlarb
2018-12-09 20:30:43 +00:00
committed by GitHub
parent 5807395d6f
commit 7b7b47657c
+6 -3
View File
@@ -118,8 +118,9 @@ class SenderLoginMap(object):
"(SELECT concat(mb.address, '@', dom.name) FROM admin_mailbox mb "
"INNER JOIN modoboa_admin_aliasrecipient alr ON alr.r_mailbox_id=mb.id"
" INNER JOIN admin_domain dom ON dom.id=mb.domain_id"
" INNER JOIN admin_domainalias adom ON adom.target_id=dom.id"
" INNER JOIN admin_alias al ON alr.alias_id=al.id "
"WHERE al.enabled=1 AND al.address='%s')"
"WHERE al.enabled=1 AND (al.address='%s' OR (adom.name='@d' AND al.address='%u'||'@'||dom.name)))"
)
postgres = (
"(SELECT email FROM core_user WHERE email='%s' AND is_active) "
@@ -132,8 +133,9 @@ class SenderLoginMap(object):
"(SELECT mb.address || '@' || dom.name FROM admin_mailbox mb "
"INNER JOIN modoboa_admin_aliasrecipient alr ON alr.r_mailbox_id=mb.id"
" INNER JOIN admin_domain dom ON dom.id=mb.domain_id"
" INNER JOIN admin_domainalias adom ON adom.target_id=dom.id"
" INNER JOIN admin_alias al ON alr.alias_id=al.id "
"WHERE al.enabled AND al.address='%s')"
"WHERE al.enabled AND (al.address='%s' OR (adom.name='@d' AND al.address='%u'||'@'||dom.name)))"
)
sqlite = (
"SELECT email FROM core_user WHERE email='%s' AND is_active=1 "
@@ -146,6 +148,7 @@ class SenderLoginMap(object):
"SELECT mb.address || '@' || dom.name FROM admin_mailbox mb "
"INNER JOIN modoboa_admin_aliasrecipient alr ON alr.r_mailbox_id=mb.id "
"INNER JOIN admin_domain dom ON dom.id=mb.domain_id "
"INNER JOIN admin_domainalias adom ON adom.target_id=dom.id "
"INNER JOIN admin_alias al ON alr.alias_id=al.id "
"WHERE al.enabled=1 AND al.address='%s'"
"WHERE al.enabled=1 AND (al.address='%s' OR (adom.name='@d' AND al.address='%u'||'@'||dom.name))"
)