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

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

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
borisen
рядовой
Сообщения: 27
Зарегистрирован: 2007-10-18 14:54:35
Откуда: Киев
Контактная информация:

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

Непрочитанное сообщение borisen » 2007-10-19 14:05:45

Добрый день.
Возникла необходимость написать (точнее подправить) кондишен... Но оказалось что у меня в эту сторону достаточно кривые руки :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}}"
Не отрабатывает, точнее не дает нужный результат. Пробовал и с знаком "!" и без него...

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

Хостинговая компания 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/

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

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

Непрочитанное сообщение dikens3 » 2007-10-19 14:09:47

Не изобретай велосипед:

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

condition = "${if and {{!eq {$received_protocol}{spam-scanned}} \
                {!eq {$received_protocol}{local}} } {1}{0}}"
domains = +local_domains
local_parts = чё там хотел(типа: lsearch;/etc/mail/users)
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
borisen
рядовой
Сообщения: 27
Зарегистрирован: 2007-10-18 14:54:35
Откуда: Киев
Контактная информация:

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

Непрочитанное сообщение borisen » 2007-10-19 14:19:17

Нет, ну а если такая ситуация:
user1@domain1.ru есть в списке
user1@domain2.ru нет в списке

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

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

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

Непрочитанное сообщение dikens3 » 2007-10-19 14:23:09

Ну я имел ввиду не нужно всё пихать в один кондишен, раздели на несколько, понимать проще.
Вместо условия local_parts напиши свой кондишен. Можешь убрать проверку доменов.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
borisen
рядовой
Сообщения: 27
Зарегистрирован: 2007-10-18 14:54:35
Откуда: Киев
Контактная информация:

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

Непрочитанное сообщение borisen » 2007-10-19 14:27:26

Каких-то особых указаний, что должны два кондишена отработать именно так как я описывал в первом посте, не нужно делать?

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

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

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

Непрочитанное сообщение dikens3 » 2007-10-19 14:40:22

Там нет ничего сложного:
В начале кондишена всегда стоит действие (warn, deny, accept и т.д.)
Оно будет выполнено после выполнения(т.е. true) всех условий в кондишене.

Здесь я описывал немного.
http://forum.lissyara.su/viewtopic.php? ... lit=verify
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
borisen
рядовой
Сообщения: 27
Зарегистрирован: 2007-10-18 14:54:35
Откуда: Киев
Контактная информация:

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

Непрочитанное сообщение borisen » 2007-10-19 14:52:34

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

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35045
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

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

Непрочитанное сообщение Alex Keda » 2007-10-19 15:04:09

уловие - в роутере?
инетерсно, почему об этом надо догадываться по коссвенным призанкам?
==========
в роутере - мона тока раз указывать.
прилепляй в тот, третьим...
Убей их всех! Бог потом рассортирует...

Аватара пользователя
borisen
рядовой
Сообщения: 27
Зарегистрирован: 2007-10-18 14:54:35
Откуда: Киев
Контактная информация:

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

Непрочитанное сообщение borisen » 2007-10-19 15:07:54

Извините, не знал что это существенно... Да ето речь идет о роутере...
но как его туда прилепить?
моя попытка:

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

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

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35045
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

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

Непрочитанное сообщение Alex Keda » 2007-10-19 15:11:19

а какой даёт?
Убей их всех! Бог потом рассортирует...

Аватара пользователя
borisen
рядовой
Сообщения: 27
Зарегистрирован: 2007-10-18 14:54:35
Откуда: Киев
Контактная информация:

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

Непрочитанное сообщение borisen » 2007-10-19 15:23:34

Кто дает? :)
вот эта моя попытка написания кондишена?
Если да, то ексим не реагирует на ее присутствие.
тоесть не зависимо от того есть user1@domain1.ru в списке или нет, этот роут не срабатывает...

Аватара пользователя
borisen
рядовой
Сообщения: 27
Зарегистрирован: 2007-10-18 14:54:35
Откуда: Киев
Контактная информация:

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

Непрочитанное сообщение borisen » 2007-10-19 17:11:33

Ну что никто не поможет?

Аватара пользователя
borisen
рядовой
Сообщения: 27
Зарегистрирован: 2007-10-18 14:54:35
Откуда: Киев
Контактная информация:

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

Непрочитанное сообщение borisen » 2007-10-19 23:34:44

Прет ребята :)
Я все таки добился своей цели...

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

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

  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
ПС: а вообще нужно читать мануалы... и учить буржуйский язык...
ППС: всем спасибо за помощь!

Аватара пользователя
Andy2k
ефрейтор
Сообщения: 69
Зарегистрирован: 2007-08-06 16:14:12

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

Непрочитанное сообщение Andy2k » 2007-10-22 12:06:06

Черт, скоро сломаю себе моск :)

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

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

  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:

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

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

Непрочитанное сообщение dikens3 » 2007-10-22 12:22:17

condition = ${if and { \
{eq{$local_part}{to_all}{yes}{no}} \
{match_address {$sender_address}{wildlsearch;/usr/local/etc/exim/to_all_users}} \
} {1}{0}}
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
Andy2k
ефрейтор
Сообщения: 69
Зарегистрирован: 2007-08-06 16:14:12

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

Непрочитанное сообщение Andy2k » 2007-10-22 12:35:34

А чего там не так? :oops:
{yes}{no} - лишние?

Wombat
рядовой
Сообщения: 13
Зарегистрирован: 2007-09-14 18:16:44

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

Непрочитанное сообщение Wombat » 2007-10-22 18:07:57

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}}