12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- #!/bin/rc
- # validateattachment mboxfile
- rfork en
- upastmp=/mail/tmp
- #
- # 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]
- fn save {
- d=`{date -n}
- cp body $upastmp/$d.$1
- cp raw $upastmp/$d.$1.raw
- whatis x >$upastmp/$d.$1.file
- }
- fn sigexit {
- rm -f $upastmp/$d.$1^('' .raw .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
|