dbpath = /etc/postfix/private/mail.sqlite query = SELECT substr((100 + coalesce(A1.addRcNum, D1.domRcNum)), 2, 2) || '-' || (SELECT rcName FROM RClass WHERE rcNum=coalesce(A1.addRcNum, D1.domRcNum)) FROM Address AS A1 JOIN Domain AS D1 ON A1.addDomNum=D1.domNum WHERE A1.active!=0 AND D1.active!=0 AND A1.addLocalpart IS '%u' AND D1.domName IS '%d' # Postfix smtpd(8) access(5) lookups for email addresses # Case 1: smtpd searches for user-exten@domain # Case 2: smtpd searches for user@domain # Case 3: smtpd searches for domain (%u is suppressed) # This query will match without ever going to Case 3. If there is an # extension, it won't match unless user-exten@domain is in the Addresses # table. In most cases, it is not. # # We take the first non-null value from addRcNum then domRcNum. It's # padded with a leading zero if under 10 (we only have values from 0-50 # as rcNum.) We add a hyphen, then look up our number's rClassName in # the subquery. result_format = RC%s # BUG: This does not work for a catchall address. See # access-rcptDomain.query for the solution, or better yet, do not use # catchalls!