Fix inconsistent alias domain catchall behaviour

Postfix lookups for catchall case on non-alias domain:

1. user@domain
   - virtual_alias_maps.cf -> no match
   - virtual_alias_domain_maps.cf -> no match
   - virtual_alias_domain_catchall_maps.cf -> no match
   - custom virtual_alias_maps -> no match
2. user -> not relevant
3. @domain
   - virtual_alias_maps.cf -> **match**, lookup ends here

With an alias domain the behaviour was:

1. user@domain
   - virtual_alias_maps.cf -> no match
   - virtual_alias_domain_maps.cf -> no match
   - virtual_alias_domain_catchall_maps.cf -> **match**, lookup ends here

In this case custom virtual_alias_maps are ignored.

With this change the behaviour is:

1. user@domain
   - virtual_alias_maps.cf -> no match
   - virtual_alias_domain_maps.cf -> no match
   - virtual_alias_domain_catchall_maps.cf -> no match
   - custom virtual_alias_maps -> no match
2. user -> not relevant
3. @domain
   - virtual_alias_maps.cf -> no match
   - virtual_alias_domain_maps.cf -> **match**, lookup ends here

The change removes virtual_alias_domain_catchall_maps.cf entirely and
rewrites virtual_alias_domain_maps.cf to also work for catchall lookups.
This commit is contained in:
Julian Rother 2025-08-28 00:21:21 +02:00
parent e116d74fb7
commit d544011b66
Signed by: julian
GPG key ID: C19B924C0CD13341
4 changed files with 2 additions and 7 deletions

View file

@ -216,7 +216,6 @@
- pgsql/relay_domains.cf - pgsql/relay_domains.cf
- pgsql/virtual_alias_maps.cf - pgsql/virtual_alias_maps.cf
- pgsql/virtual_alias_domain_maps.cf - pgsql/virtual_alias_domain_maps.cf
- pgsql/virtual_alias_domain_catchall_maps.cf
- pgsql/virtual_domains_maps.cf - pgsql/virtual_domains_maps.cf
- pgsql/virtual_mailbox_maps.cf - pgsql/virtual_mailbox_maps.cf
- pgsql/virtual_sender_maps.cf - pgsql/virtual_sender_maps.cf

View file

@ -73,7 +73,7 @@ smtp_tls_security_level = may
# Postfixadmin and dovecot integration # Postfixadmin and dovecot integration
relay_domains = $mydestination pgsql:/etc/postfix/pgsql/relay_domains.cf {{ mailserver.postfix.relay_domains }} relay_domains = $mydestination pgsql:/etc/postfix/pgsql/relay_domains.cf {{ mailserver.postfix.relay_domains }}
virtual_alias_maps = pgsql:/etc/postfix/pgsql/virtual_alias_maps.cf pgsql:/etc/postfix/pgsql/virtual_alias_domain_maps.cf pgsql:/etc/postfix/pgsql/virtual_alias_domain_catchall_maps.cf {{ mailserver.postfix.virtual_alias_maps }} virtual_alias_maps = pgsql:/etc/postfix/pgsql/virtual_alias_maps.cf pgsql:/etc/postfix/pgsql/virtual_alias_domain_maps.cf {{ mailserver.postfix.virtual_alias_maps }}
virtual_mailbox_domains = pgsql:/etc/postfix/pgsql/virtual_domains_maps.cf virtual_mailbox_domains = pgsql:/etc/postfix/pgsql/virtual_domains_maps.cf
virtual_mailbox_maps = pgsql:/etc/postfix/pgsql/virtual_mailbox_maps.cf virtual_mailbox_maps = pgsql:/etc/postfix/pgsql/virtual_mailbox_maps.cf
virtual_transport = dovecot virtual_transport = dovecot

View file

@ -1,4 +0,0 @@
dbname = postfixadmin
user = postfix
hosts = unix:/var/run/postgresql
query = SELECT goto FROM alias, alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = '@' || alias_domain.target_domain AND alias.active = true AND alias_domain.active = true

View file

@ -1,4 +1,4 @@
dbname = postfixadmin dbname = postfixadmin
user = postfix user = postfix
hosts = unix:/var/run/postgresql hosts = unix:/var/run/postgresql
query = SELECT goto FROM alias, alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = '%u' || '@' || alias_domain.target_domain AND alias.active = true AND alias_domain.active = true query = SELECT goto FROM alias, alias_domain WHERE alias_domain.alias_domain = '%d' AND alias_domain.target_domain = alias.domain AND left(alias.address, -length(alias.domain)) || alias_domain.alias_domain = '%s' AND left(alias.address, -length(alias.domain)) || alias.domain = alias.address AND alias.active = true AND alias_domain.active = true