I have figured it out!

This is the changed query:

query = SELECT alias FROM (SELECT alias, 0 as priority FROM alias WHERE address='%s' AND active='1' UNION SELECT username as destination, 1 as priority FROM mailbox WHERE username='%s' AND active='1') ORDER BY priority LIMIT 1;


Thanks Palica

On 2015-08-05 11:06, Palica wrote:
Hi list,

I have a postfix server with virtualdomains delivery only. I use
sqlite as db backend to lookup virtual aliases, domains and mailboxes.

relay_domains = sqlite:/etc/postfix/sqlite_relay_domain_maps.cf
relay_recipient_maps = sqlite:/etc/postfix/sqlite_relay_recipient_maps.cf
virtual_alias_maps = sqlite:/etc/postfix/sqlite_virtual_alias_maps.cf
virtual_mailbox_domains = sqlite:/etc/postfix/sqlite_virtual_domain_maps.cf virtual_mailbox_maps = sqlite:/etc/postfix/sqlite_virtual_mailbox_maps.cf

So here my problem. I wanted to enable catchall address for a
virtualdomain to gather some spam to train my dspam. I used an address
with recipient_delimiter to recieve the messages (something like
someone+s...@domain.tld). I like to use the recipient_delimiter
addresses for other purposes as well, but when a lookup is made for
someone+someth...@domain.tld (some...@domain.tld exists in the db) it
finds only the catchall domain alias because of my query:

query = SELECT alias FROM alias WHERE address='%s' AND active='1'
UNION ALL SELECT alias FROM alias WHERE address='@%d' AND active='1'
AND NOT EXISTS (SELECT alias FROM alias WHERE address='%s' AND
active='1' UNION ALL SELECT username FROM mailbox WHERE username='%s'
AND active='1')

Is there a better way of doing this? Or do I have to somehow
manipulate %s to remove +part where it exists? I could use some hints.

Thank you very much.

Palica

Reply via email to