Catch more ascii encoding errors to improve resilience against bad data

(LP: #1844189)
This commit is contained in:
Scott Kitterman
2019-09-23 10:28:43 -04:00
parent 6910ff1f9a
commit be92e5c5b1
2 changed files with 14 additions and 3 deletions
+2
View File
@@ -1,6 +1,8 @@
1.1.2 UNRELEASED 1.1.2 UNRELEASED
- Fix variable initialization so mailformed mails missing body From do not - Fix variable initialization so mailformed mails missing body From do not
cause a traceback (LP: #1844161) cause a traceback (LP: #1844161)
- Catch more ascii encoding errors to improve resilience against bad data
(LP: #1844189)
1.1.1 2019-09-06 1.1.1 2019-09-06
- Fix startup logging so it provides information at a useful time - Fix startup logging so it provides information at a useful time
+12 -3
View File
@@ -144,7 +144,11 @@ class dkimMilter(Milter.Base):
elif lname == 'authentication-results': elif lname == 'authentication-results':
self.arheaders.append(val) self.arheaders.append(val)
if self.fp: if self.fp:
self.fp.write(b"%s: %s\n" % (codecs.encode(name, 'ascii'), codecs.encode(val, 'ascii'))) try:
self.fp.write(b"%s: %s\n" % (codecs.encode(name, 'ascii'), codecs.encode(val, 'ascii')))
except:
# Don't choke on header fields with non-ascii garbage in them.
pass
return Milter.CONTINUE return Milter.CONTINUE
@Milter.noreply @Milter.noreply
@@ -294,8 +298,13 @@ class dkimMilter(Milter.Base):
self.header_i = codecs.decode(d.signature_fields.get(b'i'), 'ascii') self.header_i = codecs.decode(d.signature_fields.get(b'i'), 'ascii')
except TypeError as x: except TypeError as x:
self.header_i = None self.header_i = None
self.header_d = codecs.decode(d.signature_fields.get(b'd'), 'ascii') try:
self.header_a = codecs.decode(d.signature_fields.get(b'a'), 'ascii') self.header_d = codecs.decode(d.signature_fields.get(b'd'), 'ascii')
self.header_a = codecs.decode(d.signature_fields.get(b'a'), 'ascii')
except Exception as x:
self.dkim_comment = str(x)
if milterconfig.get('Syslog'):
syslog.syslog("check_dkim: {0}".format(x))
if res: if res:
if (milterconfig.get('Syslog') and if (milterconfig.get('Syslog') and
(milterconfig.get('SyslogSuccess') or (milterconfig.get('SyslogSuccess') or