Victor Ustugov wrote:
> хотя... уже не надо... я тут еще раз посмотрел в sendmail.cf...
> если используется delay_checks со SPAMFRIEND'ами, то исключение делается
> еще до меня.
> 1. первым в таком случае выполняется check_rcpt
> 2. из check_rcpt выполняется checkrcpt
> 3. из checkrcpt выполняется Local_check_rcpt, потом управление
> передается обратно в checkrcpt
> 4. из checkrcpt выполняется Basic_check_rcpt
> 5. из Basic_check_rcpt выполняется Rcpt_ok
> 6. из Rcpt_ok после выполенинея ParseRecipient проводится поверка адреса
> получателя по access_db и если получатель является SPAMFRIEND'ом, то
> управление сразу возвращается в Basic_check_rcpt
> 7. из Basic_check_rcpt управление передается обратно в checkrcpt
> 8. потом выполнение передается обратно из checkrcpt в check_rcpt
> 9. выполняется очередная проверка по access_db и в случае SPAMFRIEND'а
> управление передается правилу Delay_TLS_Clt2 без дальнейшего возврата в
> check_rcpt
> 10. и только для не SPAMFRIEND'ов далее проводятся последовательные
> вызовы правил checkmail (из которого вызывается Local_check_mail, а из
> него в свою очередь CheckHelo) и checkrelay
>> если кому-то интересна эта последовательность, то прошу заметить, что
> она верна для случая использования FEATURE(`delay_checks'). без этой
> фичи последовательность очень сильно отличается. она будет диаметрально
> противоположная
>> следовательно, если используется FEATURE(`delay_checks', `FRIEND'), но
> при этом нужно проверять HELO и для этих FRIEND'ов, то придется
> выполнять CheckHelo из Local_check_rcpt, а не из Local_check_mail
>> сейчас буду переделывать check_helo.m4
итак, пишу подробно, вдруг кому-то таки будут интересны детали.
как раньше запускался CheckHelo:
# проверяем, надо ли делать исключения для SPAMFRIEND'ов
ifelse_strstr(confCHECK_HELO_SKIP, `SPAMFRIEND', `
# если да, то запускаем CheckHelo из Local_check_rcpt
# предварительно проверяя исклчюние по access_db
SLocal_check_rcpt
# R $* $: $>Parse0 $>3 $1
R $+ < @ $+ > $* $: $1 < @ $2 > $3 $| $1@$2 $| <?>
R $* $| $+@$+ . $| <?> $: $1 $| $2@$3 $| <?>
R $* $| $+@$+ $| <?> $: $1 $| $2@$3 $| $>SearchList <! Spam>
$| <F:$2@$3> <D:$3> <F:$2@> <>
R $* $| $+@$+ $| <FRIEND> $: $1 $| $2@$3
dnl
R $* $| $* $| $* $: $1 $| $2 $| $>CheckHelo $&s $|
$&{client_name} $| $&{client_addr}
R $* $| $* $| $#$* $#$3
R $* $| $* $| $* $| $* $| $* $: $1
R $* $| $* $: $1
', `
# если нет, то запускаем CheckHelo из Local_check_mail
SLocal_check_mail
R $* $: $1 $| $>CheckHelo $&s $| $&{client_name} $|
$&{client_addr}
R $* $| $#$* $#$2
R $* $| $* $| $* $| $* $: $1
R $* $| $* $: $1
')
стало:
# если использован delay_checks
ifdef(`_DELAY_CHECKS_',`
# если при delay_checks нужно делать исключения для SPAMFRIEND'ов
ifelse_strstr(confCHECK_HELO_SKIP, `SPAMFRIEND', `
# в случае исключений проверяем получателя по access_db
# и запускаем CheckHelo из Local_check_rcpt
SLocal_check_rcpt
# R $* $: $>Parse0 $>3 $1
R $+ < @ $+ > $* $: $1 < @ $2 > $3 $| $1@$2 $| <?>
R $* $| $+@$+ . $| <?> $: $1 $| $2@$3 $| <?>
R $* $| $+@$+ $| <?> $: $1 $| $2@$3 $| $>SearchList <! Spam>
$| <F:$2@$3> <D:$3> <F:$2@> <>
R $* $| $+@$+ $| <FRIEND> $: $1 $| $2@$3
dnl
R $* $| $* $| $* $: $1 $| $2 $| $>CheckHelo $&s $|
$&{client_name} $| $&{client_addr}
R $* $| $* $| $#$* $#$3
R $* $| $* $| $* $| $* $| $* $: $1
R $* $| $* $: $1
', `
# если delay_checks используется, но делать исключения для SPAMFRIEND'ов
# не нужно, запускаем CheckHelo из Local_check_rcpt
SLocal_check_rcpt
R $* $: $1 $| $>CheckHelo $&s $| $&{client_name} $|
$&{client_addr}
R $* $| $#$* $#$2
R $* $| $* $| $* $| $* $: $1
R $* $| $* $: $1
')
', `
# если delay_checks не используется, то запускаем CheckHelo
# из Local_check_mail
SLocal_check_mail
R $* $: $1 $| $>CheckHelo $&s $| $&{client_name} $|
$&{client_addr}
R $* $| $#$* $#$2
R $* $| $* $| $* $| $* $: $1
R $* $| $* $: $1
')
ну и в precheck_envelope.m4 сделан еще один вызов SetIsOutgoing
заодно поправил глючок вычисления ${client_ptr} в Local_check_mail
так что я пошел тестировать новые хаки
--
Best wishes Victor Ustugov mailto:victor на corvax.kiev.ua
public GnuPG/PGP key: http://victor.corvax.kiev.ua/corvax.asc
ICQ: 77186900, 32418694 CRV2-RIPE, CRV-UANIC