Skip to content
Snippets Groups Projects
Commit a1714f48 authored by Stuart D. Gathman's avatar Stuart D. Gathman
Browse files

Get denatured viruses from encrypted zip to avoid alarming scanners,

this allows test cases to pass again after last commit.
parent edc2f733
No related branches found
No related tags found
No related merge requests found
...@@ -29,6 +29,7 @@ ...@@ -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() ...@@ -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,6 +99,10 @@ class MimeTestCase(unittest.TestCase): ...@@ -90,6 +99,10 @@ 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'):
try:
with self.zf.open(vname,"r") as fp:
msg = mime.message_from_file(fp)
except KeyError:
with open('test/'+vname,"rb") as fp: with open('test/'+vname,"rb") as fp:
msg = mime.message_from_file(fp) msg = mime.message_from_file(fp)
mime.defang(msg,scan_zip=True) mime.defang(msg,scan_zip=True)
...@@ -118,7 +131,7 @@ class MimeTestCase(unittest.TestCase): ...@@ -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'
......
...@@ -2,6 +2,7 @@ import unittest ...@@ -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): ...@@ -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): ...@@ -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): ...@@ -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): ...@@ -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")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment