xref: /plan9/mail/lib/validateattachment (revision ff579efb6d9c16f03df7f0fbdbd7810dcb61813e)
1a21ce2d6SDavid du Colombier#!/bin/rc
2850dd0caSDavid du Colombier# validateattachment mboxfile
3850dd0caSDavid du Colombierrfork en
4850dd0caSDavid du Colombierupastmp=/mail/tmp
5850dd0caSDavid du Colombier#
6a21ce2d6SDavid du Colombier# exit status matching:
7a21ce2d6SDavid du Colombier#
8a21ce2d6SDavid du Colombier#	*discard* - is really bad, refuse the message
9a21ce2d6SDavid du Colombier#	*accept* - is really good, leave attachment alone
10a21ce2d6SDavid du Colombier#	* - rewrite attachment to have .suspect extension
11a21ce2d6SDavid du Colombier#
12a21ce2d6SDavid du Colombier
13a21ce2d6SDavid du Colombierif(! ~ $#* 1){
14a21ce2d6SDavid du Colombier	echo usage: validateattachment mboxfile >[1=2]
15a21ce2d6SDavid du Colombier	exit usage
16a21ce2d6SDavid du Colombier}
17a21ce2d6SDavid du Colombier
18a21ce2d6SDavid du Colombierecho validating >[1=2]
19e79e25eaSDavid du Colombierfn save {
20e79e25eaSDavid du Colombier	d=`{date -n}
21850dd0caSDavid du Colombier	cp body $upastmp/$d.$1
22850dd0caSDavid du Colombier	cp raw  $upastmp/$d.$1.raw
23850dd0caSDavid du Colombier	whatis x >$upastmp/$d.$1.file
24850dd0caSDavid du Colombier}
25850dd0caSDavid du Colombierfn sigexit {
26850dd0caSDavid du Colombier	rm -f $upastmp/$d.$1^('' .raw .file)
27e79e25eaSDavid du Colombier}
28a21ce2d6SDavid du Colombier
29a21ce2d6SDavid du Colombierupas/fs -f $1
30a21ce2d6SDavid du Colombiercd /mail/fs/mbox/1
31a21ce2d6SDavid du Colombier
32e79e25eaSDavid du Colombierx=`{file body | sed s/body://}
33a21ce2d6SDavid du Colombierx=$"x
34a21ce2d6SDavid du Colombierswitch($x){
35a21ce2d6SDavid du Colombiercase *Ascii* *text* *'c program'* *'rc executable'*
36e79e25eaSDavid du Colombier	save accept
37a21ce2d6SDavid du Colombier	exit accept
38a21ce2d6SDavid du Colombier
39a21ce2d6SDavid du Colombiercase *'zip archive'*
40e79e25eaSDavid du Colombier	# >[2=1] because sometimes we get zip files we can't parse
41e79e25eaSDavid du Colombier	# but the errors look like
42e79e25eaSDavid du Colombier	# unzip: reading data for philw.doc.scr failed: ...
43e79e25eaSDavid du Colombier	# so we can still catch these.
44e79e25eaSDavid du Colombier	if(unzip -tsf body >[2=1] | grep -si '      |\.(scr|exe|pif|bat|com)$'){
45a21ce2d6SDavid du Colombier		echo executables inside zip file!
46a21ce2d6SDavid du Colombier		exit discard
47a21ce2d6SDavid du Colombier	}
48a21ce2d6SDavid du Colombier
49*ff579efbSDavid du Colombiercase jpeg 'PNG image' bmp 'GIF image' *'plan 9 image'*
50e79e25eaSDavid du Colombier	save accept
51e79e25eaSDavid du Colombier	exit accept
52e79e25eaSDavid du Colombier
53a21ce2d6SDavid du Colombiercase *Microsoft* *Office*
54e79e25eaSDavid du Colombier	save wrap
55a21ce2d6SDavid du Colombier	exit wrap
56a21ce2d6SDavid du Colombier
57a21ce2d6SDavid du Colombiercase *MSDOS*
58a21ce2d6SDavid du Colombier	# no executables
59a21ce2d6SDavid du Colombier	echo $x
60a21ce2d6SDavid du Colombier	exit discard
61a21ce2d6SDavid du Colombier}
62a21ce2d6SDavid du Colombier
63e79e25eaSDavid du Colombiersave wrap
64a21ce2d6SDavid du Colombierexit wrap
65