9 Commits
1.0.4 ... 1.0.7

13 changed files with 30 additions and 13 deletions

View File

@@ -1,3 +1,3 @@
include LICENSE README.md include LICENSE README.md
recursive-include docs * recursive-include pyquarantine/docs *
recursive-include misc * recursive-include pyquarantine/misc *

View File

@@ -17,6 +17,7 @@ import configparser
import logging import logging
import os import os
import re import re
import encodings
from Milter.utils import parse_addr from Milter.utils import parse_addr
from collections import defaultdict from collections import defaultdict
@@ -31,6 +32,7 @@ from pyquarantine import storages
from pyquarantine import whitelists from pyquarantine import whitelists
__all__ = [ __all__ = [
"make_header",
"Quarantine", "Quarantine",
"QuarantineMilter", "QuarantineMilter",
"setup_milter", "setup_milter",
@@ -40,9 +42,25 @@ __all__ = [
"notifications", "notifications",
"storages", "storages",
"run", "run",
"version",
"whitelists"] "whitelists"]
__version__ = "1.0.7"
################################################
# add charset alias for windows-874 encoding #
################################################
aliases = encodings.aliases.aliases
for alias in ["windows-874", "windows_874"]:
if alias not in aliases:
aliases[alias] = "cp874"
setattr(encodings.aliases, "aliases", aliases)
################################################
def make_header(decoded_seq, maxlinelen=None, header_name=None, def make_header(decoded_seq, maxlinelen=None, header_name=None,
continuation_ws=' ', errors='strict'): continuation_ws=' ', errors='strict'):
@@ -342,7 +360,7 @@ class QuarantineMilter(Milter.Base):
if quarantine.host_in_whitelist(hostaddr): if quarantine.host_in_whitelist(hostaddr):
self.logger.debug( self.logger.debug(
f"host {hostaddr[0]} is in whitelist of " f"host {hostaddr[0]} is in whitelist of "
f"quarantine {quarantine['name']}") f"quarantine {quarantine.name}")
self.quarantines.remove(quarantine) self.quarantines.remove(quarantine)
if not self.quarantines: if not self.quarantines:
self.logger.debug( self.logger.debug(
@@ -384,7 +402,8 @@ class QuarantineMilter(Milter.Base):
# write email header to memory buffer # write email header to memory buffer
self.fp.write(f"{name}: {value}\r\n".encode( self.fp.write(f"{name}: {value}\r\n".encode(
encoding="ascii", errors="replace")) encoding="ascii", errors="replace"))
value = str(make_header(decode_header(value), errors="replace")) header = make_header(decode_header(value), errors="replace")
value = str(header).replace("\x00", "")
self.logger.debug( self.logger.debug(
f"{self.qid}: decoded header: {name}: {value}") f"{self.qid}: decoded header: {name}: {value}")
self.headers.append((name, value)) self.headers.append((name, value))

View File

@@ -21,14 +21,14 @@ import sys
import time import time
from pyquarantine import QuarantineMilter, setup_milter from pyquarantine import QuarantineMilter, setup_milter
from pyquarantine.version import __version__ as version from pyquarantine import __version__ as version
def _get_quarantine(quarantines, name): def _get_quarantine(quarantines, name):
try: try:
quarantine = next((q for q in quarantines if q.name == name)) quarantine = next((q for q in quarantines if q.name == name))
except StopIteration: except StopIteration:
raise RuntimeError(f"invalid quarantine 'name'") raise RuntimeError("invalid quarantine 'name'")
return quarantine return quarantine

View File

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -212,7 +212,7 @@ class EMailNotification(BaseNotification):
raise RuntimeError(f"error reading image: {e}") raise RuntimeError(f"error reading image: {e}")
else: else:
filename = basename(img_path) filename = basename(img_path)
img.add_header(f"Content-ID", f"<{filename}>") img.add_header("Content-ID", f"<{filename}>")
self.embedded_imgs.append(img) self.embedded_imgs.append(img)
def get_email_body_soup(self, qid, msg): def get_email_body_soup(self, qid, msg):

View File

@@ -22,7 +22,7 @@ import sys
import pyquarantine import pyquarantine
from pyquarantine.version import __version__ as version from pyquarantine import __version__ as version
def main(): def main():

View File

@@ -1 +0,0 @@
__version__ = "1.0.4"

2
setup.cfg Normal file
View File

@@ -0,0 +1,2 @@
[metadata]
version = attr: pyquarantine.__version__

View File

@@ -4,11 +4,8 @@ def read_file(fname):
with open(fname, 'r') as f: with open(fname, 'r') as f:
return f.read() return f.read()
version = {}
exec(read_file("pyquarantine/version.py"), version)
setup(name = "pyquarantine", setup(name = "pyquarantine",
version = version["__version__"],
author = "Thomas Oettli", author = "Thomas Oettli",
author_email = "spacefreak@noop.ch", author_email = "spacefreak@noop.ch",
description = "A pymilter based sendmail/postfix pre-queue filter.", description = "A pymilter based sendmail/postfix pre-queue filter.",