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 # # # Check header Received # Проверка поля Received # dnl # dnl # для исключения из проверки Received для получателей, указанных в access_db с dnl # квалификатором Spam и значением FRIEND нужно в переменной confCHECK_RECEIVED_SKIP dnl # указать значение SPAMFRIEND: dnl # define(`confCHECK_RECEIVED_SKIP', `SPAMFRIEND')dnl dnl # dnl # если в письме есть получатели, часть которых указана в access_db как SPAMFRIEND'ы, а dnl # часть не указана, то отдельным значением переменной confCHECK_RECEIVED_SKIP указывается, dnl # делать ли исключения в таких случаях: dnl # CHECK - проверять поля Received, если хоть для один получатель не является SPAMFRIEND'ом dnl # SKIP - не проверять поля Received, если хоть для один получатель является SPAMFRIEND'ом dnl # define(`confCHECK_RECEIVED_SKIP', `SPAMFRIEND SKIP')dnl dnl # dnl # по умолчанию используется значение SKIP dnl # divert(0) VERSIONID(`$Id: check_received.m4,v 8.12-0.04 2004/10/28 15:28:31 corvax Exp $')dnl divert(-1) dnl ifdef(`_ACCESS_TABLE_', `', ` errprint(`*** ERROR: HACK(check_received) requires FEATURE(access_db) ')') dnl HACK(`parse_received')dnl dnl dnl LOCAL_RULESETS dnl dnl ifelse_strstr(confCHECK_RECEIVED_SKIP, `SPAMFRIEND', ` SLocal_check_rcpt # R $* $: $>Parse0 $>3 $1 R $+ < @ $+ > $* $: $1 < @ $2 > $3 $| $1@$2 $| R $* $| $+@$+ . $| $: $1 $| $2@$3 $| R $* $| $+@$+ $| $: $1 $| $2@$3 $| $>SearchList $| <> ifelse_strstr(confCHECK_RECEIVED_SKIP, `CHECK', ` R $* $| $+ $| $: $1 R $* $| $+ $| $* $: $1 $(macro {received_skip} $@ NO $) ',` R $* $| $+ $| $: $1 $(macro {received_skip} $@ YES $) R $* $| $+ $| $* $: $1 ') ') dnl dnl ifelse_strstr(confCHECK_RECEIVED_SKIP, `SPAMFRIEND', ` dnl ifelse_strstr(confCHECK_RECEIVED_SKIP, `CHECK', ` dnl SCheck_Received R $+ $: $1 $| $&{received_skip} dnl R $+ $| $: $1 $(log skip checking header Received $) R $+ $| $: $1 R $+ $| $* $: $1 $| $>Check_Received_db $1 R $+ $| $#$* $#$2 R $+ $| $* $: $1 dnl ',` dnl SCheck_Received R $+ $: $1 $| $&{received_skip} dnl R $+ $| YES $: $1 $(log skip checking header Received $) R $+ $| YES $: $1 R $+ $| $* $: $1 $| $>Check_Received_db $1 R $+ $| $#$* $#$2 R $+ $| $* $: $1 dnl ') ',` dnl SCheck_Received R $+ $: $1 $| $>Check_Received_db $1 R $+ $| $#$* $#$2 R $+ $| $* $: $1 dnl ') SCheck_Received_db dnl R $- $+ ( $* [$*]) $* $: $>Check_Received_Part <$2> <$1 $2 ( $3 [$4]) $5> R $- $+ by $* $: $>Check_Received_Part <$2> <$1 $2 by $3> R $- $* ( $+ @ $+ [$*]) $* $: $>Check_Received_Part <$4> <$1 $2 ( $3 @ $4 [$5]) $6> <+ReceivedFrom> R $- $* ( $+ [$*]) $* $: $>Check_Received_Part <$3> <$1 $2 ( $3 [$4]) $5> <+ReceivedConnect> R $- $* ( $* [$+]) $* $: $>Check_Received_Part <$4> <$1 $2 ( $3 [$4]) $5> <+ReceivedConnect> ###################################################################### ### Check_Received_Part -- check one part of Received header filed ### ### Parameters: ### <$1> -- key ### <$2> -- passthru (additional data passed unchanged through) ### <$3> -- mark (must be <(!|+) single-token>) ### ! does lookup only with tag ### + does lookup with and without tag ###################################################################### dnl SCheck_Received_Part dnl R <$+> <$+> <$+> $: $>D <$1> <$3> <$2> LookUpDomain R <$*> $: @ $1 mark token as no match R <$={Accept}> <$*> $: @ $2 mark token as no match R $* $#error $@ 5.7.1 $: "554 Access denied" R $* $#discard $: discard R $* $#error $@ $1.$2.$3 $: $4 R $* $#error $: $1 R <$+> $* $#error $: $1 error from access db R @ $* $@ $1 remove mark