Проблема заключается в следующем:
обновился с exim 4.30-2 до exim 4.51-0, клиентские попытки отправить почту на сервер режектятся..
2005-05-19 16:05:06 H=domain.ru (192.168.1.120) [192.168.1.120] sender verify fail for <user1 на user.ru>: Unrouteable address
2005-05-19 16:05:06 H=domain.ru (192.168.1.120) [192.168.1.120] F=<user1 на user.ru> rejected RCPT <user2 на user.ru>: Sender verify failedпускаю exim -bd -d, наблюдаю:
9267 --------> mysqluser router <--------
9267 local_part=user1 domain=user.ru
9267 checking "condition"
9267 search_open: mysql "NULL"
9267 cached open
9267 search_find: file="NULL"
9267 key="SELECT home FROM users WHERE id='user1' AND mbox_host='user.ru' AND active='Y'" partial=-1 affix=NULL starflags=0
9267 LRU list:
9267 internal_search_find: file="NULL"
9267 type=mysql key="SELECT home FROM users WHERE id='user1' AND mbox_host='user.ru' AND active='Y'"
9267 database lookup required for SELECT home FROM users WHERE id='user1' AND mbox_host='user.ru' AND active='Y'
9267 MYSQL query: SELECT home FROM users WHERE id='user1' AND mbox_host='user.ru' AND active='Y'
9267 MYSQL using cached connection for host/base/user
9267 lookup yielded: /var/mail/virtual/user.ru/user1
9267 mysqluser router skipped: condition failure
9267 no more routers
9267 ----------- end verify ------------
9267 require: condition test failed
9267 LOG: MAIN REJECTпри этом с тем же конфигом exim 4.30-2 дает другой результат:
9246 --------> mysqluser router <--------
9246 local_part=user1 domain=user.ru
9246 checking "condition"
9246 search_open: mysql "NULL"
9246 cached open
9246 search_find: file="NULL"
9246 key="SELECT home FROM users WHERE id='user1' AND mbox_host='user.ru' AND active='Y'" partial=-1 affix=NULL starflags=0
9246 LRU list:
9246 internal_search_find: file="NULL"
9246 type=mysql key="SELECT home FROM users WHERE id='user1' AND mbox_host='user.ru' AND active='Y'"
9246 database lookup required for SELECT home FROM users WHERE id='user1' AND mbx_host='user.ru' AND active='Y'
9246 MYSQL query: SELECT home FROM users WHERE id='user1' AND mbox_host='user.ru' AND active='Y'
9246 MYSQL using cached connection for host/base/user
9246 lookup yielded: /var/mail/virtual/user.ru/user1
9246 calling mysqluser router
9246 mysqluser router called for user1 на user.ru
9246 domain = user.ru
9246 set transport mysql_delivery
9246 queued for mysql_delivery transport: local_part = user1
9246 domain = user.ru
9246 errors_to=NULL
9246 domain_data=NULL localpart_data=NULL
9246 routed by mysqluser router
9246 envelope to: user1 на user.ru
9246 transport: mysql_delivery
9246 ----------- end verify ------------
9246 sender user1 на user.ru verified ok
9246 require: condition test succeededроутер выглядит следующим образом:
mysqluser:
driver = accept
condition = ${if and {{!eq {}{${lookup mysql{SELECT home FROM users \
WHERE id='${local_part}' AND mbox_host='${domain}' \
AND active='Y'}}}} \
{match {$sender_address}{$authenticated_id}} \
}{yes}{no}}
transport = mysql_deliveryоба собирал для mail:mail(4.30 из исходников, 4.51 из портов), при получении писем exim'ом 4.51 от внешнего источника - все в порядке.. вопрос извечен: кто виноват и что делать? возможно что то в синтаксисе команд 4.51 поменялось, или разрешения какие поменять, но я видимо плохо искал - ничего не нашел.. сейчас откатил обратно, подозреваю что дело может быть в строчке роутера {match {$sender_address}{$authenticated_id}}}{yes}{no}}, хотя опять же с 4.30 все работает нормально..
как я и подозревал, мешала конструкция {match {$sender_address}{$authenticated_id}}}{yes}{no}}, роутер работает нормально в следующем виде
mysqluser:
driver = accept
condition = ${if !eq {}{${lookup mysql{SELECT home FROM users \
WHERE id='${local_part}' AND mbox_host='${domain}' \
AND active='Y'}}}{yes}{no}}
transport = mysql_delivery
однако теперь опять возникает проблема проверки соответствия идентификатора пользователя и адреса отправителя(некоторое время назад я ее решил той конструкцией, которую теперь пришлось удалить)..
временно прописал следующим образом:accept domains = +local_domains
authenticated = *
endpass
verify = recipient
condition = ${if and {{match {$sender_address_domain} \
{my\\.domain\\.ru|another\\.domain\\.ru}} \
{eq {$sender_address}{$authenticated_id}}} \
{yes}{no}}если у кого нибудь есть идеи более высокого порядка - милости прошу..