The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Sendmail для отсылки с сайта"
Отправлено Doc, 11-Фев-09 12:53 
# resolve remotely connected UUCP links (if any)

# resolve fake top level domains by forwarding to other hosts

# forward other UUCP traffic straight to UUCP
R$* < @ $+ .UUCP. > $*        $#uucp-old $@ $2 $: $1 < @ $2 .UUCP. > $3    user@host.UUCP


# pass names that still have a host to a smarthost (if defined)
R$* < @ $* > $*        $: $>MailerToTriple < $S > $1 < @ $2 > $3    glue on smarthost name

# deal with other remote names
R$* < @$* > $*        $#esmtp $@ $2 $: $1 < @ $2 > $3    user@host.domain

# handle locally delivered names
R$=L            $#local $: @ $1        special local names
R$+            $#local $: $1            regular local names

SLocal_localaddr
Slocaladdr=5
R$+            $: $1 $| $>"Local_localaddr" $1
R$+ $| $#ok        $@ $1            no change
R$+ $| $#$*        $#$2
R$+ $| $*        $: $1


# deal with plussed users so aliases work nicely
R$+ + *            $#local $@ $&h $: $1
R$+ + $*        $#local $@ + $2 $: $1 + *

# prepend an empty "forward host" on the front
R$+            $: <> $1


R< > $+            $: < > < $1 <> $&h >        nope, restore +detail

R< > < $+ <> + $* >    $: < > < $1 + $2 >        check whether +detail
R< > < $+ <> $* >    $: < > < $1 >            else discard
R< > < $+ + $* > $*       < > < $1 > + $2 $3        find the user part
R< > < $+ > + $*    $#local $@ $2 $: @ $1        strip the extra +
R< > < $+ >        $@ $1                no +detail
R$+            $: $1 <> $&h            add +detail back in

R$+ <> + $*        $: $1 + $2            check whether +detail
R$+ <> $*        $: $1                else discard
R< local : $* > $*    $: $>MailerToTriple < local : $1 > $2    no host extension
R< error : $* > $*    $: $>MailerToTriple < error : $1 > $2    no host extension

