Bugfix
This commit is contained in:
@@ -158,7 +158,7 @@ class HeaderRule:
|
|||||||
occurrences = {}
|
occurrences = {}
|
||||||
|
|
||||||
# iterate headers
|
# iterate headers
|
||||||
for name, header in headers:
|
for name, value in headers:
|
||||||
# keep track of the occurrence of each header, needed by
|
# keep track of the occurrence of each header, needed by
|
||||||
# Milter.Base.chgheader
|
# Milter.Base.chgheader
|
||||||
if name not in occurrences.keys():
|
if name not in occurrences.keys():
|
||||||
@@ -167,19 +167,15 @@ class HeaderRule:
|
|||||||
occurrences[name] += 1
|
occurrences[name] += 1
|
||||||
|
|
||||||
# check if header line matches regex
|
# check if header line matches regex
|
||||||
header_line = str(header)
|
if self.header.search(f"{name}: {value}"):
|
||||||
if self.header.search(header_line):
|
|
||||||
value = header_line.split(":", 1)[1].strip()
|
|
||||||
if self.action == "del":
|
if self.action == "del":
|
||||||
# set an empty value to delete the header
|
# set an empty value to delete the header
|
||||||
new_value = ""
|
new_value = ""
|
||||||
else:
|
else:
|
||||||
new_value = self.search.sub(self.value, value)
|
new_value = self.search.sub(self.value, str(value))
|
||||||
if value != new_value:
|
if value != new_value:
|
||||||
header = make_header(
|
modified.append(
|
||||||
decode_header(
|
(name, Header(s=new_value), index, occurrences[name]))
|
||||||
f"{name}: {new_value}"), errors="replace")
|
|
||||||
modified.append((name, header, index, occurrences[name]))
|
|
||||||
index += 1
|
index += 1
|
||||||
return modified
|
return modified
|
||||||
|
|
||||||
@@ -242,62 +238,59 @@ class HeaderMilter(Milter.Base):
|
|||||||
value = value.encode(
|
value = value.encode(
|
||||||
errors="surrogateescape").decode(errors="replace")
|
errors="surrogateescape").decode(errors="replace")
|
||||||
self.logger.debug(f"{self.qid}: received header: {name}: {value}")
|
self.logger.debug(f"{self.qid}: received header: {name}: {value}")
|
||||||
header = make_header(
|
value = make_header(decode_header(value), errors="replace")
|
||||||
decode_header(
|
|
||||||
f"{name}: {value}"), errors="replace")
|
|
||||||
self.logger.debug(
|
self.logger.debug(
|
||||||
f"{self.qid}: decoded header: {header}")
|
f"{self.qid}: decoded header: {name}: {value}")
|
||||||
|
self.headers.append((name, value))
|
||||||
|
return Milter.CONTINUE
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.logger.exception(
|
self.logger.exception(
|
||||||
f"an exception occured in header function: {e}")
|
f"an exception occured in header function: {e}")
|
||||||
return Milter.TEMPFAIL
|
return Milter.TEMPFAIL
|
||||||
self.headers.append((name, header))
|
|
||||||
return Milter.CONTINUE
|
|
||||||
|
|
||||||
def eom(self):
|
def eom(self):
|
||||||
try:
|
try:
|
||||||
for rule in self.rules:
|
for rule in self.rules:
|
||||||
self.logger.debug(f"{self.qid}: executing rule '{rule.name}'")
|
self.logger.debug(f"{self.qid}: executing rule '{rule.name}'")
|
||||||
modified = rule.execute(self.headers)
|
modified = rule.execute(self.headers)
|
||||||
for name, header, index, occurrence in modified:
|
for name, value, index, occurrence in modified:
|
||||||
header_line = str(header)
|
header = f"{name}: {value}"
|
||||||
value = header.encode().split(":", 1)[1].strip()
|
|
||||||
if rule.action == "add":
|
if rule.action == "add":
|
||||||
if rule.log:
|
if rule.log:
|
||||||
self.logger.info(
|
self.logger.info(
|
||||||
f"{self.qid}: add: header: "
|
f"{self.qid}: add: header: "
|
||||||
f"{header_line[0:70]}")
|
f"{header[0:70]}")
|
||||||
else:
|
else:
|
||||||
self.logger.debug(
|
self.logger.debug(
|
||||||
f"{self.qid}: add: header: "
|
f"{self.qid}: add: header: "
|
||||||
f"{header_line}")
|
f"{header}")
|
||||||
self.headers.insert(0, (name, header))
|
self.headers.insert(0, (name, value))
|
||||||
self.addheader(name, value, 1)
|
self.addheader(name, value.encode(), 1)
|
||||||
else:
|
else:
|
||||||
if rule.action == "mod":
|
if rule.action == "mod":
|
||||||
old_header = str(self.headers[index][1])
|
old_header = "{}: {}".format(*self.headers[index])
|
||||||
if rule.log:
|
if rule.log:
|
||||||
self.logger.info(
|
self.logger.info(
|
||||||
f"{self.qid}: modify: header: "
|
f"{self.qid}: modify: header: "
|
||||||
f"{old_header[0:70]}: {header_line[0:70]}")
|
f"{old_header[0:70]}: {header[0:70]}")
|
||||||
else:
|
else:
|
||||||
self.logger.debug(
|
self.logger.debug(
|
||||||
f"{self.qid}: modify: header "
|
f"{self.qid}: modify: header "
|
||||||
f"(occ. {occurrence}): {old_header}: "
|
f"(occ. {occurrence}): {old_header}: "
|
||||||
f"{header_line}")
|
f"{header}")
|
||||||
self.headers[index] = (name, header)
|
self.headers[index] = (name, value)
|
||||||
elif rule.action == "del":
|
elif rule.action == "del":
|
||||||
if rule.log:
|
if rule.log:
|
||||||
self.logger.info(
|
self.logger.info(
|
||||||
f"{self.qid}: delete: header: "
|
f"{self.qid}: delete: header: "
|
||||||
f"{header_line[0:70]}")
|
f"{header[0:70]}")
|
||||||
else:
|
else:
|
||||||
self.logger.debug(
|
self.logger.debug(
|
||||||
f"{self.qid}: delete: header "
|
f"{self.qid}: delete: header "
|
||||||
f"(occ. {occurrence}): {header_line}")
|
f"(occ. {occurrence}): {header}")
|
||||||
del self.headers[index]
|
del self.headers[index]
|
||||||
|
|
||||||
self.chgheader(name, occurrence, value)
|
self.chgheader(name, occurrence, value.encode())
|
||||||
return Milter.ACCEPT
|
return Milter.ACCEPT
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.logger.exception(
|
self.logger.exception(
|
||||||
|
|||||||
Reference in New Issue
Block a user