Victor Ustugov пишет:
> Nikolai V. Ivanyushin wrote:
>> Здоров, аксакалы.
>> привет
>>> Вить, а вот имею вопрос по паровозу.
>> У меня есть хост у которого написано:
>> define(`confSTARTTLS', `YES')
>> define(`confSMTP_AUTH', `YES')
>> define(`confSMTP_AUTH_RESTRICT', `DISABLE_AUTH_WITHOUT_TLS')
>> define(`confSMTP_AUTH_SOURCE', `SMTPTLS')
>> define(`confSMTP_AUTH_SMTPTLS_HOST', `mail.domain1.tld')
>> define(`confSMTP_AUTH_SMTP_MECH', `LOGIN')
>> confSMTP_AUTH_SMTP_MECH нужен только при SMTP в confSMTP_AUTH_SOURCE.
> при указании SMTPTLS нет необходимости указывать метод аутентификации в
> явном виде.
>>> И вот случилось так, что для еще одного домена надо в другом месте
>> проверять smtp_auth_tls_host, т.е. что-то типа конструкции:
>> define(`confSTARTTLS', `YES')
>> define(`confSMTP_AUTH', `YES')
>> define(`confSMTP_AUTH_RESTRICT', `DISABLE_AUTH_WITHOUT_TLS')
>> define(`confSMTP_AUTH_SOURCE', `SMTPTLS')
>> define(`confSMTP_AUTH_SMTPTLS_HOST', `mail.domain1.tld')
>> define(`confSMTP_AUTH_SMTP_MECH', `LOGIN')
>> define(`confSMTP_AUTH_SMTPTLS_HOST2', `mail.doman2.tld')
>> define(`confSMTP_AUTH_SMTP_MECH2', `LOGIN')
>> Возможно такое?
>> И если этих хостов больше чем два, то что тогда делать?
>>>> PS. Под другим доменом имеется в виду другая доменная часть smtp-логина.
>> паровоз при этом можно использовать почти без переделок.
>> я лишь в паре мест заменил компиляцию параметра, отвечающего за скипание
> TLS, на вычисление его значения при каждой попытке аутентификации.
>> т. е. я заменил
>> server_condition = ${perl{smtptls_login}\
> {confSMTP_AUTH_SMTPTLS_HOST}{confSMTP_AUTH_SMTPTLS_PORT}{ifelse(confSMTP_AUTH_SMTPTLS_NOTLS,
> `NO', `0', `1')}{$qualify_domain}{$auth1}{$auth2}}
>> на
>> server_condition = ${perl{smtptls_login}\
> {confSMTP_AUTH_SMTPTLS_HOST}{confSMTP_AUTH_SMTPTLS_PORT}{${if
> eq{confSMTP_AUTH_SMTPTLS_NOTLS}{NO}{0}{1}}}{$qualify_domain}{$auth1}{$auth2}}
>>> это был пример для метода LOGIN.
>> теперь в качестве значений переменных confSMTP_AUTH_SMTPTLS_HOST,
> confSMTP_AUTH_SMTPTLS_PORT и confSMTP_AUTH_SMTPTLS_NOTLS можно применять
> не статический текст, а лукапы в отдельный файл со списком внешних SMTP
> серверов, портов и признаков скипания TLS.
>> пример:
>> client_smtp_auth_db:
> domain1.tld:mail.domain1.tld:25:NO
> domain2.tld:mail.domain2.tld:25:NO
>> define(`confSMTP_AUTH_SMTPTLS_HOST',`${extract{1}{:}{${lookup{${domain:$auth1}}lsearch{CONFDIR/client_smtp_auth_db}}}}')
>> define(`confSMTP_AUTH_SMTPTLS_PORT',`${extract{2}{:}{${lookup{${domain:$auth1}}lsearch{CONFDIR/client_smtp_auth_db}}}}')
>> define(`confSMTP_AUTH_SMTPTLS_NOTLS',`${extract{3}{:}{${lookup{${domain:$auth1}}lsearch{CONFDIR/client_smtp_auth_db}}}}')
>>>> правда есть подводный камень. при использовании методов аутентификации
> LOGIN и PLAIN клиентские логины и пароли передатюся в разных переменных
> ($auth1 и $auth2 для метода LOGIN и $auth2 и $auth3 для метода PLAIN).
> поэтому конструкция лукапа будет более громоздкой. с другой стороны, ты
> используешь дефолтовые значения confSMTP_AUTH_SMTPTLS_PORT и
> confSMTP_AUTH_SMTPTLS_NOTLS. поэтому громоздкой конструкция лукапа будет
> только для confSMTP_AUTH_SMTPTLS_HOST:
>> define(`confSMTP_AUTH_SMTPTLS_HOST',`${extract{1}{:}{${lookup{${domain:${if
> eq{$auth3}{}{$auth1}{$auth2}}}}lsearch{CONFDIR/client_smtp_auth_db}}}}')
>> значения confSMTP_AUTH_SMTPTLS_PORT и confSMTP_AUTH_SMTPTLS_NOTLS можешь
> не указывать.
>>> все это я не тестировал, а писал прямо в письмо.
>> если не будешь делать вычисляемым значение confSMTP_AUTH_SMTPTLS_NOTLS,
> то можешь вышеуказанную конструкцию для confSMTP_AUTH_SMTPTLS_HOST
> использовать на любом паровозе.
>> если же захочешь читать из файла и значение для
> confSMTP_AUTH_SMTPTLS_HOST, то тебе придется обновить паровоз до 4.69.
>>> когда потестишь предложенную схему, маякни.
>ну, вот потестил. Добавил в конфиге(site/conf) по совету Виктора к
имеющемуся:
define(`confSTARTTLS', `YES')
define(`confSMTP_AUTH', `YES')
define(`confSMTP_AUTH_RESTRICT', `DISABLE_AUTH_WITHOUT_TLS')
define(`confSMTP_AUTH_SOURCE', `SMTPTLS')
define(`confSMTP_AUTH_SMTPTLS_HOST', `mail.domain1.tld')
ровно одну строку:
define(`confSMTP_AUTH_SMTPTLS_HOST',`${extract{1}{:}{${lookup{${domain:${if
eq{$auth3}{}{$auth1}{$auth2}}}}lsearch{CONFDIR/client_smtp_auth_db}}}}')
Затем создал файл client_smtp_auth_db:
domain1.tld:mail.domain1.tld
domain2.tld:mail.domain2.tld
И все заработало.
--
SY
Nikolai