Router.. баг эксима ?

EXIM, sendmail, postfix, Dovecot и прочие. Решение проблем связанных с работой электронной почты

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
neyro
сержант
Сообщения: 187
Зарегистрирован: 2008-03-07 20:24:25
Контактная информация:

Router.. баг эксима ?

Непрочитанное сообщение neyro » 2008-08-16 17:34:04

Вобщем имеем некий конфиг (содраный у Лиссяры) с начислением балов, в роутах отдельный транспорт для спама:
mysqluser_spam:
driver = accept
domains = +local_domains
condition = ${if match{$h_X-Spam:}{YES}}
transport = mysql_spam_delivery
no_more
Если он в таком виде то все ок, но как только выделенную строку меняем на ${if >{$acl_m0}{59}{yes}{no}} для того, чтобы проверка была независима от хеадеров( кстати еще 1 баг нашел - если проводить сравнение с переменными на спам не в acl_check rcpt, а в acl check data\mime то эксим не может определить адрес local_part и домен в роуте(про то, что получателей может быть несколько и соответственно нужного там значения не будет знаю, но криво работает даже при 1 получателе) получаю в логах следующее:
2008-08-16 18:14:11 Delay 35s (spam counter = 350; white host = 0, spec symbol=1) for bsn-142-146-165.dial-up.dsl.siol.net [89.142.146.165] with HELO=Dell. Mail from |a.k.newton@wn.com.au to design@xxx.ru.
2008-08-16 18:14:17 1KUMXX-000AWE-H0 <= tequila@bcinternet.net H=(tycoon-78fae18a) [89.218.99.160] I=[85.21.126.90]:25 P=esmtp S=845 id=01c8ffc3$82e7e400$a063da59@tequila from <tequila@bcinternet.net> for contact@xxx.ru contact@xxx.ru
2008-08-16 18:14:17 1KUMXX-000AWE-H0 == contact@xxx.ru R=mysqluser_spam T=mysql_spam_delivery defer (-21): appendfile: file or directory name "" is not absolute
Мой домен -xxx.ru адреса contact@xxx.ru не существует.
Т.е. не срабатывает проверка, почему- не ясно

Код: Выделить всё

 accept  domains       = +local_domains
          endpass
          message       = "Unknown user for this domain"
          verify        = recipient
Хелп..как можно пофиксить...в чем может быть проблема ? (в случае работы с ошибкой куча спама не зарезаного по спам листам валится в очередь и висит там вечно т.к. адреса то нет такого.)
Последний раз редактировалось neyro 2008-08-17 1:12:01, всего редактировалось 1 раз.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: Router.. баг эксима ?

Непрочитанное сообщение dikens3 » 2008-08-16 20:32:01

в acl check data\mime то эксим не может определить адрес local_part и домен в роуте
В документации об этом сказано, не помню где.

Код: Выделить всё

      set acl_m4    = $local_part
      set acl_m5    = $domain 
И потом работай с переменными.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

neyro
сержант
Сообщения: 187
Зарегистрирован: 2008-03-07 20:24:25
Контактная информация:

Re: Router.. баг эксима ?

Непрочитанное сообщение neyro » 2008-08-17 1:06:38

Получатель может быть не один и как результат некоторым письмо не прийдет, или я ошибаюсь ?
В конфиге Лиссяры похожее видел, но в русс версии доков упоминаний про это нет (по крайней мере в блоке acl)
Но основная проблема не в этом...вопрос в том почему роут работает не правильно если ставить условие на проверку acl_m0 вместо хеадера.

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: Router.. баг эксима ?

Непрочитанное сообщение dikens3 » 2008-08-17 8:23:17

neyro писал(а):Получатель может быть не один
Переменная recipients содержит всех получателей.
neyro писал(а):Но основная проблема не в этом...вопрос в том почему роут работает не правильно если ставить условие на проверку acl_m0 вместо хеадера.
Да хз. Отладку посмотри (принудительно задай где-нибудь переменнную к примеру).
Попробуй работу условия в acl_smtp_rcpt:

Код: Выделить всё

warn
set acl_m0    = 60
condition = ${if >{$acl_m0}{59}{yes}{no}}
logwrite = :panic: "Привет мир!!!"
P.S. Если не работает условие думай почему:
1. Проблема с логикой твоего условия. (может где-то что-то забыл, синтаксис неверный и т.п.)
2. Проблема с переменнной.(Возможно переменные обнуляются при передаче письма в транспорт? есть ещё acl_c0.)
3. В данном месте конструкция не употребляется.
...
и т.д.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

neyro
сержант
Сообщения: 187
Зарегистрирован: 2008-03-07 20:24:25
Контактная информация:

Re: Router.. баг эксима ?

Непрочитанное сообщение neyro » 2008-08-17 9:28:08

Так выглядит баг:
checking "condition"
calling mysqluser_spam router
mysqluser_spam router called for yana@niia.ru
domain = xxx.ru
set transport mysql_spam_delivery
queued for mysql_spam_delivery transport: local_part = yana
domain = xxx.ru
errors_to=NULL
domain_data=NULL localpart_data=NULL
routed by mysqluser_spam router
envelope to: yana@xxx.ru
transport: mysql_spam_delivery
А так норм проверка через хеадер:
checking "condition"
mysqluser_spam router skipped: condition failure
Добавил: как я раньше не понял...
Вобщем эксим судя по всему проверку на существование юзера делает по роутерам, а т.к. там условие на проверку только моей переменной про спам то она обычно проходит и делается вывод. что юзер существует(хотя абсолютно непонятно почему в случае проверки хеадера провека на существование юзера как -будто тоже проводится), 2 кондишена в роутах юзать нельзя, был бы очень благодарен если бы кто-нибудь объеденил 2 этих условия в 1 (сначала проверка на спам, потом на существование юзера).
Проверка на спам:
${if >{$acl_m0}{59}{yes}{no}}

Проверка на юзера:
${if eq{}{${lookup mysql{SELECT `maildir` FROM `mailbox` \
WHERE `username`='${quote_mysql:$local_part@$domain}'}}}{no}{yes}}

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: Router.. баг эксима ?

Непрочитанное сообщение dikens3 » 2008-08-18 9:12:59

Код: Выделить всё

MYSQL_USERS = SELECT `maildir` FROM `mailbox` WHERE `username`='${quote_mysql:$local_part@$domain}'

...
mysqluser_spam:
driver = accept
domains = +local_domains
condition = ${if >{$acl_m0}{59}{yes}{no}}
local_parts = ${lookup mysql{MYSQL_USERS}}
transport = mysql_spam_delivery
no_more
Лучше наверное проверку переменной делать первой (до обращения к mysql), чтобы mysql поменьше дёргать.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

neyro
сержант
Сообщения: 187
Зарегистрирован: 2008-03-07 20:24:25
Контактная информация:

Re: Router.. баг эксима ?

Непрочитанное сообщение neyro » 2008-08-19 22:11:42

Спасибо за помощь. Добавил к роуту no_expn no_verify - это решило проблему(за счет этих переменных роутер пропускается при проверке на существование юзера), но все же не понятно, почему в старом варианте юзеры проверялись правильно.