#!/usr/local/plan9/bin/rc
rfork n

. 9.rc

# exit status matching:
#
#	$discard - is really bad, refuse the message 
#	$accept - is really good, leave attachment alone
#	anything else - rewrite attachment to have .suspect extension
# 

# 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
}

# 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
}

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'*
	
	# >[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.
	if(! unzip -tsf $file >[2=1] >/dev/null){
		echo corrupt zip file!
		exit $discard
	}
	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


