Skip to content
Snippets Groups Projects
Commit b554efad authored by Jan Philipp Timme's avatar Jan Philipp Timme
Browse files

Introduce rough feature skeleton

parent 3868e61f
No related branches found
No related tags found
No related merge requests found
...@@ -5,6 +5,8 @@ import logging ...@@ -5,6 +5,8 @@ import logging
import Milter import Milter
from Milter.utils import parse_addr from Milter.utils import parse_addr
import re
# Basic logger that also logs to stdout # Basic logger that also logs to stdout
# TODO: Improve this a lot. # TODO: Improve this a lot.
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
...@@ -17,13 +19,46 @@ handler.setFormatter(formatter) ...@@ -17,13 +19,46 @@ handler.setFormatter(formatter)
logger.addHandler(handler) logger.addHandler(handler)
split_from_regex = re.compile('(?P<from_label>("(.*)")|(.*))(.*)<(?P<from_address>.*)>')
def splitFromHeader(value):
match = split_from_regex.match(value)
result = {
'label': match.group('from_label').strip(),
'address': match.group('from_address').strip()
}
return result
class SuspiciousFrom(Milter.Base): class SuspiciousFrom(Milter.Base):
def __init__(self): def __init__(self):
self.id = Milter.uniqueID() self.id = Milter.uniqueID()
logger.info(f"{self.id} got fired up.") logger.info(f"{self.id} got fired up.")
self.milter_final_result = Milter.ACCEPT
self.new_headers = []
def header(self, field, value): def header(self, field, value):
logger.info(f"{self.id} Got header: {field} --> {value}") if field.lower() == 'from':
logger.info(f"Got \"From:\" header with raw value: '{value}'")
split = splitFromHeader(value)
logger.info(f"Label: {split['label']}, address: {split['address']}")
if '@' in split['label']:
self.milter_final_result = Milter.REJECT
else:
self.new_headers.append({'name': 'X-From-Checked', 'value': 'Yes, no address in label.'})
# Supposedly no additional address in the label, accept it for now
# TODO: Also decode utf-8 weirdness and check in there
self.milter_final_result = Milter.ACCEPT
return Milter.CONTINUE
else:
return Milter.CONTINUE
def eom(self):
# Finish up message according to results collected on the way.
for new_header in self.new_headers:
self.addheader(new_header['name'], new_header['value'])
return self.milter_final_result
def main(): def main():
milter_socket = "inet:7777@127.0.0.1" milter_socket = "inet:7777@127.0.0.1"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment