2006-04-09 00:24:14 +00:00
|
|
|
#!/usr/local/plan9/bin/rc
|
|
|
|
rfork n
|
|
|
|
|
|
|
|
. 9.rc
|
|
|
|
|
|
|
|
# exit status matching:
|
|
|
|
#
|
2006-04-12 13:10:08 +00:00
|
|
|
# $discard - is really bad, refuse the message
|
|
|
|
# $accept - is really good, leave attachment alone
|
|
|
|
# anything else - rewrite attachment to have .suspect extension
|
2006-04-09 00:24:14 +00:00
|
|
|
#
|
|
|
|
|
|
|
|
# magic exit statuses known to vf
|
|
|
|
accept=10
|
|
|
|
discard=13
|
|
|
|
|
|
|
|
wrap=123 # anything but 10, 13
|
|
|
|
|
|
|
|
if(! ~ $#* 1){
|
|
|
|
echo usage: validateattachment mboxfile >[1=2]
|
|
|
|
exit usage
|
|
|
|
}
|
|
|
|
|
2006-04-12 13:10:08 +00:00
|
|
|
# some idiot virus is sending around attachments marked as .zip
|
|
|
|
# that are completely bogus and just say %TS_ZIP_ATTACH%
|
|
|
|
# as the base64 encoding of the zip file. gmail rejects all zip
|
|
|
|
# attachments when we forward them, so nip this one here.
|
|
|
|
if(grep -s '^%TS_ZIP_ATTACH%$' $1 && ~ `{wc -l <$1} 1 2 3 4 5 6 7 8 9 10){
|
|
|
|
echo bogus zip file!
|
|
|
|
exit $discard
|
|
|
|
}
|
|
|
|
|
2006-04-09 00:24:14 +00:00
|
|
|
upas/unvf < $1 >$1.unvf
|
|
|
|
file=$1.unvf
|
|
|
|
fn sigexit { rm $file }
|
|
|
|
|
|
|
|
fn save {
|
|
|
|
# d=`{date -n}
|
|
|
|
# cp $file /n/other/upas/tmp/$d.$1
|
|
|
|
# cp raw /n/other/upas/tmp/$d.$1.raw
|
|
|
|
# whatis x >/n/other/upas/tmp/$d.$1.file
|
|
|
|
}
|
|
|
|
|
|
|
|
x=`{file <$file | sed s/stdin://}
|
|
|
|
x=$"x
|
|
|
|
switch($x){
|
|
|
|
case *Ascii* *text* *'c program'* *'rc executable'*
|
|
|
|
save accept
|
|
|
|
exit $accept
|
|
|
|
|
|
|
|
case *'zip archive'*
|
2006-04-12 13:10:08 +00:00
|
|
|
|
2006-04-09 00:24:14 +00:00
|
|
|
# >[2=1] because sometimes we get zip files we can't parse
|
|
|
|
# but the errors look like
|
|
|
|
# unzip: reading data for philw.doc.scr failed: ...
|
|
|
|
# so we can still catch these.
|
2007-11-27 20:39:06 +00:00
|
|
|
if(! unzip -tsf $file >[2=1] >/dev/null){
|
|
|
|
echo corrupt zip file!
|
|
|
|
exit $discard
|
|
|
|
}
|
2006-04-09 00:24:14 +00:00
|
|
|
if(unzip -tsf $file >[2=1] | grep -si ' |\.(scr|exe|pif|bat|com)$'){
|
|
|
|
echo executables inside zip file!
|
|
|
|
exit $discard
|
|
|
|
}
|
|
|
|
|
|
|
|
case jpeg 'PNG image' bmp 'GIF image' *'plan 9 image'
|
|
|
|
save accept
|
|
|
|
exit $accept
|
|
|
|
|
|
|
|
case *Microsoft* *Office*
|
|
|
|
save wrap
|
|
|
|
exit $wrap
|
|
|
|
|
|
|
|
case *MSDOS*
|
|
|
|
# no executables
|
|
|
|
echo $x
|
|
|
|
exit $discard
|
|
|
|
}
|
|
|
|
|
|
|
|
save wrap
|
|
|
|
exit $wrap
|
|
|
|
|
|
|
|
|