Feature/merge sender login queries (#1322)

* Merged sender login related queries.

see #1164

* Added upgrade instructions.

* Fixed registration.
This commit is contained in:
Antoine Nguyen
2017-12-08 10:45:08 +01:00
committed by GitHub
parent 16720f423b
commit b924a20793
4 changed files with 52 additions and 55 deletions
+18
View File
@@ -89,6 +89,24 @@ Rebuild Virtual Environment
Specific instructions
*********************
1.9.2
=====
First of all, update postfix map files as follows:
.. sourcecode:: bash
> python manage.py generate_postfix_maps --destdir <path>
Then, modify postfix's configuration as follows::
smtpd_sender_login_maps =
<driver>:<path>/sql-sender-login-map.cf
Replace ``<driver>`` and ``<path>`` by your values.
Finally, reload postfix.
1.9.0
=====
+1 -2
View File
@@ -150,8 +150,7 @@ def register_postfix_maps(sender, **kwargs):
return [
postfix_maps.DomainsMap, postfix_maps.DomainsAliasesMap,
postfix_maps.AliasesMap, postfix_maps.MaintainMap,
postfix_maps.SenderLoginAliasMap, postfix_maps.SenderLoginMailboxMap,
postfix_maps.SenderLoginMailboxExtraMap
postfix_maps.SenderLoginMap
]
+32 -51
View File
@@ -97,72 +97,53 @@ class MaintainMap(object):
)
class SenderLoginMailboxMap(object):
class SenderLoginMap(object):
"""Map file to list authorized sender addresses for a given account:
* Its mailbox
* Its aliases
* Extra addresses
"""
"""Map file to list authorized sender addresses (from mailboxes)."""
filename = "sql-sender-login-mailboxes.cf"
filename = "sql-sender-login-map.cf"
mysql = (
"SELECT email FROM core_user WHERE email='%s' AND is_active=1 "
)
postgres = (
"SELECT email FROM core_user WHERE email='%s' AND is_active"
)
sqlite = (
"SELECT email FROM core_user WHERE email='%s' AND is_active=1"
)
class SenderLoginMailboxExtraMap(object):
"""Map file to list per-mailbox extra addresses."""
filename = "sql-sender-login-mailboxes-extra.cf"
# FIXME: is it necessary to filter against user status?
mysql = (
"SELECT concat(mb.address, '@', dom.name) FROM admin_mailbox mb "
"(SELECT email FROM core_user WHERE email='%s' AND is_active=1) "
"UNION "
"(SELECT concat(mb.address, '@', dom.name) FROM admin_mailbox mb "
"INNER JOIN admin_senderaddress sad ON sad.mailbox_id=mb.id "
"INNER JOIN admin_domain dom ON dom.id=mb.domain_id "
"WHERE sad.address='%s'"
)
postgres = (
"SELECT mb.address || '@' || dom.name FROM admin_mailbox mb "
"INNER JOIN admin_senderaddress sad ON sad.mailbox_id=mb.id "
"INNER JOIN admin_domain dom ON dom.id=mb.domain_id "
"WHERE sad.address='%s'"
)
sqlite = (
"SELECT mb.address || '@' || dom.name FROM admin_mailbox mb "
"INNER JOIN admin_senderaddress sad ON sad.mailbox_id=mb.id "
"INNER JOIN admin_domain dom ON dom.id=mb.domain_id "
"WHERE sad.address='%s'"
)
class SenderLoginAliasMap(object):
"""Map file to list authorized sender addresses (from aliases)."""
filename = "sql-sender-login-aliases.cf"
mysql = (
"SELECT concat(mb.address, '@', dom.name) FROM admin_mailbox mb "
"WHERE sad.address='%s') "
"UNION "
"(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_alias al ON alr.alias_id=al.id "
"WHERE al.enabled=1 AND al.address='%s'"
"WHERE al.enabled=1 AND al.address='%s')"
)
postgres = (
"SELECT mb.address || '@' || dom.name FROM admin_mailbox mb "
"(SELECT email FROM core_user WHERE email='%s' AND is_active) "
"UNION "
"(SELECT mb.address || '@' || dom.name FROM admin_mailbox mb "
"INNER JOIN admin_senderaddress sad ON sad.mailbox_id=mb.id "
"INNER JOIN admin_domain dom ON dom.id=mb.domain_id "
"WHERE sad.address='%s') "
"UNION "
"(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_alias al ON alr.alias_id=al.id "
"WHERE al.enabled AND al.address='%s'"
"WHERE al.enabled AND al.address='%s')"
)
sqlite = (
"SELECT mb.address || '@' || dom.name FROM admin_mailbox mb "
"(SELECT email FROM core_user WHERE email='%s' AND is_active=1) "
"UNION "
"(SELECT mb.address || '@' || dom.name FROM admin_mailbox mb "
"INNER JOIN admin_senderaddress sad ON sad.mailbox_id=mb.id "
"INNER JOIN admin_domain dom ON dom.id=mb.domain_id "
"WHERE sad.address='%s') "
"UNION "
"(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_alias al ON alr.alias_id=al.id "
"WHERE al.enabled=1 AND al.address='%s'"
"WHERE al.enabled=1 AND al.address='%s')"
)
+1 -2
View File
@@ -18,8 +18,7 @@ class MapFilesTestCase(MapFilesTestCaseMixin, TestCase):
MAP_FILES = [
"sql-domains.cf", "sql-domain-aliases.cf", "sql-aliases.cf",
"sql-maintain.cf", "sql-sender-login-mailboxes.cf",
"sql-sender-login-mailboxes-extra.cf", "sql-sender-login-aliases.cf"
"sql-maintain.cf", "sql-sender-login-map.cf"
]
def test_map_upgrade(self):