From 1536e8b48f26f87a010d8848fff66e492f989aeb Mon Sep 17 00:00:00 2001 From: Jesse Norell <jesse@kci.net> Date: Thu, 9 Jul 2020 13:59:14 -0600 Subject: [PATCH] mail_forwardings alias/forward/catchall, aliasdomains in virtual_alias_{maps,domains} --- install/dist/lib/fedora.lib.php | 3 +++ install/dist/lib/opensuse.lib.php | 3 +++ install/lib/installer_base.lib.php | 3 +++ install/tpl/debian_postfix.conf.master | 4 ++-- install/tpl/fedora_postfix.conf.master | 4 ++-- install/tpl/gentoo_postfix.conf.master | 4 ++-- .../tpl/mysql-virtual_alias_domains.cf.master | 6 +++++ install/tpl/mysql-virtual_domains.cf.master | 3 ++- .../tpl/mysql-virtual_forwardings.cf.master | 24 +++++-------------- install/tpl/opensuse_postfix.conf.master | 4 ++-- 10 files changed, 31 insertions(+), 27 deletions(-) create mode 100644 install/tpl/mysql-virtual_alias_domains.cf.master diff --git a/install/dist/lib/fedora.lib.php b/install/dist/lib/fedora.lib.php index 4a7c9cfbfe..05fea64519 100644 --- a/install/dist/lib/fedora.lib.php +++ b/install/dist/lib/fedora.lib.php @@ -63,6 +63,9 @@ class installer_dist extends installer_base { //* mysql-virtual_forwardings.cf $this->process_postfix_config('mysql-virtual_forwardings.cf'); + //* mysql-virtual_alias_domains.cf + $this->process_postfix_config('mysql-virtual_alias_domains.cf'); + //* mysql-virtual_mailboxes.cf $this->process_postfix_config('mysql-virtual_mailboxes.cf'); diff --git a/install/dist/lib/opensuse.lib.php b/install/dist/lib/opensuse.lib.php index 60fb0511fd..574b38100d 100644 --- a/install/dist/lib/opensuse.lib.php +++ b/install/dist/lib/opensuse.lib.php @@ -63,6 +63,9 @@ class installer_dist extends installer_base { //* mysql-virtual_forwardings.cf $this->process_postfix_config('mysql-virtual_forwardings.cf'); + //* mysql-virtual_alias_domains.cf + $this->process_postfix_config('mysql-virtual_alias_domains.cf'); + //* mysql-virtual_mailboxes.cf $this->process_postfix_config('mysql-virtual_mailboxes.cf'); diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index 81b1257db0..0476c92330 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -960,6 +960,9 @@ class installer_base { //* mysql-virtual_forwardings.cf $this->process_postfix_config('mysql-virtual_forwardings.cf'); + //* mysql-virtual_alias_domains.cf + $this->process_postfix_config('mysql-virtual_alias_domains.cf'); + //* mysql-virtual_mailboxes.cf $this->process_postfix_config('mysql-virtual_mailboxes.cf'); diff --git a/install/tpl/debian_postfix.conf.master b/install/tpl/debian_postfix.conf.master index 1c739a5c7e..c1a5baa71d 100644 --- a/install/tpl/debian_postfix.conf.master +++ b/install/tpl/debian_postfix.conf.master @@ -1,7 +1,7 @@ alias_maps = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases alias_database = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases -virtual_alias_domains = -virtual_alias_maps = hash:/var/lib/mailman/data/virtual-mailman, proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf +virtual_alias_domains = proxy:mysql:{config_dir}/mysql-virtual_alias_domains.cf +virtual_alias_maps = hash:/var/lib/mailman/data/virtual-mailman, proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_alias_domains.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf virtual_mailbox_domains = proxy:mysql:{config_dir}/mysql-virtual_domains.cf virtual_mailbox_maps = proxy:mysql:{config_dir}/mysql-virtual_mailboxes.cf virtual_mailbox_base = {vmail_mailbox_base} diff --git a/install/tpl/fedora_postfix.conf.master b/install/tpl/fedora_postfix.conf.master index d504c6ed56..5b53b9a45f 100644 --- a/install/tpl/fedora_postfix.conf.master +++ b/install/tpl/fedora_postfix.conf.master @@ -1,5 +1,5 @@ -virtual_alias_domains = -virtual_alias_maps = hash:/etc/mailman/virtual-mailman, proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf +virtual_alias_domains = proxy:mysql:{config_dir}/mysql-virtual_alias_domains.cf +virtual_alias_maps = hash:/var/lib/mailman/data/virtual-mailman, proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_alias_domains.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf virtual_mailbox_domains = proxy:mysql:{config_dir}/mysql-virtual_domains.cf virtual_mailbox_maps = proxy:mysql:{config_dir}/mysql-virtual_mailboxes.cf virtual_mailbox_base = {vmail_mailbox_base} diff --git a/install/tpl/gentoo_postfix.conf.master b/install/tpl/gentoo_postfix.conf.master index cad2b97c3c..a326051d5e 100644 --- a/install/tpl/gentoo_postfix.conf.master +++ b/install/tpl/gentoo_postfix.conf.master @@ -1,5 +1,5 @@ -virtual_alias_domains = -virtual_alias_maps = proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf +virtual_alias_domains = proxy:mysql:{config_dir}/mysql-virtual_alias_domains.cf +virtual_alias_maps = hash:/var/lib/mailman/data/virtual-mailman, proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_alias_domains.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf virtual_mailbox_domains = proxy:mysql:{config_dir}/mysql-virtual_domains.cf virtual_mailbox_maps = proxy:mysql:{config_dir}/mysql-virtual_mailboxes.cf virtual_mailbox_base = {vmail_mailbox_base} diff --git a/install/tpl/mysql-virtual_alias_domains.cf.master b/install/tpl/mysql-virtual_alias_domains.cf.master new file mode 100644 index 0000000000..e55fd8ea8d --- /dev/null +++ b/install/tpl/mysql-virtual_alias_domains.cf.master @@ -0,0 +1,6 @@ +user = {mysql_server_ispconfig_user} +password = {mysql_server_ispconfig_password} +dbname = {mysql_server_database} +hosts = {mysql_server_ip} +query = SELECT destination FROM mail_forwarding + WHERE source = '@%d' AND type = 'aliasdomain' AND active = 'y' AND server_id = {server_id} diff --git a/install/tpl/mysql-virtual_domains.cf.master b/install/tpl/mysql-virtual_domains.cf.master index 0d1793a95a..11ccb046ef 100644 --- a/install/tpl/mysql-virtual_domains.cf.master +++ b/install/tpl/mysql-virtual_domains.cf.master @@ -2,4 +2,5 @@ user = {mysql_server_ispconfig_user} password = {mysql_server_ispconfig_password} dbname = {mysql_server_database} hosts = {mysql_server_ip} -query = select domain from mail_domain where domain = '%s' and active = 'y' and server_id = {server_id} +query = SELECT domain FROM mail_domain WHERE domain = '%s' AND active = 'y' AND server_id = {server_id} + AND NOT EXISTS (SELECT source FROM mail_forwarding WHERE source = '@%s' AND type = 'aliasdomain' AND active = 'y' AND server_id = {server_id}) diff --git a/install/tpl/mysql-virtual_forwardings.cf.master b/install/tpl/mysql-virtual_forwardings.cf.master index 04a94ee634..9ab6f3e860 100644 --- a/install/tpl/mysql-virtual_forwardings.cf.master +++ b/install/tpl/mysql-virtual_forwardings.cf.master @@ -2,22 +2,10 @@ user = {mysql_server_ispconfig_user} password = {mysql_server_ispconfig_password} dbname = {mysql_server_database} hosts = {mysql_server_ip} -query = SELECT u.email as target FROM mail_forwarding as s - INNER JOIN mail_user as u ON (u.email = CONCAT('%u@', SUBSTRING_INDEX(s.destination,'@',-1))) - WHERE s.source = '@%d' AND s.type = 'aliasdomain' AND s.active = 'y' AND u.disabledeliver = 'n' AND s.server_id = {server_id} +query = SELECT s.destination AS target FROM mail_forwarding AS s + WHERE s.source = '%s' AND s.type IN ('alias', 'forward') AND s.active = 'y' AND s.server_id = {server_id} UNION - SELECT s.destination as target FROM mail_forwarding as s - WHERE s.source = '%s' AND s.type IN ('alias', 'forward') and s.active = 'y' AND s.server_id = {server_id} - UNION - SELECT s.destination as target FROM mail_forwarding as s - INNER JOIN mail_forwarding as f ON (f.source = CONCAT('%u@', SUBSTRING_INDEX(s.destination,'@',-1))) - WHERE s.source = '@%d' AND s.type = 'aliasdomain' AND s.active = 'y' AND f.active = 'y' AND s.server_id = {server_id} - UNION - SELECT s.destination as target FROM mail_forwarding as s - LEFT JOIN mail_user as uu ON (uu.email = '%s' AND uu.disabledeliver = 'n') - LEFT JOIN mail_forwarding as uf ON (uf.source = '%s' AND uf.type IN ('alias', 'forward') AND uf.active = 'y') - WHERE s.source = '@%d' AND s.type IN ('catchall') and s.active = 'y' AND uu.mailuser_id IS NULL AND uf.forwarding_id IS NULL AND s.server_id = {server_id} - UNION - SELECT s.destination as target FROM mail_forwarding as s - INNER JOIN mail_forwarding as t ON (t.source = s.destination AND t.type = 'catchall') - WHERE s.source = '@%d' AND s.type = 'aliasdomain' and s.active = 'y' AND t.active = 'y' AND s.server_id = {server_id} + SELECT s.destination AS target FROM mail_forwarding AS s + WHERE s.source = '@%d' AND s.type = 'catchall' AND s.active = 'y' AND s.server_id = {server_id} + AND NOT EXISTS (SELECT email FROM mail_user WHERE email = '%s' AND server_id = {server_id}) + AND NOT EXISTS (SELECT source FROM mail_forwarding WHERE source = '%s' AND active = 'y' AND server_id = {server_id}) diff --git a/install/tpl/opensuse_postfix.conf.master b/install/tpl/opensuse_postfix.conf.master index c59d46fa97..ea4375b6ac 100644 --- a/install/tpl/opensuse_postfix.conf.master +++ b/install/tpl/opensuse_postfix.conf.master @@ -1,7 +1,7 @@ alias_maps = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases alias_database = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases -virtual_alias_domains = -virtual_alias_maps = hash:/etc/mailman/virtual-mailman, proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf +virtual_alias_domains = proxy:mysql:{config_dir}/mysql-virtual_alias_domains.cf +virtual_alias_maps = hash:/var/lib/mailman/data/virtual-mailman, proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_alias_domains.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf virtual_mailbox_domains = proxy:mysql:{config_dir}/mysql-virtual_domains.cf virtual_mailbox_maps = proxy:mysql:{config_dir}/mysql-virtual_mailboxes.cf virtual_mailbox_base = {vmail_mailbox_base} -- GitLab