1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- #!/bin/rc
- rfork n
- # exit status matching:
- #
- # *discard* - is really bad, refuse the message
- # *accept* - is really good, leave attachment alone
- # * - rewrite attachment to have .suspect extension
- #
- if(! ~ $#* 1){
- echo usage: validateattachment mboxfile >[1=2]
- exit usage
- }
- echo validating >[1=2]
- 9fs other
- fn save {
- d=`{date -n}
- cp body /n/other/upas/tmp/$d.$1
- cp raw /n/other/upas/tmp/$d.$1.raw
- whatis x >/n/other/upas/tmp/$d.$1.file
- }
- upas/fs -f $1
- cd /mail/fs/mbox/1
- x=`{file body | sed s/body://}
- 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 body >[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
|