Exim Проблема с переменными в роутерах

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

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
CrazyPilot
ст. сержант
Сообщения: 321
Зарегистрирован: 2008-08-14 9:17:58
Откуда: Санкт-Петербург
Контактная информация:

Exim Проблема с переменными в роутерах

Непрочитанное сообщение CrazyPilot » 2008-09-01 10:07:57

Доброго времени суток, господа!

Почти домучал свой почтовик, но возникли проблемы, решение которых я не могу найти уже 3 день.

Прикрутил к экзиму софтину spamprobe, которая в письма сует заголовки с оценкой спама по баесу. Прикручена она через system filter.
Из-за этого, насколько я понял из документации, в роутере недоступны переменные $local_part и $domain. Точнее они содержат пустые значения. Как роутить в этом случае письма я так и не догнал. У меня стоит роутер:

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

spam_check_router:
  driver = accept
  domains = +local_domains
  # Кондишн проверяет условия и если они выполнены - письмо "доверенное", то есть в любом случае не спам.
  condition = ${if or{{match{$h_X-SpamProbe:}{GOOD}}{match_domain{$sender_address_domain}{+local_domains}}{eqi{${lookup pgsql{POSTGRESSQL_TEST_WHITE_OUT}}}{yes}}}{no}{yes}}
  transport = spam_check_delivery
Запрос к постгре выглядит так:

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

POSTGRESSQL_TEST_WHITE_OUT = select 'yes' AS answer from white_list where local_mail = \
                '${quote_pgsql:${local_part}}${quote_pgsql:@}${quote_pgsql:${domain}}' and \
                remote_mail = '${quote_pgsql:${sender_address_local_part}}${quote_pgsql:@}${quote_pgsql:${sender_address_domain}}' and \
                expire_date >= current_date
А после роутера spam_check_router идеи этот роутер:

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

dovecot_user:
  driver = accept
  transport = dovecot_delivery
  cannot_route_message = Unknown user
В транспорте dovecot_delivery используется ldap запрос, где юзаются $local_part и $domain - и там он нормально expand'ятся и письмо сваливается в inbox.
В debug'е экзима узрел что при попытке раскрыть $local_part, $domain, $sender_address_local_part, $sender_address_domain в кондишине spam_check_router экзим получает пустые переменные. Как решить данную проблему?

Вот debug экзима:

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

 1577 --------> spam_check_router router <--------
 1577 local_part=ldap domain=domain.ru
 1577 checking domains
 1577 domain.ru in "domain.ru"? yes (matched "domain.ru")
 1577 domain.ru in "+local_domains"? yes (matched "+local_domains")
 1577 checking "condition"
 1577 expanding: $h_X-SpamProbe:
 1577    result: SPAM 0,8284405 094ac894e95fe167eaf4d72c3b47822e
 1577 expanding: GOOD
 1577    result: GOOD
 1577 expanding: $sender_address_domain
 1577    result: domain.ru
 1577 expanding: +local_domains
 1577    result: +local_domains
 1577 domain.ru in "domain.ru"? yes (matched "domain.ru")
 1577 domain.ru in "+local_domains"? yes (matched "+local_domains")
 1577 expanding: ${local_part}
 1577    result:
 1577 skipping: result is not used
 1577 expanding: @
 1577    result: @
 1577 skipping: result is not used
 1577 expanding: ${domain}
 1577    result:
 1577 skipping: result is not used
 1577 expanding: ${sender_address_local_part}
 1577    result:
 1577 skipping: result is not used
 1577 expanding: @
 1577    result: @
 1577 skipping: result is not used
 1577 expanding: ${sender_address_domain}
 1577    result:
 1577 skipping: result is not used
 1577 expanding: select 'yes' AS answer from white_list where local_mail = '${quote_pgsql:${local_part}}${quote_pgsql:@}${quote_pgsql:${domain}}' and remote_mail = '${quote_pgsql:${sender_address_local_part}}${quote_pgsql:@}${quote_pgsql:${sender_address_domain}}' and expire_date >= current_date
 1577    result: select 'yes' AS answer from white_list where local_mail = '' and remote_mail = '' and expire_date >= current_date
 1577 skipping: result is not used
 1577 expanding: ${lookup pgsql{select 'yes' AS answer from white_list where local_mail = '${quote_pgsql:${local_part}}${quote_pgsql:@}${quote_pgsql:${domain}}' and remote_mail = '${quote_pgsql:${sender_address_local_part}}${quote_pgsql:@}${quote_pgsql:${sender_address_domain}}' and expire_date >= current_date}}
 1577    result:
 1577 skipping: result is not used
 1577 expanding: yes
 1577    result: yes
 1577 skipping: result is not used
 1577 condition: or{{match{$h_X-SpamProbe:}{GOOD}}{match_domain{$sender_address_domain}{+local_domains}}{eqi{${lookup pgsql{select 'yes' AS answer from white_list where local_mail = '${quote_pgsql:${local_part}}${quote_pgsql:@}${quote_pgsql:${domain}}' and remote_mail = '${quote_pgsql:${sender_address_local_part}}${quote_pgsql:@}${quote_pgsql:${sender_address_domain}}' and expire_date >= current_date}}}{yes}}}
 1577    result: true
 1577 expanding: no
 1577    result: no
 1577 expanding: yes
 1577    result: yes
 1577 skipping: result is not used
 1577 expanding: ${if or{{match{$h_X-SpamProbe:}{GOOD}}{match_domain{$sender_address_domain}{+local_domains}}{eqi{${lookup pgsql{select 'yes' AS answer from white_list where local_mail = '${quote_pgsql:${local_part}}${quote_pgsql:@}${quote_pgsql:${domain}}' and remote_mail = '${quote_pgsql:${sender_address_local_part}}${quote_pgsql:@}${quote_pgsql:${sender_address_domain}}' and expire_date >= current_date}}}{yes}}}{no}{yes}}
 1577    result: no
 1577 spam_check_router router skipped: condition failure
Направьте на путь истинный, плз :)

Хостинговая компания 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/
Выделенные сервера, Россия, Москва, от 2460 рублей (8 CPU, 8Gb RAM, 2x500Gb HDD, RAID 3ware 9750):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

CrazyPilot
ст. сержант
Сообщения: 321
Зарегистрирован: 2008-08-14 9:17:58
Откуда: Санкт-Петербург
Контактная информация:

Re: Exim Проблема с переменными в роутерах

Непрочитанное сообщение CrazyPilot » 2008-09-01 10:50:18

Ыыы, сорри :)

Проблема решена:

Exim не раскрывает переменные, так как если первое условие в or возвращает true - все условие будет true, поэтому exim не проверяет остальные условия и не раскрывает в них переменные, что в дебаге обозначено как skipping: result is not used