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