У нас тоже :)
НО после наших предыдущих 4 праздничных дней можно и подольше поработать.
Итак, последняя редакция (т3р)
На этот раз протестировано на моей системе с той только разницей, что при совпадении выводится дополнительная запись в лог (без блокировок)LOCAL_CONFIG
Ksyslog syslog
LOCAL_RULESETS
Slocal_check_mail
# ОТлупы пропускаем
R<> $@ OK
# ПРоверяем, использовалась ли smtp-авторизация
R$* $: < $&{auth_authen} > $1
RS* $: $(syslog mail:1: $1 $) $1
# Тех, кто не использовал авторизацию, пропускаем.
R<>$* $@ OK
# Из оставшихся юзеров выделяем юзеров домена mydomain.ru и попутно избавляемся от значения макроса < $&{auth_authen} >
R<$+><$+@mydomain.ru> $:<$2>
RS* $: $(syslog mail:2: $1 $) $1
# Остальных пропускаем
R<$+><$+> $@ OK
# Исправление!!!
# Сейчас у нас в раб. области имя юзера.
# Сравниваем, совпадает ли оно с именем, использованным для авторизации
R<$&{auth_authen}> $: $(syslog mail:IDENTICAL: <$1> $) <$1>
R<$&{auth_authen}> $@ identical
RS* $: $(syslog mail:3: $1 $) $1
# Исправление !!!
# Для отладки не используйте сразу правило блокировки:
R<$+> $#error $@ 5.7.1. $: "550 User " $&f " not allowed to act as " $&{auth_authen}
# Сделайте просто вывод в лог:
R<$+> $: $(syslog mail:AСHTUNG: <$&f><$&{auth_authen}> $) <ACHTUNG>
R<ACHTUNG> $@ OK
# Добавляю контрольное правило - кто остался не охваченным моими правилами:
RS* $: $(syslog mail:4: $1 $) $1
И вот те правила, которые были протестированы на моей системе, плюс вывод в лог:
R<> $@ OK
R$+ $: < $&{auth_authen} > $1
R$* $: $(syslog syslog:mail:ident:1 $1 $) $1
R<>$+ $: CONTINUE
R< $+ ><$+@anrb.ru> $: <$2>
R<$+><$+> $: CONTINUE
R$* $: $(syslog syslog:mail:ident:2 $1 $) $1
R<$&{auth_authen}> $: $(syslog syslog:mail:ident:3 IDENTICAL $) <IDENTICAL>
R<$+> $: $(syslog syslog:mail:ident:4 <$1> $) <$1>
R$* $: $(syslog syslog:mail:ident:5 $1 $)
1. Данные не совпадают:
Oct 12 20:43:17 mail sendmail[7225]: AUTH=server, relay=crazy.anrb.ru [1.8.0.6], authid=consiglio, mech=PLAIN, bits=0
Oct 12 20:43:18 mail sendmail[7225]: o9CEhHfg007225: syslog:mail:ident:1<consiglio><postmaster@anrb.ru>
Oct 12 20:43:18 mail sendmail[7225]: o9CEhHfg007225: syslog:mail:ident:2<postmaster>
Oct 12 20:43:18 mail sendmail[7225]: o9CEhHfg007225: syslog:mail:ident:4<postmaster>
Oct 12 20:43:18 mail sendmail[7225]: o9CEhHfg007225: syslog:mail:ident:5<postmaster>
Oct 12 20:43:18 mail sendmail[7225]: o9CEhHfg007225: from=<postmaster@anrb.ru>, size=349, class=0, nrcpts=1, msgid=<4CB4760A.3050400@anrb.ru>, proto=ESMTP, daemon=MTA, relay=crazy.anrb.ru [1.8.0.6]
Oct 12 20:43:18 mail sendmail[7227]: o9CEhHfg007225: to=<terrapin@anrb.ru>, ctladdr=<postmaster@anrb.ru> (1806/1968), delay=00:00:00, xdelay=00:00:00, mailer=local, pri=30674, dsn=2.0.0, stat=Sent
2. Данные совпадают:
Oct 12 20:43:33 mail sendmail[7233]: AUTH=server, relay=crazy.anrb.ru [1.8.0.6], authid=consiglio, mech=PLAIN, bits=0
Oct 12 20:43:33 mail sendmail[7233]: o9CEhX7b007233: syslog:mail:ident:1<consiglio><consiglio@anrb.ru>
Oct 12 20:43:33 mail sendmail[7233]: o9CEhX7b007233: syslog:mail:ident:2<consiglio>
Oct 12 20:43:33 mail sendmail[7233]: o9CEhX7b007233: syslog:mail:ident:3.IDENTICAL
Oct 12 20:43:33 mail sendmail[7233]: o9CEhX7b007233: syslog:mail:ident:4<IDENTICAL>
Oct 12 20:43:33 mail sendmail[7233]: o9CEhX7b007233: syslog:mail:ident:5<IDENTICAL>
Oct 12 20:43:33 mail sendmail[7233]: o9CEhX7b007233: from=<consiglio@anrb.ru>, size=339, class=0, nrcpts=1, msgid=<4CB47619.3040400@anrb.ru>, proto=ESMTP, daemon=MTA, relay=crazy.anrb.ru [1.8.0.6]
Oct 12 20:43:33 mail sendmail[7234]: o9CEhX7b007233: to=<terrapin@anrb.ru>, ctladdr=<consiglio@anrb.ru> (1806/1968), delay=00:00:00, xdelay=00:00:00, mailer=local, pri=30664, dsn=2.0.0, stat=Sent
P.S.1 Здесь опять-таки не учтены бездоменные и беcскобочные отправители. НО это легко подправить.
P.S.2. Спасибо за интересную задачку.
ПРо нее раньше часто спрашивали, но мне казалось, что так просто она не решается.
Помогли вспомнить, что такое sendmail.cf - почти год не прикасалась.