Страница 1 из 1

Написание кондишена

Добавлено: 2007-10-19 14:05:45
borisen
Добрый день.
Возникла необходимость написать (точнее подправить) кондишен... Но оказалось что у меня в эту сторону достаточно кривые руки :roll:

Итак есть вот что

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

  condition = "${if and {{!eq {$received_protocol}{spam-scanned}} \
                {!eq {$received_protocol}{local}} } {1}{0}}"
нада добиться чтоб этот кондишен проверял еще одно условие и если все условия = тру, то все ок :)
собственно это условие примерно такое: "Если адресат (recipient) есть в списке (файлик в текстовом формате с перечнем почтовых ящиков) то условие = тру, если нет то условие и весь кондишен = фалс"

Пробовал так:

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

condition = "${if and {{!eq {$received_protocol}{spam-scanned}} \
                {!eq {$received_protocol}{local}} {!eq {$local_part@$domain}{lsearch;/etc/mail/users}} }{1}{0}}"
Не отрабатывает, точнее не дает нужный результат. Пробовал и с знаком "!" и без него...

Помогите пожалуйста, ибо в кондишенах совсем слаб, или ткните носом где о них доступно написано
Заранее благодарен...

Re: Написание кондишена

Добавлено: 2007-10-19 14:09:47
dikens3
Не изобретай велосипед:

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

condition = "${if and {{!eq {$received_protocol}{spam-scanned}} \
                {!eq {$received_protocol}{local}} } {1}{0}}"
domains = +local_domains
local_parts = чё там хотел(типа: lsearch;/etc/mail/users)

Re: Написание кондишена

Добавлено: 2007-10-19 14:19:17
borisen
Нет, ну а если такая ситуация:
user1@domain1.ru есть в списке
user1@domain2.ru нет в списке

То предложенная Вами схема ошибочно пропустит user1@domain2.ru

Re: Написание кондишена

Добавлено: 2007-10-19 14:23:09
dikens3
Ну я имел ввиду не нужно всё пихать в один кондишен, раздели на несколько, понимать проще.
Вместо условия local_parts напиши свой кондишен. Можешь убрать проверку доменов.

Re: Написание кондишена

Добавлено: 2007-10-19 14:27:26
borisen
Каких-то особых указаний, что должны два кондишена отработать именно так как я описывал в первом посте, не нужно делать?

Да и вообще посоветуйте где можно почерпнуть знаний\умений по кондишенам...

Re: Написание кондишена

Добавлено: 2007-10-19 14:40:22
dikens3
Там нет ничего сложного:
В начале кондишена всегда стоит действие (warn, deny, accept и т.д.)
Оно будет выполнено после выполнения(т.е. true) всех условий в кондишене.

Здесь я описывал немного.
http://forum.lissyara.su/viewtopic.php? ... lit=verify

Re: Написание кондишена

Добавлено: 2007-10-19 14:52:34
borisen
dikens3 писал(а):Ну я имел ввиду не нужно всё пихать в один кондишен, раздели на несколько, понимать проще.
Вместо условия local_parts напиши свой кондишен. Можешь убрать проверку доменов.

Сделал так:

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

  condition = "${if and {{!eq {$received_protocol}{spam-scanned}} \
                {!eq {$received_protocol}{local}} } {1}{0}}"
  condition = ${if match {$local_part@$domain} {lsearch;/etc/mail/dspam_users} {yes}{no}}
Собственно как ты и говорил - два кондишена.

при рестарте ексима:

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

Starting exim.
2007-10-19 14:50:47 Exim configuration error in line 363 of /usr/local/etc/exim/configure:
  "condition" option set for the second time

Re: Написание кондишена

Добавлено: 2007-10-19 15:04:09
Alex Keda
уловие - в роутере?
инетерсно, почему об этом надо догадываться по коссвенным призанкам?
==========
в роутере - мона тока раз указывать.
прилепляй в тот, третьим...

