Совместить два кондишена

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

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
storm
рядовой
Сообщения: 48
Зарегистрирован: 2008-09-26 16:04:39
Откуда: Киев
Контактная информация:

Совместить два кондишена

Непрочитанное сообщение storm » 2010-07-23 16:21:47

Копирую почту которая набрала определенное число спам очков. Однако в ящик падают письма для тех юзеров которых уже давно нет. Необходимо также проверять наличие самого юзера.

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

${if and {{>{$acl_m0}{0}}{<{$acl_m0}{60}}}{yes}{no}}

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

${lookup mysql{SELECT username from mailbox WHERE username='${quote_mysql:$local_part@$domain}' AND active='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/

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

Re: Совместить два кондишена

Непрочитанное сообщение Alex Keda » 2010-07-23 18:12:33

показывайте, как пытаетесь
Убей их всех! Бог потом рассортирует...

Аватара пользователя
storm
рядовой
Сообщения: 48
Зарегистрирован: 2008-09-26 16:04:39
Откуда: Киев
Контактная информация:

Re: Совместить два кондишена

Непрочитанное сообщение storm » 2010-07-24 10:14:32

Alex Keda писал(а):показывайте, как пытаетесь

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

message_copy_mini_spam:
    driver = redirect
    domains = +local_domains
    condition     = ${if and {{{>{$acl_m0}{0}}{<{$acl_m0}{60}}} \
                {${lookup mysql{SELECT username from mailbox WHERE \
                username='${quote_mysql:$local_part@$domain}' AND active='1'}}}}{yes}{no}}
    data = test@example.com
    unseen
В логах

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

2010-07-24 10:00:52 [21954] failed to expand condition "${if and {{{>{$acl_m0}{0}}{<{$acl_m0}{60}}} {${lookup mysql{SELECT username from mailbox WHERE username='${quote_mysql:$local_part@$domain}' AND active='1'}}}}{yes}{no}}" for message_copy_mini_spam router: condition name expected, but found "{>{$acl_m0}{0}}{" inside "and{...}" condition

Аватара пользователя
storm
рядовой
Сообщения: 48
Зарегистрирован: 2008-09-26 16:04:39
Откуда: Киев
Контактная информация:

Re: Совместить два кондишена

Непрочитанное сообщение storm » 2010-07-24 11:42:04

Еще пробовал вот так

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

${if and {{>{$acl_m0}{0}}{<{$acl_m0}{60}} \
                {lookup mysql{SELECT username from mailbox WHERE \
                 username='${quote_mysql:$local_part@$domain}' AND active='1'}}}{yes}{no}}
В логах

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

2010-07-24 11:06:45 [22890] failed to expand condition "${if and {{>{$acl_m0}{0}}{<{$acl_m0}{60}} {lookup mysql{SELECT username from mailbox WHERE username='${quote_mysql:$local_part@$domain}' AND active='1'}}}{yes}{no}}" for message_copy_mini_spam router: unknown condition "lookup" inside "and{...}" condition

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

${if and {{>{$acl_m0}{0}}{<{$acl_m0}{60}} \
                ${lookup mysql{SELECT username from mailbox WHERE \
                username='${quote_mysql:$local_part@$domain}' AND active='1'}}}{yes}{no}}
В логах

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

2010-07-24 11:10:43 [23010] failed to expand condition "${if and {{>{$acl_m0}{0}}{<{$acl_m0}{60}} ${lookup mysql{SELECT username from mailbox WHERE username='${quote_mysql:$local_part@$domain}' AND active='1'}}}{yes}{no}}" for message_copy_mini_spam router: each subcondition inside an "and{...}" condition must be in its own {}

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

Re: Совместить два кондишена

Непрочитанное сообщение Alex Keda » 2010-07-24 21:51:46

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

Аватара пользователя
storm
рядовой
Сообщения: 48
Зарегистрирован: 2008-09-26 16:04:39
Откуда: Киев
Контактная информация:

Re: Совместить два кондишена

Непрочитанное сообщение storm » 2010-07-25 22:06:57

Alex Keda писал(а):чё-то у вас странное понаписано.
попробуйте простые условия скомбинировать, а потом лукап туда воткнуть
он, ксати,будет как mysql заучать, помоему.
так что вам ещё и в доку, за примерами.
Так простое двойное условие работает, помог составить dikens3 - http://forum.lissyara.su/viewtopic.php?f=20&t=26980
И лукап работает. А вот совместить в одном кондишене двойное условие и лукап у меня, к сожалению, не получается.

Аватара пользователя
Urgor
лейтенант
Сообщения: 677
Зарегистрирован: 2006-03-14 16:30:18
Откуда: Гилея (СПб)
Контактная информация:

Re: Совместить два кондишена

Непрочитанное сообщение Urgor » 2010-07-26 6:54:15

А если так переписать:

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

message_copy_mini_spam:
    driver = redirect
    domains = +local_domains
    condition     = ${if and {{>{$acl_m0}{0}}{<{$acl_m0}{60}}}{yes}{no}}
    condition     = ${if eq{} {${lookup mysql{SELECT username from mailbox WHERE username='${quote_mysql:$local_part@$domain}' AND active='1'}}}{yes}{no}}
    data = test@example.com
    unseen
Власть в руках у чужаков, и ты им платишь дань...

Аватара пользователя
storm
рядовой
Сообщения: 48
Зарегистрирован: 2008-09-26 16:04:39
Откуда: Киев
Контактная информация:

Re: Совместить два кондишена

Непрочитанное сообщение storm » 2010-07-26 9:09:12

Urgor писал(а):А если так переписать:

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

message_copy_mini_spam:
    driver = redirect
    domains = +local_domains
    condition     = ${if and {{>{$acl_m0}{0}}{<{$acl_m0}{60}}}{yes}{no}}
    condition     = ${if eq{} {${lookup mysql{SELECT username from mailbox WHERE username='${quote_mysql:$local_part@$domain}' AND active='1'}}}{yes}{no}}
    data = test@example.com
    unseen
Дело в том, что в роутерах два кондишена задавать нельзя.

blade_007
ст. прапорщик
Сообщения: 571
Зарегистрирован: 2010-03-12 12:59:08
Контактная информация:

Re: Совместить два кондишена

Непрочитанное сообщение blade_007 » 2010-07-26 9:33:22

Попробуйте так. Заодно уточните в доке 11.7 и 11.8

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

${if and {\
{>{$acl_m0}{0}} \
{<{$acl_m0}{60}} \
{$eq{} {${lookup mysql{SELECT username from mailbox WHERE username='${quote_mysql:$local_part@$domain}' AND active='1'}}}}\
}\
}

Аватара пользователя
storm
рядовой
Сообщения: 48
Зарегистрирован: 2008-09-26 16:04:39
Откуда: Киев
Контактная информация:

Re: Совместить два кондишена

Непрочитанное сообщение storm » 2010-07-26 11:12:34

blade_007 писал(а):Попробуйте так.

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

${if and {\
{>{$acl_m0}{0}} \
{<{$acl_m0}{60}} \
{$eq{} {${lookup mysql{SELECT username from mailbox WHERE username='${quote_mysql:$local_part@$domain}' AND active='1'}}}}\
}\
}

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

2010-07-26 11:08:59 [21998] failed to expand condition "${if and {{>{$acl_m0}{0}} {<{$acl_m0}{60}} {$eq{} {${lookup mysql{SELECT username from mailbox WHERE username='${quote_mysql:$local_part@$domain}' AND active='1'}}}}}}" for message_copy_mini_spam router: condition name expected, but found "$eq{} {${lookup " inside "and{...}" condition
Заодно уточните в доке 11.7 и 11.8
А что там уточнять?
По моему написано вполне кратко и лаконично
and {{<cond1>}{<cond2>}...}
Подусловия оцениваются слева направо. Условие исинно, если все подусловия верны. Если тут несколько подусловий “match”, то значения числовых переменных берутся от последнего. Если найдено ложное подусловие, то остальные парсятся, но не оцениваются.

blade_007
ст. прапорщик
Сообщения: 571
Зарегистрирован: 2010-03-12 12:59:08
Контактная информация:

Re: Совместить два кондишена

Непрочитанное сообщение blade_007 » 2010-07-26 14:51:36

вот рабочий вариант

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

${if and{{>{20}{0}}{eq{1}{${lookup mysql{SELECT 1 from users WHERE id='jack'}}}}}}
по крайней мере exim -be не жалуется

Аватара пользователя
storm
рядовой
Сообщения: 48
Зарегистрирован: 2008-09-26 16:04:39
Откуда: Киев
Контактная информация:

Re: Совместить два кондишена

Непрочитанное сообщение storm » 2010-08-09 14:17:25

Вот так у меня заработало:

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

condition     = ${if and {\
                    {eq{$acl_m3}{0}}\
                    {>{$acl_m0}{0}}\
                    {<{$acl_m0}{60}}\
                    {!eq{}{${lookup mysql{SELECT username from mailbox WHERE username='${quote_mysql:$local_part@$domain}' AND active='1'}}}}\
                }}