[exim-conf] вопрос про дополнительный хост для confSMTP_AUTH_SMTPTLS_HOST

Victor Ustugov victor на corvax.kiev.ua
Вт Окт 28 09:17:38 EET 2008


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




Подробная информация о списке рассылки exim-conf