Тестирование правил преобразования адресов

Для тестирования правил преобразования адресов sendmail запускают с флагом «-bt» для того, чтобы тестирование было более детальным, можно применять и ряд других флагов.
Пример тестирования набора правил 0 и его подправил.

% sendmail -bt
ADDRESS TEST MODE (ruleset 3 NOT automatically
invoked)
Enter <ruleset> <address>
> 0 paul@polyn.kiae.su
rewrite: ruleset 0 input: paul @ polyn . kiae
. su
rewrite: ruleset 98 input: paul @ polyn . kiae
. su
rewrite: ruleset 98 returns: paul @ polyn .
kiae . su
rewrite : ruleset 97 input: paul @ polyn . kiae
. su
rewrite : ruleset3 input: paul § polyn . kiae
. su
rewrite : ruleset 96 input: paul < § polyn .
kiae . su >
rewrite : ruleset 96 returns: paul < @ polyn .
kiae . su . >
rewrite : ruleset 3 returns: paul < § polyn .
kiae . su . >
rewrite : ruleset 0 input: paul < @ polyn .
kiae . su . >
rewrite : ruleset 98 input: paul < @ polyn .
kiae . su . >
rewrite : ruleset 98 returns: paul < @ polyn .
kiae . su . >
rewrite : ruleset 90 input: < polyn . kiae . su
paul < @ polyn. kiae . su . >
rewrite : ruleset 90 input: polyn . < kiae . su
. kiae . su . >
> paul < @ polyn
rewrite :. ruleset 90 input: polyn . kiae . < su
. kiae . su . >
> paul < @ polyn
rewrite : ruleset
90 returns: paul < @ polyn .
kiae . su . >
rewrite : ruleset 90 returns: paul < @ polyn .
kiae . su . >
rewrite : ruleset 90 returns: paul < @ polyn .
kiae . su . >
rewrite : ruleset 95 input: < > paul < @ polyn
. kiae . su . >
rewrite : ruleset 95 returns: paul < @ polyn
kiae . su . >
rewrite: ruleset 0 returns: $# esmtp $@ polyn .
kiae . su . $: paul < @ polyn . kiae . su . >
rewrite: ruleset 97 returns: $# esmtp $@ polyn .
kiae . su . $: paul < @ polyn . kiae . su . >
rewrite: ruleset 0 returns: $# esmtp $@ polyn .
kiae . su . $: paul < @ polyn . kiae . su . >

В этом примере четко виден порядок преобразования. Сначала производится канонизация имени, а затем его преобразование в соответствии с рассылкой. Набор правил 0 -- это набор преобразования адресов получателей. После него принимается решение о рассылке почты.
Чаще всего ошибки встречаются в наборе правил 3, а точнее в поднаборе этого набора 96. Здесь производится канонизация адресов. Наибольшие проблемы проявляются с так называемыми фиктивными доменами, которые не могут быть разрешены службой доменных имен. В этом случае происходит, обычно, расширение имени именем текущего домена, и, как результат, ошибка при рассылке. Такие имена либо надо вносить в список адресов фиктивных доменов (BITNET или UUCP), либо их отлавливать и запускать написанные для них программы рассылки.
В приведенном ниже примере тестирование адресов производится с максимальной опцией отладки, когда указываются не только номера наборов правил, но и сами тестируемые правила:

%sendmail -bt -d21.12
>3 paul@polyn.kiae. su
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> rewrite: ruleset 3 input: paul @ polyn . kiae
. su
-----trying rule: $@
----- rule fails
-----trying rule: $*
-----rule matches: $: $1 < @ >
rewritten as: paul @ polyn . kiae . su < @ >
-----trying rule: $*<$*>$*< @ >
----- rule fails
-----trying rule: $* : : $* < @ >
----- rule fails
-----trying rule: : include : $* < § >
----- rule fails
-----trying rule: $* : $* <. @ >
----- rule fails
-----trying rule: $* < @ >
-----rule matches: $: $1
rewritten as: paul @ polyn . kiae . su
-----trying rule: $* ;
----- rule fails
----trying rule: $@
----- rule fails
-----trying rule: $*
-----rule matches: $: < $1 >
rewritten as: < paul @ polyn . kiae . su >
------trying rule: $+<$*>
------ rule fails
------trying rule: <$*>$+
------ rule fails
----trying rule: < >
---- rule fails
-----trying rule: < $+ >
-----rule matches: $: $1
rewritten as: paul @ polyn . kiae . su
-----trying rule: @ $+ , $+
----- rule fails
-----trying rule: @ $+ : $+
----- rule fails
-----trying rule: $+:$*; @ $+
----- rule fails
-----trying rule: $+:$*;
----- rule fails
-----trying rule: $+ @ $+
-----rule matches: $: $1 < @ $2 >
rewritten as: paul < @ polyn . kiae . su >
-----trying rule: $+ < $+ @ $+ >
----- rule fails
-----trying rule: $+<§$+>
-----rule matches: $@ $> 96 $1 < @ $2 >
-----callsubr 96
rewrite: ruleset 96 input: paul < @ polyn . kiae . su >
-----trying rule: $* < @ localhost > $*
----- rule fails
-----trying rule: $* < @ localhost . net . kiae .
su > $*
----- rule fails
------trying rule: $* < @ localhost . UUCP > $*
------ rule fails
------trying rule: $* < @ [$+]>$*
------ rule fails
-----trying rule: $* < @ @ $=w > $*
----- rule fails
--trying rule: $* < @ @ $+ > $*
----- rule fails
--trying rule: $* < @ $+ . UUCP > $*
----- rule fails
--trying rule: $* < @ $* $~P > $*
--rule matches: $: $1 < @ $[ $2 $3 $] > $4 rewritten as: paul < @ polyn . kiae . su . >
-----trying rule: $* < @ $=w > $*
----- rule fails
--trying rule: $* < @ $* $=P > $*
--rule matches: $: $1 < @ $2 $3 . > $4 rewritten as: paul < @ polyn . kiae . su . . >
-----trying rule: $* < @ $* . . > $*
--rule matches: $1 < @ $2 . > $3 rewritten as: paul < @ polyn t. kiae . su . >
--trying rule: $*< @ $*..>$*
----- rule fails
--trying rule: $* < @ quest . net . kiae . su
> $*
----- rule fails
rewrite: ruleset 96 returns: paul < @ polyn . kiae
. su . >
rewritten as: paul < @ polyn . kiae . su . >
rewrite: ruleset 3 returns: paul < @ polyn .
kiae . su . >
>96 paul@polyn.kiae.su
> rewrite: ruleset 96 input: paul @ polyn . kiae . su
--trying rule: $* < @ localhost > $*
----- rule fails
-----trying rule: $* < @ localhost . net . kiae .
su > $*
----- rule fails
--trying rule: $* < @ localhost . UUCP > $*
------ rule fails
-----trying rule: $*<§[$+]>$*
----- rule fails
—trying rule: $* < @ @ $=w > $*
----- rule fails
-----trying rule: $* < @ @ $+ > $*
----- rule fails
-trying rule: $*<§$+. UUCP > $*
----- rule fails
--trying rule: $* < @ $* $"P > $*
----- rule fails
--trying rule: $* < @ $=w > $*
----- rule fails
---trying rule: $* < @ $* $=P > $*
----- rule fails
---trying rule: $*< @ $*..>$*
----- rule fails
-----trying rule: $* < @ quest . net . kiae . su
> $*
----- rule fails
rewrite: ruleset 96 returns: paul @ polyn . kiae .
su
>

Правила в данном случае указываются по их левой части и для правильного понимания необходимо иметь и тот фрагмент файла конфигурации sendmail, который тестируется.