R< $~[ : $+ > $+    $: $>MailerToTriple < $1 : $2 > $3 < @ $2 >

R< $+ > $+        $@ $>MailerToTriple < $1 > $2 < @ $1 >


SMailertable=90
R$* <$- . $+ > $*    $: $1$2 < $(mailertable .$3 $@ $1$2 $@ $2 $) > $4
R$* <$~[ : $* > $*    $>MailerToTriple < $2 : $3 > $4        check -- resolved?
R$* < . $+ > $*     $@ $>Mailertable $1 . <$2> $3        no -- strip & try again
R$* < $* > $*        $: < $(mailertable . $@ $1$2 $) > $3    try "."
R< $~[ : $* > $*    $>MailerToTriple < $1 : $2 > $3        "." found?
R< $* > $*        $@ $2                no mailertable match


SMailerToTriple=95
R< > $*                $@ $1            strip off null relay
R< error : $-.$-.$- : $+ > $*     $#error $@ $1.$2.$3 $: $4
R< error : $- : $+ > $*        $#error $@ $(dequote $1 $) $: $2
R< error : $+ > $*        $#error $: $1
R< local : $* > $*        $>CanonLocal < $1 > $2
R< $~[ : $+ @ $+ > $*<$*>$*    $# $1 $@ $3 $: $2<@$3>    use literal user
R< $~[ : $+ > $*        $# $1 $@ $2 $: $3    try qualified mailer
R< $=w > $*            $@ $2            delete local host
R< $+ > $*            $#relay $@ $1 $: $2    use unqualified mailer

SCanonLocal
# strip local host from routed addresses
R< $* > < @ $+ > : $+        $@ $>Recurse $3
R< $* > $+ $=O $+ < @ $+ >    $@ $>Recurse $2 $3 $4

# strip trailing dot from any host name that may appear
R< $* > $* < @ $* . >        $: < $1 > $2 < @ $3 >

# handle local: syntax -- use old user, either with or without host
R< > $* < @ $* > $*        $#local $@ $1@$2 $: $1
R< > $+                $#local $@ $1    $: $1

# handle local:user@host syntax -- ignore host part
R< $+ @ $+ > $* < @ $* >    $: < $1 > $3 < @ $4 >

# handle local:user syntax
R< $+ > $* <@ $* > $*        $#local $@ $2@$3 $: $1
R< $+ > $*             $#local $@ $2    $: $1

SMasqHdr=93

# handle generics database
R$+ < @ $* $=G . >    $: < $1@$2$3 > $1 < @ $2$3 . > @    mark
R$+ < @ *LOCAL* >    $: < $1@$j > $1 < @ *LOCAL* > @    mark
R< $+ > $+ < $* > @    $: < $(generics $1 $: @ $1 $) > $2 < $3 >
R<@$+ + $* @ $+> $+ < @ $+ >
        $: < $(generics $1+*@$3 $@ $2 $:@$1 + $2@$3 $) >  $4 < @ $5 >
R<@$+ + $* @ $+> $+ < @ $+ >
        $: < $(generics $1@$3 $: $) > $4 < @ $5 >
R<@$+ > $+ < @ $+ >    $: < > $2 < @ $3 >
R< > $+ < @ $+ . >    $: < $(generics @$2 $@ $1 $: $) > $1 < @ $2 . >
R< > $+ < @ $+ >     $: < $(generics $1 $: $) > $1 < @ $2 >
R< > $+ + $* < @ $+ >     $: < $(generics $1+* $@ $2 $: $) > $1 + $2 < @ $3 >
R< > $+ + $* < @ $+ >     $: < $(generics $1 $: $) > $1 + $2 < @ $3 >
R< $* @ $* > $* < $* >    $@ $>canonify $1 @ $2        found qualified
R< $+ > $* < $* >    $: $>canonify $1 @ *LOCAL*    found unqualified
R< > $*            $: $1                not found

# do not masquerade anything in class N
R$* < @ $* $=N . >    $@ $1 < @ $2 $3 . >

R$* < @ *LOCAL* >    $@ $1 < @ $j . >


SMasqEnv=94
R$* < @ *LOCAL* > $*    $: $1 < @ $j . > $2


SParseLocal=98

# addresses sent to foo@host.REDIRECT will give a 551 error code
R$* < @ $+ .REDIRECT. >        $: $1 < @ $2 . REDIRECT . > < ${opMode} >
R$* < @ $+ .REDIRECT. > <i>    $: $1 < @ $2 . REDIRECT. >
R$* < @ $+ .REDIRECT. > < $- >    $#error $@ 5.1.1 $: "551 User has moved; please try " <$1@$2>

SD
R<$*> <$+> <$- $-> <$*>        $: < $(access $4:$1 $: ? $) > <$1> <$2> <$3 $4> <$5>
R<?> <$+> <$+> <+ $-> <$*>    $: < $(access $1 $: ? $) > <$1> <$2> <+ $3> <$4>
R<?> <[$+.$-]> <$+> <$- $-> <$*>    $@ $>D <[$1]> <$3> <$4 $5> <$6>
R<?> <[$+::$-]> <$+> <$- $-> <$*>    $: $>D <[$1]> <$3> <$4 $5> <$6>
R<?> <[$+:$-]> <$+> <$- $-> <$*>    $: $>D <[$1]> <$3> <$4 $5> <$6>
R<?> <$+.$+> <$+> <$- $-> <$*>    $@ $>D <$2> <$3> <$4 $5> <$6>
R<?> <$+> <$+> <$- $-> <$*>    $@ <$2> <$5>
R<$* <TMPF>> <$+> <$+> <$- $-> <$*>    $@ <<TMPF>> <$6>
R<$*> <$+> <$+> <$- $-> <$*>    $@ <$1> <$6>


SA
R<$+> <$+> <$- $-> <$*>        $: < $(access $4:$1 $: ? $) > <$1> <$2> <$3 $4> <$5>
R<?> <$+> <$+> <+ $-> <$*>    $: < $(access $1 $: ? $) > <$1> <$2> <+ $3> <$4>
R<?> <$+::$-> <$+> <$- $-> <$*>        $@ $>A <$1> <$3> <$4 $5> <$6>
R<?> <$+:$-> <$+> <$- $-> <$*>        $@ $>A <$1> <$3> <$4 $5> <$6>
R<?> <$+.$-> <$+> <$- $-> <$*>        $@ $>A <$1> <$3> <$4 $5> <$6>
R<?> <$+> <$+> <$- $-> <$*>    $@ <$2> <$5>
R<$* <TMPF>> <$+> <$+> <$- $-> <$*>    $@ <<TMPF>> <$6>
R<$*> <$+> <$+> <$- $-> <$*>    $@ <$1> <$6>

SCanonAddr
R$*            $: $>Parse0 $>canonify $1    make domain canonical


SParseRecipient
R$*                $: <?> $>CanonAddr $1
R<?> $* < @ $* . >        <?> $1 < @ $2 >            strip trailing dots
R<?> $- < @ $* >        $: <?> $(dequote $1 $) < @ $2 >    dequote local part

# if no $=O character, no host in the user portion, we are done
R<?> $* $=O $* < @ $* >        $: <NO> $1 $2 $3 < @ $4>
R<?> $*                $@ $1


R<NO> $* < @ $* $=R >        $: <RELAY> $1 < @ $2 $3 >
R<NO> $* < @ $+ >        $: $>D <$2> <NO> <+ To> <$1 < @ $2 >>
R<$+> <$+>            $: <$1> $2

R<RELAY> $* < @ $* >        $@ $>ParseRecipient $1
R<$+> $*            $@ $2


SLocal_check_relay
Scheck_relay
R$*            $: $1 $| $>"Local_check_relay" $1
R$* $| $* $| $#$*    $#$3
R$* $| $* $| $*        $@ $>"Basic_check_relay" $1 $| $2

SBasic_check_relay
# check for deferred delivery mode
R$*            $: < $&{deliveryMode} > $1
R< d > $*        $@ deferred
R< $* > $*        $: $2

R$+ $| $+        $: $>D < $1 > <?> <+ Connect> < $2 >
R   $| $+        $: $>A < $1 > <?> <+ Connect> <>    empty client_name
R<?> <$+>        $: $>A < $1 > <?> <+ Connect> <>    no: another lookup
R<?> <$*>        $: OK                found nothing
R<$={Accept}> <$*>    $@ $1                return value of lookup
R<REJECT> <$*>        $#error $@ 5.7.1 $: "550 Access denied"
R<DISCARD> <$*>        $#discard $: discard
R<QUARANTINE:$+> <$*>    $#error $@ quarantine $: $1
R<ERROR:$-.$-.$-:$+> <$*>    $#error $@ $1.$2.$3 $: $4
R<ERROR:$+> <$*>        $#error $: $1
R<$* <TMPF>> <$*>        $#error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."
R<$+> <$*>        $#error $: $1

SLocal_check_mail
Scheck_mail
R$*            $: $1 $| $>"Local_check_mail" $1
R$* $| $#$*        $#$2
R$* $| $*        $@ $>"Basic_check_mail" $1

SBasic_check_mail
# check for deferred delivery mode
R$*            $: < $&{deliveryMode} > $1
R< d > $*        $@ deferred
R< $* > $*        $: $2

# authenticated?
R$*            $: $1 $| $>"tls_client" $&{verify} $| MAIL
R$* $| $#$+        $#$2
R$* $| $*        $: $1

R<>            $@ <OK>            we MUST accept <> (RFC 1123)
R$+            $: <?> $1
R<?><$+>        $: <@> <$1>
R<?>$+            $: <@> <$1>
R$*            $: $&{daemon_flags} $| $1
R$* f $* $| <@> < $* @ $- >    $: < ? $&{client_name} > < $3 @ $4 >
R$* u $* $| <@> < $* >    $: <?> < $3 >
R$* $| $*        $: $2
# handle case of @localhost on address
R<@> < $* @ localhost >    $: < ? $&{client_name} > < $1 @ localhost >
R<@> < $* @ [127.0.0.1] >
            $: < ? $&{client_name} > < $1 @ [127.0.0.1] >
R<@> < $* @ localhost.$m >
            $: < ? $&{client_name} > < $1 @ localhost.$m >
R<@> < $* @ localhost.UUCP >
            $: < ? $&{client_name} > < $1 @ localhost.UUCP >
R<@> $*            $: $1            no localhost as domain
R<? $=w> $*        $: $2            local client: ok
R<? $+> <$+>        $#error $@ 5.5.4 $: "553 Real domain name required for sender address"
R<?> $*            $: $1
R$*            $: <?> $>CanonAddr $1        canonify sender address and mark it
R<?> $* < @ $+ . >    <?> $1 < @ $2 >            strip trailing dots
# handle non-DNS hostnames (*.bitnet, *.decnet, *.uucp, etc)
R<?> $* < @ $* $=P >    $: <OKR> $1 < @ $2 $3 >
R<?> $* < @ $j >    $: <OKR> $1 < @ $j >
R<?> $* < @ $+ >    $: <? $(resolve $2 $: $2 <PERM> $) > $1 < @ $2 >
R<? $* <$->> $* < @ $+ >
            $: <$2> $3 < @ $4 >

# check sender address: user@address, user@, address
R<$+> $+ < @ $* >    $: @<$1> <$2 < @ $3 >> $| <F:$2@$3> <U:$2@> <D:$3>
R<$+> $+        $: @<$1> <$2> $| <U:$2@>
R@ <$+> <$*> $| <$+>    $: <@> <$1> <$2> $| $>SearchList <+ From> $| <$3> <>
R<@> <$+> <$*> $| <$*>    $: <$3> <$1> <$2>        reverse result
# retransform for further use
R<?> <$+> <$*>        $: <$1> $2    no match
R<$+> <$+> <$*>        $: <$1> $3    relevant result, keep it

# handle case of no @domain on address
R<?> $*            $: $&{daemon_flags} $| <?> $1
R$* u $* $| <?> $*    $: <OKR> $3
R$* $| $*        $: $2
R<?> $*            $: < ? $&{client_addr} > $1
R<?> $*            $@ <OKR>            ...local unqualed ok
R<? $+> $*        $#error $@ 5.5.4 $: "553 Domain name required for sender address " $&f
                            ...remote is not
# check results
R<?> $*            $: @ $1        mark address: nothing known about it
R<$={ResOk}> $*        $@ <OKR>    domain ok: stop
R<TEMP> $*        $#error $@ 4.1.8 $: "451 Domain of sender address " $&f " does not resolve"
R<PERM> $*        $#error $@ 5.1.8 $: "553 Domain of sender address " $&f " does not exist"
R<$={Accept}> $*    $# $1        accept from access map
R<DISCARD> $*        $#discard $: discard
R<QUARANTINE:$+> $*    $#error $@ quarantine $: $1
R<REJECT> $*        $#error $@ 5.7.1 $: "550 Access denied"
R<ERROR:$-.$-.$-:$+> $*        $#error $@ $1.$2.$3 $: $4
R<ERROR:$+> $*        $#error $: $1
R<<TMPF>> $*        $#error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."
R<$+> $*        $#error $: $1        error from access db


SLocal_check_rcpt
Scheck_rcpt
R$*            $: $1 $| $>"Local_check_rcpt" $1
R$* $| $#$*        $#$2
R$* $| $*        $@ $>"Basic_check_rcpt" $1

SBasic_check_rcpt
# empty address?
R<>            $#error $@ nouser $: "553 User address required"
R$@            $#error $@ nouser $: "553 User address required"
# check for deferred delivery mode
R$*            $: < $&{deliveryMode} > $1
R< d > $*        $@ deferred
R< $* > $*        $: $2


######################################################################
R$*            $: $1 $| @ $>"Rcpt_ok" $1
R$* $| @ $#TEMP $+    $: $1 $| T $2
R$* $| @ $#$*        $#$2
R$* $| @ RELAY        $@ RELAY
R$* $| @ $*        $: O $| $>"Relay_ok" $1
R$* $| T $+        $: T $2 $| $>"Relay_ok" $1
R$* $| $#TEMP $+    $#error $2
R$* $| $#$*        $#$2
R$* $| RELAY        $@ RELAY
R T $+ $| $*        $#error $1
# anything else is bogus
R$*            $#error $@ 5.7.1 $: "550 Relaying denied"


SRcpt_ok
R$*            $: $>ParseRecipient $1        strip relayable hosts


# authenticated via TLS?
R$*            $: $1 $| $>RelayTLS    client authenticated?
R$* $| $# $+        $# $2            error/ok?
R$* $| $*        $: $1            no

R$*            $: $1 $| $>"Local_Relay_Auth" $&{auth_type}
R$* $| $# $*        $# $2
R$* $| NO        $: $1
R$* $| $*        $: $1 $| $&{auth_type}
R$* $|            $: $1
R$* $| $={TrustAuthMech}    $# RELAY
R$* $| $*        $: $1
# anything terminating locally is ok
R$+ < @ $=w >        $@ RELAY
R$+ < @ $* $=R >    $@ RELAY
R$+ < @ $+ >        $: $>D <$2> <?> <+ To> <$1 < @ $2 >>
R<RELAY> $*        $@ RELAY
R<$* <TMPF>> $*        $#TEMP $@ 4.3.0 $: "451 Temporary system failure. Please try again later."
R<$*> <$*>        $: $2

# check for local user (i.e. unqualified address)
R$*            $: <?> $1
R<?> $* < @ $+ >    $: <REMOTE> $1 < @ $2 >
# local user is ok
R<?> $+            $@ RELAY
R<$+> $*        $: $2

SRelay_ok
# anything originating locally is ok
# check IP address
R$*            $: $&{client_addr}
R$@            $@ RELAY        originated locally
R0            $@ RELAY        originated locally
R127.0.0.1        $@ RELAY        originated locally
RIPv6:::1        $@ RELAY        originated locally
R$=R $*            $@ RELAY        relayable IP address
R$*            $: $>A <$1> <?> <+ Connect> <$1>
R<RELAY> $*         $@ RELAY        relayable IP address

R<<TMPF>> $*        $#TEMP $@ 4.3.0 $: "451 Temporary system failure. Please try again later."
R<$*> <$*>        $: $2
R$*            $: [ $1 ]        put brackets around it...
R$=w            $@ RELAY        ... and see if it is local


# check client name: first: did it resolve?
R$*            $: < $&{client_resolve} >
R<TEMP>            $#TEMP $@ 4.4.0 $: "450 Relaying temporarily denied. Cannot resolve PTR record for " $&{client_addr}
R<FORGED>        $#error $@ 5.7.1 $: "550 Relaying denied. IP name possibly forged " $&{client_name}
R<FAIL>            $#error $@ 5.7.1 $: "550 Relaying denied. IP name lookup failed " $&{client_name}
R$*            $: <@> $&{client_name}
# pass to name server to make hostname canonical
R<@> $* $=P         $:<?>  $1 $2
R<@> $+            $:<?>  $[ $1 $]
R$* .            $1            strip trailing dots
R<?> $=w        $@ RELAY
R<?> $* $=R            $@ RELAY
R<?> $*            $: $>D <$1> <?> <+ Connect> <$1>
R<RELAY> $*        $@ RELAY
R<$* <TMPF>> $*        $#TEMP $@ 4.3.0 $: "451 Temporary system failure. Please try again later."
R<$*> <$*>        $: $2

SF
R<$+> <$*> <$- $-> <$*>        $: <$(access $4:$1 $: ? $)> <$1> <$2> <$3 $4> <$5>
R<?> <$+> <$*> <+ $-> <$*>    $: <$(access $1 $: ? $)> <$1> <$2> <+ $3> <$4>
R<?> <$+ + $* @ $+> <$*> <$- $-> <$*>
            $: <$(access $6:$1+*@$3 $: ? $)> <$1+$2@$3> <$4> <$5 $6> <$7>
R<?> <$+ + $* @ $+> <$*> <+ $-> <$*>
            $: <$(access $1+*@$3 $: ? $)> <$1+$2@$3> <$4> <+ $5> <$6>
R<?> <$+ + $* @ $+> <$*> <$- $-> <$*>
            $: <$(access $6:$1@$3 $: ? $)> <$1+$2@$3> <$4> <$5 $6> <$7>
R<?> <$+ + $* @ $+> <$*> <+ $-> <$*>
            $: <$(access $1@$3 $: ? $)> <$1+$2@$3> <$4> <+ $5> <$6>
R<?> <$+> <$*> <$- $-> <$*>    $@ <$2> <$5>
R<$+ <TMPF>> <$*> <$- $-> <$*>    $@ <<TMPF>> <$5>
R<$+> <$*> <$- $-> <$*>        $@ <$1> <$5>


SE
R<$*> <$*> <$- $-> <$*>        $: <$(access $4:$1 $: ? $)> <$1> <$2> <$3 $4> <$5>
R<?> <$+> <$*> <+ $-> <$*>    $: <$(access $1 $: ? $)> <$1> <$2> <+ $3> <$4>
R<?> <$+> <$*> <$- $-> <$*>    $@ <$2> <$5>
R<$+ <TMPF>> <$*> <$- $-> <$*>    $@ <<TMPF>> <$5>
R<$+> <$*> <$- $-> <$*>        $@ <$1> <$5>


SU
R<$+> <$*> <$- $-> <$*>        $: <$(access $4:$1 $: ? $)> <$1> <$2> <$3 $4> <$5>
R<?> <$+> <$*> <+ $-> <$*>    $: <$(access $1 $: ? $)> <$1> <$2> <+ $3> <$4>
R<?> <$+ + $* @> <$*> <$- $-> <$*>
            $: <$(access $5:$1+*@ $: ? $)> <$1+$2@> <$3> <$4 $5> <$6>
R<?> <$+ + $* @> <$*> <+ $-> <$*>
            $: <$(access $1+*@ $: ? $)> <$1+$2@> <$3> <+ $4> <$5>
R<?> <$+ + $* @> <$*> <$- $-> <$*>
            $: <$(access $5:$1@ $: ? $)> <$1+$2@> <$3> <$4 $5> <$6>
R<?> <$+ + $* @> <$*> <+ $-> <$*>
            $: <$(access $1@ $: ? $)> <$1+$2@> <$3> <+ $4> <$5>
R<?> <$+> <$*> <$- $-> <$*>    $@ <$2> <$5>
R<$+ <TMPF>> <$*> <$- $-> <$*>    $@ <<TMPF>> <$5>
R<$+> <$*> <$- $-> <$*>        $@ <$1> <$5>


# class with valid marks for SearchList
C{Src}E F D U
SSearchList
# just call the ruleset with the name of the tag... nice trick...
R<$+> $| <$={Src}:$*> <$*>    $: <$1> $| <$4> $| $>$2 <$3> <?> <$1> <>
R<$+> $| <> $| <?> <>        $@ <?>
R<$+> $| <$+> $| <?> <>        $@ $>SearchList <$1> $| <$2>
R<$+> $| <$*> $| <$+> <>    $@ <$3>
R<$+> $| <$+>            $@ <$2>

SLocal_trust_auth
Strust_auth
R$*            $: $&{auth_type} $| $1
# required by RFC 2554 section 4.
R$@ $| $*        $#error $@ 5.7.1 $: "550 not authenticated"
R$* $| $&{auth_authen}        $@ identical
R$* $| <$&{auth_authen}>    $@ identical
R$* $| $*        $: $1 $| $>"Local_trust_auth" $2
R$* $| $#$*        $#$2
R$*            $#error $@ 5.7.1 $: "550 " $&{auth_authen} " not allowed to act as " $&{auth_author}


SLocal_Relay_Auth


Ssrv_features
R$*        $: $>D <$&{client_name}> <?> <! "Srv_Features"> <>
R<?>$*        $: $>A <$&{client_addr}> <?> <! "Srv_Features"> <>
R<?>$*        $: <$(access "Srv_Features": $: ? $)>
R<?>$*        $@ OK
R<$* <TMPF>>$*    $#temp
R<$+>$*        $# $1

Stry_tls
R$*        $: $>D <$&{server_name}> <?> <! "Try_TLS"> <>
R<?>$*        $: $>A <$&{server_addr}> <?> <! "Try_TLS"> <>
R<?>$*        $: <$(access "Try_TLS": $: ? $)>
R<?>$*        $@ OK
R<$* <TMPF>>$*    $#error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."
R<NO>$*        $#error $@ 5.7.1 $: "550 do not try TLS with " $&{server_name} " ["$&{server_addr}"]"


Stls_rcpt
R$*            $: $(macro {TLS_Name} $@ $&{server_name} $) $1
R$+            $: <?> $>CanonAddr $1
R<?> $+ < @ $+ . >    <?> $1 <@ $2 >
R<?> $+ < @ $+ >    $: $1 <@ $2 > $| <F:$1@$2> <U:$1@> <D:$2> <E:>
R<?> $+            $: $1 $| <U:$1@> <E:>
R$* $| $+    $: $1 $| $>SearchList <! "TLS_Rcpt"> $| $2 <>
R$* $| <?>    $@ OK
R$* $| <$* <TMPF>>    $#error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."
R$* $| <$+>    $@ $>"TLS_connection" $&{verify} $| <$2>


Stls_client
R$*        $: $(macro {TLS_Name} $@ $&{server_name} $) $1
R$* $| $*    $: $1 $| $>D <$&{client_name}> <?> <! "TLS_Clt"> <>
R$* $| <?>$*    $: $1 $| $>A <$&{client_addr}> <?> <! "TLS_Clt"> <>
R$* $| <?>$*    $: $1 $| <$(access "TLS_Clt": $: ? $)>
R$* $| <$* <TMPF>>    $#error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."
R$*        $@ $>"TLS_connection" $1


Stls_server
R$*        $: $(macro {TLS_Name} $@ $&{server_name} $) $1
R$*        $: $1 $| $>D <$&{server_name}> <?> <! "TLS_Srv"> <>
R$* $| <?>$*    $: $1 $| $>A <$&{server_addr}> <?> <! "TLS_Srv"> <>
R$* $| <?>$*    $: $1 $| <$(access "TLS_Srv": $: ? $)>
R$* $| <$* <TMPF>>    $#error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."
R$*        $@ $>"TLS_connection" $1


STLS_connection
R$* $| <$*>$*            $: $1 $| <$2>
# create the appropriate error codes
R$* $| <PERM + $={Tls} $*>    $: $1 $| <503:5.7.0> <$2 $3>
R$* $| <TEMP + $={Tls} $*>    $: $1 $| <403:4.7.0> <$2 $3>
R$* $| <$={Tls} $*>        $: $1 $| <403:4.7.0> <$2 $3>
# deal with TLS handshake failures: abort
RSOFTWARE $| <$-:$+> $*     $#error $@ $2 $: $1 " TLS handshake failed."
RSOFTWARE $| $*         $#error $@ 4.7.0 $: "403 TLS handshake failed."
# deal with TLS protocol errors: abort
RPROTOCOL $| <$-:$+> $*     $#error $@ $2 $: $1 " STARTTLS failed."
RPROTOCOL $| $*         $#error $@ 4.7.0 $: "403 STARTTLS failed."
R$* $| <$*> <VERIFY>        $: <$2> <VERIFY> <> $1
R$* $| <$*> <VERIFY + $+>    $: <$2> <VERIFY> <$3> $1
R$* $| <$*> <$={Tls}:$->$*    $: <$2> <$3:$4> <> $1
R$* $| <$*> <$={Tls}:$- + $+>$*    $: <$2> <$3:$4> <$5> $1
R$* $| $*            $@ OK
# authentication required: give appropriate error
# other side did authenticate (via STARTTLS)
R<$*><VERIFY> <> OK        $@ OK
R<$*><VERIFY> <$+> OK        $: <$1> <REQ:0> <$2>
R<$*><VERIFY:$-> <$*> OK    $: <$1> <REQ:$2> <$3>
R<$*><ENCR:$-> <$*> $*        $: <$1> <REQ:$2> <$3>
R<$-:$+><VERIFY $*> <$*>    $#error $@ $2 $: $1 " authentication required"
R<$-:$+><VERIFY $*> <$*> FAIL    $#error $@ $2 $: $1 " authentication failed"
R<$-:$+><VERIFY $*> <$*> NO    $#error $@ $2 $: $1 " not authenticated"
R<$-:$+><VERIFY $*> <$*> NOT    $#error $@ $2 $: $1 " no authentication requested"
R<$-:$+><VERIFY $*> <$*> NONE    $#error $@ $2 $: $1 " other side does not support STARTTLS"
R<$-:$+><VERIFY $*> <$*> $+    $#error $@ $2 $: $1 " authentication failure " $4
R<$*><REQ:$-> <$*>        $: <$1> <REQ:$2> <$3> $>max $&{cipher_bits} : $&{auth_ssf}
R<$*><REQ:$-> <$*> $-        $: <$1> <$2:$4> <$3> $(arith l $@ $4 $@ $2 $)
R<$-:$+><$-:$-> <$*> TRUE    $#error $@ $2 $: $1 " encryption too weak " $4 " less than " $3
R<$-:$+><$-:$-> <$*> $*        $: <$1:$2 ++ $5>
R<$-:$+ ++ >            $@ OK
R<$-:$+ ++ $+ >            $: <$1:$2> <$3>
R<$-:$+> < $+ ++ $+ >        <$1:$2> <$3> <$4>
R<$-:$+> $+            $@ $>"TLS_req" $3 $| <$1:$2>

STLS_req
R $| $+        $@ OK
R<CN> $* $| <$+>        $: <CN:$&{TLS_Name}> $1 $| <$2>
R<CN:$&{cn_subject}> $* $| <$+>        $@ $>"TLS_req" $1 $| <$2>
R<CN:$+> $* $| <$-:$+>    $#error $@ $4 $: $3 " CN " $&{cn_subject} " does not match " $1
R<CS:$&{cert_subject}> $* $| <$+>    $@ $>"TLS_req" $1 $| <$2>
R<CS:$+> $* $| <$-:$+>    $#error $@ $4 $: $3 " Cert Subject " $&{cert_subject} " does not match " $1
R<CI:$&{cert_issuer}> $* $| <$+>    $@ $>"TLS_req" $1 $| <$2>
R<CI:$+> $* $| <$-:$+>    $#error $@ $4 $: $3 " Cert Issuer " $&{cert_issuer} " does not match " $1
ROK            $@ OK

Smax
R:        $: 0
R:$-        $: $1
R$-:        $: $1
R$-:$-        $: $(arith l $@ $1 $@ $2 $) : $1 : $2
RTRUE:$-:$-    $: $2
R$-:$-:$-    $: $2

SRelayTLS
# authenticated?
R$*            $: <?> $&{verify}
R<?> OK            $: OK        authenticated: continue
R<?> $*            $@ NO        not authenticated
R$*            $: $&{cert_issuer}
R$+            $: $(access CERTISSUER:$1 $)
RRELAY            $# RELAY
RSUBJECT        $: <@> $&{cert_subject}
R<@> $+            $: <@> $(access CERTSUBJECT:$1 $)
R<@> RELAY        $# RELAY
R$*            $: NO


Sauthinfo
R$*        $: $1 $| $>D <$&{server_name}> <?> <! AuthInfo> <>
R$* $| <?>$*    $: $1 $| $>A <$&{server_addr}> <?> <! AuthInfo> <>
R$* $| <?>$*    $: $1 $| <$(access AuthInfo: $: ? $)> <>
R$* $| <?>$*    $@ no                no authinfo available
R$* $| <$*> <>    $# $2


SLocal_greet_pause
Sgreet_pause
R$*            $: <$1><?> $| $>"Local_greet_pause" $1
R<$*><?> $| $#$*    $#$2
R<$*><?> $| $*        $: $1
R$+ $| $+        $: $>D < $1 > <?> <! GreetPause> < $2 >
R   $| $+        $: $>A < $1 > <?> <! GreetPause> <>    empty client_name
R<?> <$+>        $: $>A < $1 > <?> <! GreetPause> <>    no: another lookup
R<?> <$*>        $# 2000
R<$* <TMPF>> <$*>    $@
R<$+> <$*>        $# $1

SEnvFromL
R<@>            $n            errors to mailer-daemon
R@ <@ $*>        $n            temporarily bypass Sun bogosity
R$+            $: $>AddDomain $1    add local domain if needed
R$*            $: $>MasqEnv $1        do masquerading


SEnvToL
R$+ < @ $* >        $: $1            strip host part

SHdrFromL
R<@>            $n            errors to mailer-daemon
R@ <@ $*>        $n            temporarily bypass Sun bogosity
R$+            $: $>AddDomain $1    add local domain if needed
R$*            $: $>MasqHdr $1        do masquerading


SHdrToL
R$+            $: $>AddDomain $1    add local domain if needed
R$* < @ *LOCAL* > $*    $: $1 < @ $j . > $2


SAddDomain
R$* < @ $* > $*     $@ $1 < @ $2 > $3    already fully qualified

R$+            $@ $1 < @ *LOCAL* >    add local qualification

SMasqSMTP
R$* < @ $* > $*        $@ $1 < @ $2 > $3        already fully qualified
R$+            $@ $1 < @ *LOCAL* >        add local qualification


SPseudoToReal

# pass <route-addr>s through
R< @ $+ > $*        $@ < @ $1 > $2            resolve <route-addr>


R$+ < @ $+ .UUCP. >    $: < $2 ! > $1            convert to UUCP form
R$+ < @ $* > $*        $@ $1 < @ $2 > $3        not UUCP form

# leave these in .UUCP form to avoid further tampering
R< $&h ! > $- ! $+    $@ $2 < @ $1 .UUCP. >
R< $&h ! > $-.$+ ! $+    $@ $3 < @ $1.$2 >
R< $&h ! > $+        $@ $1 < @ $&h .UUCP. >
R< $+ ! > $+        $: $1 ! $2 < @ $Y >        use UUCP_RELAY
R$+ < @ $~[ $* : $+ >    $@ $1 < @ $4 >            strip mailer: part
R$+ < @ >        $: $1 < @ *LOCAL* >        if no UUCP_RELAY

SEnvFromSMTP
R$+            $: $>PseudoToReal $1        sender/recipient common
R$* :; <@>        $@                list:; special case
R$*            $: $>MasqSMTP $1        qualify unqual'ed names
R$+            $: $>MasqEnv $1            do masquerading

SEnvToSMTP
R$+            $: $>PseudoToReal $1        sender/recipient common
R$+            $: $>MasqSMTP $1        qualify unqual'ed names
R$* < @ *LOCAL* > $*    $: $1 < @ $j . > $2


SHdrFromSMTP
R$+            $: $>PseudoToReal $1        sender/recipient common
R:; <@>            $@                list:; special case

# do special header rewriting
R$* <@> $*        $@ $1 <@> $2            pass null host through
R< @ $* > $*        $@ < @ $1 > $2            pass route-addr through
R$*            $: $>MasqSMTP $1        qualify unqual'ed names
R$+            $: $>MasqHdr $1            do masquerading

SMasqRelay
R$+            $: $>MasqSMTP $1
R$+            $: $>MasqHdr $1


SFromU

# handle error address as a special case
R<@>                $n            errors to mailer-daemon

# list:; syntax should disappear
R:; <@>                $@

R$* < @ $* . > $*        $1 < @ $2 > $3        strip trailing dots
R$* < @ $=w >            $1            strip local name
R<@ $- . UUCP > : $+        $1 ! $2            convert to UUCP format
R<@ $+ > : $+            $1 ! $2            convert to UUCP format
R$* < @ $- . UUCP >        $2 ! $1            convert to UUCP format
R$* < @ $+ >            $2 ! $1            convert to UUCP format
R$&h ! $+ ! $+            $@ $1 ! $2        $h!...!user => ...!user
R$&h ! $+            $@ $&h ! $1        $h!user => $h!user
R$+                $: $U ! $1        prepend our name
R! $+                $: $k ! $1        in case $U undefined


SEnvToU

# list:; should disappear
R:; <@>                $@

R$* < @ $* . > $*        $1 < @ $2 > $3        strip trailing dots
R$* < @ $=w >            $1            strip local name
R<@ $- . UUCP > : $+        $1 ! $2            convert to UUCP format
R<@ $+ > : $+            $1 ! $2            convert to UUCP format
R$* < @ $- . UUCP >        $2 ! $1            convert to UUCP format
R$* < @ $+ >            $2 ! $1            convert to UUCP format


SHdrToU

# list:; syntax should disappear
R:; <@>                $@

R$* < @ $* . > $*        $1 < @ $2 > $3        strip trailing dots
R$* < @ $=w >            $1            strip local name
R<@ $- . UUCP > : $+        $1 ! $2            convert to UUCP format
R<@ $+ > : $+            $1 ! $2            convert to UUCP format
R$* < @ $- . UUCP >        $2 ! $1            convert to UUCP format
R$* < @ $+ >            $2 ! $1            convert to UUCP format
R$&h ! $+ ! $+            $@ $1 ! $2        $h!...!user => ...!user
R$&h ! $+            $@ $&h ! $1        $h!user => $h!user
R$+                $: $U ! $1        prepend our name
R! $+                $: $k ! $1        in case $U undefined

SEnvFromUD

# handle error address as a special case
R<@>                $n            errors to mailer-daemon

# pass everything to standard SMTP mailer rewriting
R$*                $@ $>EnvFromSMTP $1

#
#  envelope sender rewriting for uucp-uudom mailer
#
SEnvFromUUD

# handle error address as a special case
R<@>                $n            errors to mailer-daemon

# do standard SMTP mailer rewriting
R$*                $: $>EnvFromSMTP $1

R$* < @ $* . > $*        $1 < @ $2 > $3        strip trailing dots
R<@ $- . UUCP > : $+        $@ $1 ! $2        convert to UUCP format
R<@ $+ > : $+            $@ $1 ! $2        convert to UUCP format
R$* < @ $- . UUCP >        $@ $2 ! $1        convert to UUCP format
R$* < @ $+ >            $@ $2 ! $1        convert to UUCP format


Mlocal,        P=/usr/bin/procmail, F=lsDFMAw5:/|@qSPfhn09, S=EnvFromL/HdrFromL, R=EnvToL/HdrToL,
        T=DNS/RFC822/X-Unix,
        A=procmail -a $h -d $u
Mprog,        P=/bin/sh, F=lsDFMoqeu09, S=EnvFromL/HdrFromL, R=EnvToL/HdrToL, D=$z:/,
        T=X-Unix/X-Unix/X-Unix,
        A=sh -c $u


Msmtp,        P=[IPC], F=mDFMuX, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n, L=990,
        T=DNS/RFC822/SMTP,
        A=TCP $h
Mesmtp,        P=[IPC], F=mDFMuXa, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n, L=990,
        T=DNS/RFC822/SMTP,
        A=TCP $h
Msmtp8,        P=[IPC], F=mDFMuX8, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n, L=990,
        T=DNS/RFC822/SMTP,
        A=TCP $h
Mdsmtp,        P=[IPC], F=mDFMuXa%, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n, L=990,
        T=DNS/RFC822/SMTP,
        A=TCP $h
Mrelay,        P=[IPC], F=mDFMuXa8, S=EnvFromSMTP/HdrFromSMTP, R=MasqSMTP, E=\r\n, L=2040,
        T=DNS/RFC822/SMTP,
        A=TCP $h


Mprocmail,    P=/usr/bin/procmail, F=DFMSPhnu9, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP/HdrFromSMTP,
        T=DNS/RFC822/X-Unix,
        A=procmail -m $h $f $u


# old UUCP mailer (two names)
Muucp,        P=/usr/bin/uux, F=DFMhuUd, S=FromU, R=EnvToU/HdrToU,
        M=2000000, T=X-UUCP/X-UUCP/X-Unix,
        A=uux - -r -a$g -gC $h!rmail ($u)
Muucp-old,    P=/usr/bin/uux, F=DFMhuUd, S=FromU, R=EnvToU/HdrToU,
        M=2000000, T=X-UUCP/X-UUCP/X-Unix,
        A=uux - -r -a$g -gC $h!rmail ($u)

# smart UUCP mailer (handles multiple addresses) (two names)
Msuucp,        P=/usr/bin/uux, F=mDFMhuUd, S=FromU, R=EnvToU/HdrToU,
        M=2000000, T=X-UUCP/X-UUCP/X-Unix,
        A=uux - -r -a$g -gC $h!rmail ($u)
Muucp-new,    P=/usr/bin/uux, F=mDFMhuUd, S=FromU, R=EnvToU/HdrToU,
        M=2000000, T=X-UUCP/X-UUCP/X-Unix,
        A=uux - -r -a$g -gC $h!rmail ($u)

# domain-ized UUCP mailer
Muucp-dom,    P=/usr/bin/uux, F=mDFMhud, S=EnvFromUD/HdrFromSMTP, R=EnvToSMTP,
        M=2000000, T=X-UUCP/X-UUCP/X-Unix,
        A=uux - -r -a$g -gC $h!rmail ($u)

# domain-ized UUCP mailer with UUCP-style sender envelope
Muucp-uudom,    P=/usr/bin/uux, F=mDFMhud, S=EnvFromUUD/HdrFromSMTP, R=EnvToSMTP,
        M=2000000, T=X-UUCP/X-UUCP/X-Unix,
        A=uux - -r -a$g -gC $h!rmail ($u)


Mbsmtp,        P=/usr/lib/bsmtp/bsmtp, F=DFmMnuX8,
        S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n, L=990,
        T=DNS/RFC822/SMTP,
        A=bsmtp -f $g $h $u

Mfido,        P=/usr/lib/ifmail/ifmail, F=msSDFMuC, S=EnvFromUD/HdrFromSMTP, R=EnvToSMTP,
        M=2000000, T=X-UUCP/X-UUCP/X-Unix,
        A=ifmail $u -r$h


O MatchGECOS=False

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру