#!/bin/rc
rfork en
fn usage{
echo 'usage: validatesender [-n /net] plan9.bell-labs.com glenda ip' >[1=2]
exit usage
}
echo $sysname $pid '$' validatesender $* >>/sys/log/smtpd.mx
netroot=/net
if(~ $1 -n){
shift
netroot=$1
shift
}
if(! ~ $#* 3)
usage
dom=$1
addr=$2
# Cause some problems
if(~ $dom swtch.com && ~ $addr glenda && ! ~ $sysname olive)
exit 'deferred: always defer this one'
# Sites that we have to special case
# Lucent only - use external network when mail from external domains
# is delivered to us internally. Assume that local domains are fine.
#netroot=/net
#if(~ $dom *.lucent.com lucent.com *.bell-labs.com bell-labs.com)
# exit ''
#if(! ~ $sysname ethel)
# exit ''
#if(~ $sysname ethel){
# if(! test -d /net.alt/tcp)
# import outside /net.alt
# if(test -d /net.alt/tcp)
# netroot=/net.alt
#}
# test spf
timestamp=`{date}
spfstat=`{upas/spf -u $addr -d $dom -a $3 -l YOURDOM.COM >[2=1]}
echo -n $timestamp >> /sys/log/spf
echo -n ' upas/spf -u '^$addr^' -d '^$dom^' -a '^$3^' -l YOURDOM.COM' >> /sys/log/spf
echo ' '^$spfstat >> /sys/log/spf
if (~ $spfstat Fail) {
exit 'rejected: SPF status '^$spfstat^' is not allowed. Please update your DNS spf record'
}
if(x=`{upas/smtp -p $netroot/tcp!$dom /dev/null $addr >[2=1] |
tee >{sed 's/^/'$sysname' '$pid' /' >> /sys/log/smtpd.mx} |
tail -1})
exit ''
smtpstatus=$status
if(~ $#x 0)
x=$smtpstatus
if(~ $smtpstatus *'Permanent Failure'*)
exit 'rejected: smtp ping: '^$"x
exit 'deferred: smtp ping: '^$"x
|