Re: Написание кондишена

Добавлено: 2007-10-19 15:07:54
borisen
Извините, не знал что это существенно... Да ето речь идет о роутере...
но как его туда прилепить?
моя попытка:

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

condition = "${if and {{!eq {$received_protocol}{spam-scanned}} \
                {!eq {$received_protocol}{local}} {!eq {$local_part@$domain}{lsearch;/etc/mail/users}} }{1}{0}}"
не дает нужного результата... :(

Re: Написание кондишена

Добавлено: 2007-10-19 15:11:19
Alex Keda
а какой даёт?

Re: Написание кондишена

Добавлено: 2007-10-19 15:23:34
borisen
Кто дает? :)
вот эта моя попытка написания кондишена?
Если да, то ексим не реагирует на ее присутствие.
тоесть не зависимо от того есть user1@domain1.ru в списке или нет, этот роут не срабатывает...

Re: Написание кондишена

Добавлено: 2007-10-19 17:11:33
borisen
Ну что никто не поможет?

Re: Написание кондишена

Добавлено: 2007-10-19 23:34:44
borisen
Прет ребята :)
Я все таки добился своей цели...

знач так, кондишен который мне был нужен

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

  condition = "${if and { \
                {!eq {$received_protocol}{spam-scanned}} \
                {!eq {$received_protocol}{local}} \
                {match_address {$local_part@$domain}{wildlsearch;/etc/mail/dspam_users}} \
                } {1}{0}}"
вот собственно четвертая строчка это та строчка которой не хватало...

И так роут который нужен для ДСПАМ, чтоб он работал исключительно с теми ящиками которые указаны в файлике /etc/mail/dspam_users

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

dspam_spamscan_router:
  driver = accept
  domains                      = +local_domains
  no_verify
  condition = "${if and { \
                {!eq {$received_protocol}{spam-scanned}} \
                {!eq {$received_protocol}{local}} \
                {match_address {$local_part@$domain}{wildlsearch;/etc/mail/dspam_users}} \
                } {1}{0}}"
  transport = dspam_spamcheck_transport
  require_files = /usr/local/bin/dspam
  address_test = false
ПС: а вообще нужно читать мануалы... и учить буржуйский язык...
ППС: всем спасибо за помощь!

Re: Написание кондишена

Добавлено: 2007-10-22 12:06:06
Andy2k
Черт, скоро сломаю себе моск :)

Написал кондишен по мотивам изысканий автора темы.
Выглядит так:

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

  condition = ${if and { \
                {eq{$local_part}{to_all}{yes}{no}} \
                {match_address {$sender_address}{wildlsearch;/usr/local/etc/exim/to_all_users}} \
                } {1}{0}}
На что в логах exim такая ругань:

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

2007-10-22 12:58:29 failed to expand condition "${if and { {eq{$local_part}{to_all}{yes}{no}}
{match_address {$sender_address}{wildlsearch;/usr/local/etc/exim/to_all_users}} } {1}{0}}"
for all_mysql router: missing } at end of condition inside "and" group
никак не пойму - где ему скобки не хватает :oops:

ЗЫ: Скобки считал, стекла протирал, по колесам стучал - не помогает :mrgreen:

Re: Написание кондишена

Добавлено: 2007-10-22 12:22:17
dikens3
condition = ${if and { \
{eq{$local_part}{to_all}{yes}{no}} \
{match_address {$sender_address}{wildlsearch;/usr/local/etc/exim/to_all_users}} \
} {1}{0}}

Re: Написание кондишена

Добавлено: 2007-10-22 12:35:34
Andy2k
А чего там не так? :oops:
{yes}{no} - лишние?

Re: Написание кондишена

Добавлено: 2007-10-22 18:07:57
Wombat
Try this one

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

{if and{{eq{$local_part}{to_all}{true}{false}}{match_address {$sender_address}{wildlsearch;/usr/local/etc/exim/to_all_users}}}{1}{0}}