Subversion Repositories planix.SVN

Rev

Blame | Last modification | View Log | RSS feed

#!/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