From a1714f4838786b0359677dbc7c62d3dc647a6b19 Mon Sep 17 00:00:00 2001 From: "Stuart D. Gathman" <stuart@gathman.org> Date: Sat, 10 Aug 2019 20:28:48 -0400 Subject: [PATCH] Get denatured viruses from encrypted zip to avoid alarming scanners, this allows test cases to pass again after last commit. --- testmime.py | 19 ++++++++++++++++--- testsample.py | 21 +++++++++++++++++---- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/testmime.py b/testmime.py index d3b5b5f..c2ff374 100644 --- a/testmime.py +++ b/testmime.py @@ -29,6 +29,7 @@ from __future__ import print_function import unittest import mime +import zipfile import socket try: from StringIO import StringIO @@ -51,6 +52,14 @@ hostname = socket.gethostname() 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 def testParam(self): plist = mime._parseparam('; boundary="----=_NextPart_000_4e56_490d_48e3"') @@ -90,8 +99,12 @@ class MimeTestCase(unittest.TestCase): def testDefang(self,vname='virus1',part=1, fname='LOVE-LETTER-FOR-YOU.TXT.vbs'): - with open('test/'+vname,"rb") as fp: - msg = mime.message_from_file(fp) + try: + 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) self.assertTrue(msg.ismodified(),"virus not removed") oname = vname + '.out' @@ -118,7 +131,7 @@ class MimeTestCase(unittest.TestCase): # virus6 has no parts - the virus is directly inline 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) mime.defang(msg) oname = vname + '.out' diff --git a/testsample.py b/testsample.py index 96f40cb..8f43c71 100644 --- a/testsample.py +++ b/testsample.py @@ -2,6 +2,7 @@ import unittest import Milter import sample import mime +import zipfile from Milter.test import TestBase from Milter.testctx import TestCtx @@ -12,6 +13,14 @@ class TestMilter(TestBase,sample.sampleMilter): 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'): ctx = TestCtx() Milter.factory = sample.sampleMilter @@ -20,7 +29,8 @@ class BMSMilterTestCase(unittest.TestCase): ctx._setsymval('j','mailhost') rc = ctx._connect() self.assertTrue(rc == Milter.CONTINUE) - rc = ctx._feedMsg(fname) + with self.zf.open(fname) as fp: + rc = ctx._feedFile(fp) milter = ctx.getpriv() # self.assertTrue(milter.user == 'batman',"getsymval failed: "+ # "%s != %s"%(milter.user,'batman')) @@ -44,7 +54,8 @@ class BMSMilterTestCase(unittest.TestCase): milter.setsymval('j','mailhost') rc = milter.connect() 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") # setsymlist not working in TestBase #self.assertTrue(milter.auth_type != 'batcomputer',"setsymlist failed") @@ -75,13 +86,15 @@ class BMSMilterTestCase(unittest.TestCase): rc = milter.feedMsg('samp1') self.assertTrue(rc == Milter.ACCEPT) 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(milter._bodyreplaced,"Message body not replaced") fp = milter._body open("test/virus3.tstout","wb").write(fp.getvalue()) #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(milter._bodyreplaced,"Message body not replaced") self.assertTrue(milter._headerschanged,"Message headers not adjusted") -- GitLab