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 host of incoming relay before Verify Sender # # проверка хоста рилея в access_db перед встречной проверкой корректности адреса отправителя # dnl # для проведения предварительной проверки хоста (PTR записи, доменной зоны, A записи, сети) в access_db: dnl # dnl # в качестве первого параметра указывается квалификатор записи в access_db со знаком "+" или "!": dnl # + - проводить поиск с указанным квалификатором или без квалификатора вообще dnl # ! - проводить поиск только с указанным квалификатором dnl # dnl # в качестве второго параметра указывается значение записи в access_db dnl # как примеры: dnl # RELAY dnl # OK dnl # REJECT dnl # dnl # в качестве третьего параметра указывается действие: dnl # SKIP - пропустить проверку dnl # REJECT - отвергнуть сообщение dnl # VERIFY - проверять отправителя dnl # dnl # примеры: dnl # HACK(`verify_sender_check_host', `! VerifySenderHost', `VERIFY', `VERIFY')dnl dnl # HACK(`verify_sender_check_host', `! VerifySenderHost', `SKIP', `SKIP')dnl dnl # HACK(`verify_sender_check_host', `! VerifySenderHost', `REJECT', `REJECT')dnl dnl # HACK(`verify_sender_check_host', `+ Connect', `RELAY', `SKIP')dnl dnl # HACK(`verify_sender_check_host', `+ Connect', `REJECT', `REJECT')dnl dnl # HACK(`verify_sender_check_host', `', `OK', `SKIP')dnl dnl # HACK(`verify_sender_check_host', `', `REJECT', `REJECT')dnl dnl # dnl # таким образом аналогом define(`confVERIFY_SENDER_SKIP', `OUTGOING') dnl # при хранении информации об исходящих в access_db с квалификатором dnl # Connect или без него и значением RELAY является dnl # HACK(`verify_sender_check_host', `+ Connect', `RELAY', `SKIP')dnl dnl # ifdef(`_VERIFY_SENDER_CHECK_HOST_', `dnl', `dnl divert(0) VERSIONID(`$Id: verify_sender_check_host.m4,v 8.12-0.03 2003/09/12 09:46:32 corvax Exp $')dnl divert(-1) dnl define(`_VERIFY_SENDER_CHECK_HOST_')dnl dnl ifdef(`_ACCESS_TABLE_', `dnl', `dnl errprint(`*** ERROR: HACK(verify_sender_check_host) requires FEATURE(access_db) ')') ') dnl ifelse(len(X`'_ARG3_), `1', `dnl errprint(`*** ERROR: HACK(verify_sender_check_host) requires three parameters: 1. access_db qualifier (for example, +Connect or !VerifySenderHost) 2. access_db value (for example, RELAY, OK or REJECT) 3. action (SKIP, REJECT or VERIFY) ')') dnl define(`_VERIFY_SENDER_HOST_ARG3_', `WRONG')dnl ifelse(_ARG3_, `SKIP', `define(`_VERIFY_SENDER_HOST_ARG3_', `OK')') ifelse(_ARG3_, `REJECT', `define(`_VERIFY_SENDER_HOST_ARG3_', `OK')') ifelse(_ARG3_, `VERIFY', `define(`_VERIFY_SENDER_HOST_ARG3_', `OK')') dnl ifelse(_VERIFY_SENDER_HOST_ARG3_, `WRONG', `dnl errprint(`*** ERROR: HACK(verify_sender_check_host) requires SKIP, REJECT or VERIFY as third parameter ')') dnl dnl LOCAL_RULESETS dnl dnl Sverify_sender_check_host dnl R $* $: $1 R $+ $| $* $: $>D < $1 > < ifelse(len(X`'_ARG1_), `1', `+_FICTIVE_QUALIFIER_', `_ARG1_') > < $1 $| $2 > R <$*> < $+ $| $* > $: < $1 > $2 $| $3 R $* $| $+ $: $>A < $2 > < ifelse(len(X`'_ARG1_), `1', `+_FICTIVE_QUALIFIER_', `_ARG1_') > < $1 $| $2 > R <$*> < $* $| $+ > $: < $1 > $2 $| $3 R < _ARG2_ $* > $* $| $* ifelse(_ARG3_, `REJECT', `$#error $: $1')`'ifelse(_ARG3_, `VERIFY', `$@ VERIFY') ifelse(_ARG3_, `SKIP', `$@ SKIP') R < $* > $* $| $* $: $2 $| $3 dnl