#!/usr/bin/env python3 import re from audit.system.plugins.postfix.postfix import postfix class Postfix: def __init__(self, arguments): self._objects = postfix() self._reports = dict() self._postfix_file = arguments["postfix_file"] # Create the report self._constructReports() # Report self._reports["filename"] = self._postfix_file def runAudit(self): print("Running test for postfix") self._runParsing() def getReports(self) -> dict: return self._reports def _runParsing(self): # Check if the file exist try: with open(self._postfix_file, 'rb') as fdata: self._parseFile(fdata) except FileNotFoundError: print("No postfix file found. Add into the report") pass def _parseFile(self, fdata): data = fdata.read() lines = data.splitlines() for line in lines: line = line.decode('utf-8') for obj in self._objects: grDirective = re.search( f"^({obj['flag']})", line ) if grDirective: res = False if not isinstance(obj['value'], list): obj['value'] = [obj['value']] for value in obj['value']: res = self._check_value_exist(line, value) if res: break if res: self._reports["postfix"][obj['flag']] = dict() self._reports["postfix"][obj['flag']]["result"] = "success" self._reports["postfix"][obj['flag']]["description"] = obj['description'] self._reports["postfix"][obj['flag']]["flagFound"] = line else: self._reports["postfix"][obj['flag']] = dict() self._reports["postfix"][obj['flag']]["result"] = "failed" self._reports["postfix"][obj["flag"]]["recommand_value"] = obj["value"] self._reports["postfix"][obj['flag']]["description"] = obj['description'] self._reports["postfix"][obj['flag']]["flag"] = obj['flag'] def _check_value_exist(self, line, value) -> bool: if '[' in value: value = value.replace('[', '\[') if ']' in value: value = value.replace(']', '\]') grValue = re.search(value, line) if grValue: return True return False def _constructReports(self): """ Construct dictionary for result of the tests Each entry contains: Key: - filename: filename of the test - line: line of the test - parse: Display the line where the vulnerabilites has been found - description: description of the vulnerability - level: high, medium or low """ self._reports['postfix'] = dict()