65 lines
1.2 KiB
Text
65 lines
1.2 KiB
Text
![]() |
#!/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
|