Hello again,

as i didn't work on Postfix over the last year i've been digging
around the config and the manuals at postfix.org before choosing any
of the previously exposed options.

By now, i was trying to go for option two so i created a specific user
for each of the domain managed by Postfix mta. The idea is to let the
vacation script to make use of this user to authenticate against
Postfix while trying to send the vacation email. As this Postfix
instance manages multiple domains i've updated the script so it uses
the appropriate user to authenticate against Postfix depending on the
recipient's domain. Ie, recipient u...@example.com has vacation mode
on, then the vacation script tries t login against Postfix through
vacat...@example.com but if us...@example.eu has vacation mode on then
vacation script would try to login against Postfix as
vacat...@example.eu.

While previous behaviour works fine i'm having issues exposing
vacat...@example.com as owner of the recipient address. I mean, my
Postfix instance has enforce
reject_authenticated_sender_login_mismatch
 as smtpd_sender_restrictions so i created so i've added the following
statement smtpd_sender_login_maps =
proxy:mysql:/etc/postfix/mysql_sender_login_maps.cf which implements
the following query:
SELECT
IF( STRCMP('%s',CONCAT_WS('@','vacation', '%d') )=0,
CONCAT_WS( ',','vacation@%d', CONCAT_WS( ',','%s', GROUP_CONCAT(a.mail
SEPARATOR ',') ) ),
CONCAT_WS(',','%s', GROUP_CONCAT(a.mail SEPARATOR ', ') )
)AS id
FROM `users` AS u
LEFT JOIN `aliases` AS a
ON LOCATE( u.id, a.destination ) AND a.enabled IS TRUE
WHERE u.id = '%s'
AND u.enabled IS TRUE
GROUP BY u.id

As you can see this query searches %s in users table, also searches %s
in aliases table so if %s matches destination inside aliases then %s
will be granted to send emails on behalf aliases.mail (from email
address). Last, this query tries to know if vacation user tries to
send an email, if so then it will always get granted as owner.
Although the SQL sentence works fine, i need in the SQL sentence the
user used to authenticate against Postfix. So my questions are:
* Is it possible to pass as parameter or whatever the user used to
authenticate against Postfix? Which will not always match the from
email address. I would like to know if vacation user was the one who
tried to send the email, if so i will always grant sending on behalf
someone else.
*Is it possible to authenticate against Postfix through the crypted
password? I mean, once i know the from address, vacation script can
login into MySQL, get his crypted password and then try to
authenticate through a custom SQL query or whatever using this crypted
password and finally try to send the email. This way
reject_authenticated_sender_login_mismatch won't jump.

Last option is to send the email through the sendmail binary but i
would like to be able to use the authenticate behaviour. If someone
knows a better way to authenticate just let me know.

Hope someone can help to solve this doubts.

Sincerely,

On Wed, Mar 9, 2016 at 1:37 PM, Pau Peris <p...@webeloping.es> wrote:
> Ok, thanks!!
>
> On Tue, Mar 8, 2016 at 8:36 PM, Wietse Venema <wie...@porcupine.org> wrote:
>> The third option was:
>> - submit autoreplies with /usr/sbin/sendmail instead of SMTP.
>>
>> Pau Peris:
>>> If i'd go by the third option, sending through sendmail instead of
>>> SMTP, i would loose the headers automatically set by Postfix.
>>
>> Wietse:
>>> Where did you get that idea from?
>>
>> Pau Peris:
>>> I'm sorry, i think i completely missunderstood option 3. I thought
>>> using sendmail would bypass Postfix completely. I assume this is wrong
>>> and it will still make use of Postfix mta? So it makes no difference
>>> on using sendmail or SMTP at "application/programming language" level?
>>
>> /usr/sbin/sendmail should be part of Postfix, or at least a symlink
>> that points to some part of Postfix.
>>
>> Wietse

Reply via email to