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.
когда потестишь предложенную схему, маякни.
--
Best wishes Victor Ustugov mailto:victor на corvax.kiev.ua
public GnuPG/PGP key: http://victor.corvax.kiev.ua/corvax.asc
ICQ UIN: 77186900, 32418694 nic-handle: CRV2-RIPE, CRV-UANIC