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:
+14
-1
@@ -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,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):
|
|||||||
|
|
||||||
# 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
@@ -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")
|
||||||
|
|||||||
Reference in New Issue
Block a user