divert(-1) # # Copyright (c) 2003, 2004 Victor Ustugov # This hack is under BSD License # Redistributions of source code must retain the above copyright notice # # hacks disscussion's maillist - http://www.mta.org.ua/mailman/listinfo/sendmail-conf # # # QueueGroup # # раскладывание исходящей почты по очередям в зависимости от адреса/домена отправителя/получателя # dnl # испольование: HACK(`queuegroup', [], [[], [[], []]]) dnl # dnl # - критерий выбора группы очередей; dnl # по умолчанию адрес получателя; dnl # возможные значения: dnl # $&f - адрес отправителя dnl # $&{client_addr} - IP адрес рилея dnl # $&{client_name} - имя хоста рилея dnl # $&{auth_authen} - логин, использованный при SMTP auth dnl # любые другие доступные макросы sendmail dnl # - квалификатор при поиске записей в access_db dnl # по умолчанию QGRP dnl # - очередь, в которую будет помещено сообщение, если dnl # не будет найдено четкого соответствия критерия выбора dnl # очереди соответствующей записи в access_db; dnl # после строки в указанным параметром queue дальнейшие dnl # использование HACK(`queuegroup') игнорируется dnl # - указывает, каким образом интерпретировать key; dnl # значение по умолчанию mail_addr; dnl # возможнные значения: dnl # mail_addr - key интерпретируется как адрес e-mail, т. е. при dnl # key == mailbox@domain.foo.bar будет произведен поиск: dnl # mailbox@domain.foo.bar dnl # domain.foo.bar dnl # foo.bar dnl # bar dnl # ip_addr - key интерпретируется как IP адрес, т. е. при dnl # key == A.B.C.D будет произведен поиск: dnl # A.B.C.D dnl # A.B.C dnl # A.B dnl # A dnl # static_text - в access_db ищется четкое соответствие критерия dnl # поиска и ключа соответствующей записи dnl # dnl # примеры: dnl # dnl # определение очереди в access_db по HELO/EHLO с квалификатором QGRP_HELO dnl # если очередь определена не будет, поиск продолжится dnl # HACK(`queuegroup', `$&s', `QGRP_HELO', `', `static_text') dnl # соответствие HELO/EHLO и очереди указывается в access_db в виде: dnl # QGRP_HELO:some_helo queue_name dnl # dnl # определение очереди в access_db по адресу отправителя с квалификатором QGRP_FROM dnl # если очередь определена не будет, поиск продолжится dnl # HACK(`queuegroup', `$&f', `QGRP_FROM', `', `mail_addr') dnl # соответствие адреса/домена отправителя и очереди указывается в access_db в виде: dnl # QGRP_FROM:sender_mailbox@sender_maildomain queue_name dnl # dnl # определение очереди в access_db по адресу получателя (default) с квалификатором QGRP (default) dnl # если очередь определена не будет, будет использована очередь по умолчанию mqueue dnl # HACK(`queuegroup', `', `', `mqueue') dnl # соответствие адреса/домена получателя и очереди указывается в access_db в виде: dnl # QGRP:recipient_mailbox@recipient_maildomain queue_name dnl divert(0) VERSIONID(`$Id: queuegroup.m4,v 12.8-0.04 2003/09/22 19:20:00 ca Exp $') divert(-1) dnl ifdef(`_ACCESS_TABLE_', `', `errprint(`*** ERROR: HACK(`queuegroup') requires FEATURE(`access_db') ')') dnl define(`_QUEUE_GROUP_KEY_', `ifelse(len(X`'_ARG_),`1',`$`'1',_ARG_)')dnl define(`_QUEUE_GROUP_QUALIFIER_', `ifelse(len(X`'_ARG2_),`1',`QGRP',_ARG2_)')dnl define(`_QUEUE_GROUP_KEY_TYPE_', `ifelse(len(X`'_ARG4_),`1',`mail_addr',_ARG4_)')dnl dnl dnl LOCAL_RULESETS dnl dnl Squeuegroup # подстановка критерия выбора очереди R $* $: $1 $| _QUEUE_GROUP_KEY_ dnl ifelse(_QUEUE_GROUP_KEY_TYPE_, `mail_addr', ` # если критерий является адресом e-mail, убираем угловые скобки R $* $| < $+ > $: $1 $| $2 R $* $| $+ $: $1 $| $2 # если критерий является адресом e-mail R $* $| $+ @ $+ $: $1 $| $>SearchList $| <> # если критерий является адресом e-mail, состоящим из одного доменного имени R $* $| $+ $: $1 $| $>SearchList $| <> ')dnl dnl ifelse(_QUEUE_GROUP_KEY_TYPE_, `ip_addr', ` # если критерий является IP адресом R $* $| $+ $: $1 $| $>A <$2> < > R $* $| < $+ > <> $: $1 $| <$2> ')dnl dnl ifelse(_QUEUE_GROUP_KEY_TYPE_, `static_text', ` # если критерий является статическим текстом (требуется полное совпадение значения критерия с ключом в access_db) R $* $| $+ $: $1 $| < $(access _QUEUE_GROUP_QUALIFIER_:$2 $: ? $) > ')dnl dnl ifelse(len(X`'_ARG3_),`1', `R $* $| $: $1', `R $* $| $# _ARG3_') R $* $| <$+> $# $2 dnl