Get denatured viruses from encrypted zip to avoid alarming scanners,

this allows test cases to pass again after last commit.
This commit is contained in:
Stuart D. Gathman
2019-08-10 20:28:48 -04:00
parent edc2f73375
commit a1714f4838
2 changed files with 33 additions and 7 deletions
+16 -3
View File
@@ -29,6 +29,7 @@
from __future__ import print_function from __future__ import print_function
import unittest import unittest
import mime import mime
import zipfile
import socket import socket
try: try:
from StringIO import StringIO from StringIO import StringIO
@@ -51,6 +52,14 @@ hostname = socket.gethostname()
class MimeTestCase(unittest.TestCase): class MimeTestCase(unittest.TestCase):
def setUp(self):
self.zf = zipfile.ZipFile('test/virus.zip','r')
self.zf.setpassword('denatured')
def tearDown(self):
self.zf.close()
self.zf = None
# test mime parameter parsing # test mime parameter parsing
def testParam(self): def testParam(self):
plist = mime._parseparam('; boundary="----=_NextPart_000_4e56_490d_48e3"') plist = mime._parseparam('; boundary="----=_NextPart_000_4e56_490d_48e3"')
@@ -90,8 +99,12 @@ class MimeTestCase(unittest.TestCase):
def testDefang(self,vname='virus1',part=1, def testDefang(self,vname='virus1',part=1,
fname='LOVE-LETTER-FOR-YOU.TXT.vbs'): fname='LOVE-LETTER-FOR-YOU.TXT.vbs'):
with open('test/'+vname,"rb") as fp: try:
msg = mime.message_from_file(fp) with self.zf.open(vname,"r") as fp:
msg = mime.message_from_file(fp)
except KeyError:
with open('test/'+vname,"rb") as fp:
msg = mime.message_from_file(fp)
mime.defang(msg,scan_zip=True) mime.defang(msg,scan_zip=True)
self.assertTrue(msg.ismodified(),"virus not removed") self.assertTrue(msg.ismodified(),"virus not removed")
oname = vname + '.out' oname = vname + '.out'
@@ -118,7 +131,7 @@ class MimeTestCase(unittest.TestCase):
# virus6 has no parts - the virus is directly inline # virus6 has no parts - the virus is directly inline
def testDefang6(self,vname="virus6",fname='FAX20.exe'): def testDefang6(self,vname="virus6",fname='FAX20.exe'):
with open('test/'+vname,"rb") as fp: with self.zf.open(vname,"r") as fp:
msg = mime.message_from_file(fp) msg = mime.message_from_file(fp)
mime.defang(msg) mime.defang(msg)
oname = vname + '.out' oname = vname + '.out'
+17 -4
View File
@@ -2,6 +2,7 @@ import unittest
import Milter import Milter
import sample import sample
import mime import mime
import zipfile
from Milter.test import TestBase from Milter.test import TestBase
from Milter.testctx import TestCtx from Milter.testctx import TestCtx
@@ -12,6 +13,14 @@ class TestMilter(TestBase,sample.sampleMilter):
class BMSMilterTestCase(unittest.TestCase): class BMSMilterTestCase(unittest.TestCase):
def setUp(self):
self.zf = zipfile.ZipFile('test/virus.zip','r')
self.zf.setpassword('denatured')
def tearDown(self):
self.zf.close()
self.zf = None
def testCtx(self,fname='virus1'): def testCtx(self,fname='virus1'):
ctx = TestCtx() ctx = TestCtx()
Milter.factory = sample.sampleMilter Milter.factory = sample.sampleMilter
@@ -20,7 +29,8 @@ class BMSMilterTestCase(unittest.TestCase):
ctx._setsymval('j','mailhost') ctx._setsymval('j','mailhost')
rc = ctx._connect() rc = ctx._connect()
self.assertTrue(rc == Milter.CONTINUE) self.assertTrue(rc == Milter.CONTINUE)
rc = ctx._feedMsg(fname) with self.zf.open(fname) as fp:
rc = ctx._feedFile(fp)
milter = ctx.getpriv() milter = ctx.getpriv()
# self.assertTrue(milter.user == 'batman',"getsymval failed: "+ # self.assertTrue(milter.user == 'batman',"getsymval failed: "+
# "%s != %s"%(milter.user,'batman')) # "%s != %s"%(milter.user,'batman'))
@@ -44,7 +54,8 @@ class BMSMilterTestCase(unittest.TestCase):
milter.setsymval('j','mailhost') milter.setsymval('j','mailhost')
rc = milter.connect() rc = milter.connect()
self.assertTrue(rc == Milter.CONTINUE) self.assertTrue(rc == Milter.CONTINUE)
rc = milter.feedMsg(fname) with self.zf.open(fname) as fp:
rc = milter.feedFile(fp)
self.assertTrue(milter.user == 'batman',"getsymval failed") self.assertTrue(milter.user == 'batman',"getsymval failed")
# setsymlist not working in TestBase # setsymlist not working in TestBase
#self.assertTrue(milter.auth_type != 'batcomputer',"setsymlist failed") #self.assertTrue(milter.auth_type != 'batcomputer',"setsymlist failed")
@@ -75,13 +86,15 @@ class BMSMilterTestCase(unittest.TestCase):
rc = milter.feedMsg('samp1') rc = milter.feedMsg('samp1')
self.assertTrue(rc == Milter.ACCEPT) self.assertTrue(rc == Milter.ACCEPT)
self.assertFalse(milter._bodyreplaced,"Milter needlessly replaced body.") self.assertFalse(milter._bodyreplaced,"Milter needlessly replaced body.")
rc = milter.feedMsg("virus3") with self.zf.open("virus3") as fp:
rc = milter.feedFile(fp)
self.assertTrue(rc == Milter.ACCEPT) self.assertTrue(rc == Milter.ACCEPT)
self.assertTrue(milter._bodyreplaced,"Message body not replaced") self.assertTrue(milter._bodyreplaced,"Message body not replaced")
fp = milter._body fp = milter._body
open("test/virus3.tstout","wb").write(fp.getvalue()) open("test/virus3.tstout","wb").write(fp.getvalue())
#self.assertTrue(fp.getvalue() == open("test/virus3.out","r").read()) #self.assertTrue(fp.getvalue() == open("test/virus3.out","r").read())
rc = milter.feedMsg("virus6") with self.zf.open("virus6") as fp:
rc = milter.feedFile(fp)
self.assertTrue(rc == Milter.ACCEPT) self.assertTrue(rc == Milter.ACCEPT)
self.assertTrue(milter._bodyreplaced,"Message body not replaced") self.assertTrue(milter._bodyreplaced,"Message body not replaced")
self.assertTrue(milter._headerschanged,"Message headers not adjusted") self.assertTrue(milter._headerschanged,"Message headers not adjusted")