Мысль с address_data принесла свои плоды: begin routers smart_host: driver = manualroute transport = remote_smtp domains = ! +local_domains address_data = ${lookup{$domain}lsearch*{CONFDIR/smart-hosts} {${extract{auth}{$value} {auth-key=${quote:$value}}}}} route_data = ${lookup{$domain}lsearch*{CONFDIR/smart-hosts} {${extract{endpoints}{$value} {${sg{${sg{$value}{\N\^\N}{::}}}{,}{:}}}}}{}} verify = no
begin transports remote_smtp: driver = smtp hosts_require_auth = ${extract{auth-key}{$address_data}{${lookup{${quote:$value}}lsearch{CONFDIR/auth-virtual-client} {$host} {}}}} begin authenticators login: driver = plaintext client_send = ${extract{auth-key}{$address_data}{${lookup{${quote::$value}}lsearch{CONFDIR/auth-virtual-client} {${extract{1}{::}{$value} {$value}{}}} {}}}} : ${extract{auth-key}{$address_data}{${lookup{${quote::$value}}lsearch{CONFDIR/auth-virtual-client} {${extract{2}{::}{$value} {$value}{}}} {}}}} public_name = LOGIN server_condition = ${lookup{$auth1}lsearch{CONFDIR/auth-virtual-server} {${if crypteq{$auth2}{$value}}} {false}} server_prompts = User Name : Password plain: driver = plaintext client_send = ${extract{auth-key}{$address_data}{${lookup{${quote::$value}}lsearch{CONFDIR/auth-virtual-client} {${reduce{$value}{}{$value^$item}}} {}}}} public_name = PLAIN server_condition = ${lookup{$auth2}lsearch{CONFDIR/auth-virtual-server} {${if crypteq{$auth3}{$value}}} {false}} # cat smart-hosts a: endpoints=a.org,b.org auth=mail.p.nyaka.org b: endpoints=a.org,b.org^587,c.org^2025 auth="mail.p.nyaka org" *: endpoints=mail.p.nyaka.org auth=mail.p.nyaka.org # cat auth-virtual-client mail.p.nyaka.org:login:password login аутентификатор выглядит... несколько громоздко, но в целом работает все так как и хотелось/ожидалось. Даже perl расчехлять не пришлось. :) > On Jun 15, 2016, at 5:33 PM, Dmitry Bogun <surabu...@surabujin.org.ua> wrote: > > >> On Jun 15, 2016, at 3:04 PM, George L. Yermulnik <y...@yz.kiev.ua> wrote: >> >> Hello! >> >> On Wed, 15 Jun 2016 at 14:23:17 (-0500), Dmitry Bogun wrote: >> >>> Проблема в том, что mail.p.nyaka.org - это CNAME(этого я изменить не могу) >> >> RFC уже не в моде =( > > Который именно? Это ж "ручной" роутинг, кто нам тут что запрещает? > Единственный "запрет" на CNAME в отношении почты, который я помню - для MX > записей. И то там не запрет, а "особое" поведение в случае CNAME. > >>> И вот я не могу придумать как это исправить... "убрать" cname из имени >>> которое используется для smart-host'ов я не могу, отказаться от авторизации >>> на них тоже, плюс cname время от времени меняется, что отменяет возможность >>> "разрешить" его заранее и пользовать ip адрес вместо имени хоста. >> >> Как подручная затычка: с периодичностью меньше самого минимального ttl >> из всех используемых smart-host'ов прогонять цикл, который будет >> резолвить cname (например, с помощью `dig +norecurse +short smart-host') >> и записывать в CONFDIR/auth-virtual-client >> Судя по всему, в итоге получится не однострочник, а целый скриптик с >> проверками, но, если цель оправдывает средства, то почему бы и нет =) > > Тоже вариант. Но мне он не нравится. Не люблю я poll скрипты. > > На сейчас есть 2 недодуманные идеи: > - в smart_host роутере добавлять в address_data ключик, куда он нас отроутил, > и потом уже по этому ключу искать login/password > - извращаться через lookup dnsdb и "ловить" совпадение адресов. (Правда > match_ip ограничили в возможностях, есть подозрение что теперь такой "трюк" > будет уже невозможен). > > Еще можно зайти по крупному и "взять" в руки perl. > > _______________________________________________ > Exim-users mailing list > Exim-users@mailground.net > http://mailground.net/mailman/listinfo/exim-users > _______________________________________________ Exim-users mailing list Exim-users@mailground.net http://mailground.net/mailman/listinfo/exim-users