Activity log for bug #832480

Date Who What changed Old value New value Message
2011-08-24 03:11:41 russm bug added bug
2011-08-24 03:13:39 russm description receiving an email from a sender whose SPF records are bogus (invalid UTF8) can crash policyd-spf. email (spam as it turns out, but whatever) from service@daltoninsurance.com whose SPF record looks like this - daltoninsurance.com. 6457 IN TXT "v=spf1 a:\239\187\191thoroughbred.webserversystems.com -all" causes policyd-spf to crash like so - 4 stomp policyd-spf: Traceback (most recent call last): 4 stomp policyd-spf: File "/usr/bin/policyd-spf", line 607, in <module> 4 stomp policyd-spf: instance_dict, configData, peruser) 4 stomp policyd-spf: File "/usr/bin/policyd-spf", line 469, in spfcheck 4 stomp policyd-spf: res = spf.check2(ip, sender, helo) 4 stomp policyd-spf: File "/usr/lib/python2.6/dist-packages/spf.py", line 294, in check2 4 stomp policyd-spf: res,_,exp = query(i=i, s=s, h=h, local=local, receiver=receiver).check() 4 stomp policyd-spf: File "/usr/lib/python2.6/dist-packages/spf.py", line 514, in check 4 stomp policyd-spf: rc = self.check1(spf, self.d, 0) 4 stomp policyd-spf: File "/usr/lib/python2.6/dist-packages/spf.py", line 553, in check1 4 stomp policyd-spf: return self.check0(spf, recursion) 4 stomp policyd-spf: File "/usr/lib/python2.6/dist-packages/spf.py", line 836, in check0 4 stomp policyd-spf: if self.cidrmatch(self.dns_a(arg,self.A), cidrlength): 4 stomp policyd-spf: File "/usr/lib/python2.6/dist-packages/spf.py", line 1132, in dns_a 4 stomp policyd-spf: return self.dns(domainname, A) 4 stomp policyd-spf: File "/usr/lib/python2.6/dist-packages/spf.py", line 1200, in dns 4 stomp policyd-spf: for k, v in DNSLookup(name, qtype, self.strict, self.timeout): 4 stomp policyd-spf: File "/usr/lib/python2.6/dist-packages/spf.py", line 127, in DNSLookup 4 stomp policyd-spf: resp = req.req() 4 stomp policyd-spf: File "/usr/lib/python2.6/dist-packages/DNS/Base.py", line 202, in req 4 stomp policyd-spf: m.addQuestion(qname, qtype, Class.IN) 4 stomp policyd-spf: File "/usr/lib/python2.6/dist-packages/DNS/Lib.py", line 478, in addQuestion 4 stomp policyd-spf: self.addname(qname) 4 stomp policyd-spf: File "/usr/lib/python2.6/dist-packages/DNS/Lib.py", line 125, in addname 4 stomp policyd-spf: label = label.encode(enc) 4 stomp policyd-spf: File "/usr/lib/python2.6/encodings/idna.py", line 164, in encode 4 stomp policyd-spf: result.append(ToASCII(label)) 4 stomp policyd-spf: File "/usr/lib/python2.6/encodings/idna.py", line 76, in ToASCII 4 stomp policyd-spf: label = nameprep(label) 4 stomp policyd-spf: File "/usr/lib/python2.6/encodings/idna.py", line 21, in nameprep 4 stomp policyd-spf: newlabel.append(stringprep.map_table_b2(c)) 4 stomp policyd-spf: File "/usr/lib/python2.6/stringprep.py", line 197, in map_table_b2 4 stomp policyd-spf: b = unicodedata.normalize("NFKC", al) 4 stomp policyd-spf: TypeError: normalize() argument 2 must be unicode, not str 4 stomp postfix/spawn: warning: command /usr/bin/python exit status 1 receiving an email from a sender whose SPF records are bogus (invalid UTF8) can crash policyd-spf. email (spam as it turns out, but whatever) from service@daltoninsurance.com whose SPF record looks like this - daltoninsurance.com. 6457 IN TXT "v=spf1 a:\239\187\191thoroughbred.webserversystems.com -all" causes policyd-spf to crash like so (filtered through syslog and logcheck, so ignore the line preambles) - 4 stomp policyd-spf: Traceback (most recent call last): 4 stomp policyd-spf: File "/usr/bin/policyd-spf", line 607, in <module> 4 stomp policyd-spf: instance_dict, configData, peruser) 4 stomp policyd-spf: File "/usr/bin/policyd-spf", line 469, in spfcheck 4 stomp policyd-spf: res = spf.check2(ip, sender, helo) 4 stomp policyd-spf: File "/usr/lib/python2.6/dist-packages/spf.py", line 294, in check2 4 stomp policyd-spf: res,_,exp = query(i=i, s=s, h=h, local=local, receiver=receiver).check() 4 stomp policyd-spf: File "/usr/lib/python2.6/dist-packages/spf.py", line 514, in check 4 stomp policyd-spf: rc = self.check1(spf, self.d, 0) 4 stomp policyd-spf: File "/usr/lib/python2.6/dist-packages/spf.py", line 553, in check1 4 stomp policyd-spf: return self.check0(spf, recursion) 4 stomp policyd-spf: File "/usr/lib/python2.6/dist-packages/spf.py", line 836, in check0 4 stomp policyd-spf: if self.cidrmatch(self.dns_a(arg,self.A), cidrlength): 4 stomp policyd-spf: File "/usr/lib/python2.6/dist-packages/spf.py", line 1132, in dns_a 4 stomp policyd-spf: return self.dns(domainname, A) 4 stomp policyd-spf: File "/usr/lib/python2.6/dist-packages/spf.py", line 1200, in dns 4 stomp policyd-spf: for k, v in DNSLookup(name, qtype, self.strict, self.timeout): 4 stomp policyd-spf: File "/usr/lib/python2.6/dist-packages/spf.py", line 127, in DNSLookup 4 stomp policyd-spf: resp = req.req() 4 stomp policyd-spf: File "/usr/lib/python2.6/dist-packages/DNS/Base.py", line 202, in req 4 stomp policyd-spf: m.addQuestion(qname, qtype, Class.IN) 4 stomp policyd-spf: File "/usr/lib/python2.6/dist-packages/DNS/Lib.py", line 478, in addQuestion 4 stomp policyd-spf: self.addname(qname) 4 stomp policyd-spf: File "/usr/lib/python2.6/dist-packages/DNS/Lib.py", line 125, in addname 4 stomp policyd-spf: label = label.encode(enc) 4 stomp policyd-spf: File "/usr/lib/python2.6/encodings/idna.py", line 164, in encode 4 stomp policyd-spf: result.append(ToASCII(label)) 4 stomp policyd-spf: File "/usr/lib/python2.6/encodings/idna.py", line 76, in ToASCII 4 stomp policyd-spf: label = nameprep(label) 4 stomp policyd-spf: File "/usr/lib/python2.6/encodings/idna.py", line 21, in nameprep 4 stomp policyd-spf: newlabel.append(stringprep.map_table_b2(c)) 4 stomp policyd-spf: File "/usr/lib/python2.6/stringprep.py", line 197, in map_table_b2 4 stomp policyd-spf: b = unicodedata.normalize("NFKC", al) 4 stomp policyd-spf: TypeError: normalize() argument 2 must be unicode, not str 4 stomp postfix/spawn: warning: command /usr/bin/python exit status 1
2011-08-24 04:34:08 Scott Kitterman pypolicyd-spf: status New Confirmed
2011-08-24 04:34:11 Scott Kitterman pypolicyd-spf: importance Undecided High
2012-01-10 19:45:54 Scott Kitterman affects pypolicyd-spf py3dns (Ubuntu)
2012-06-08 01:24:46 Antonio Feitosa bug task added py3dns
2012-06-08 01:25:40 Antonio Feitosa affects py3dns pypolicyd-spf
2012-06-08 01:25:40 Antonio Feitosa pypolicyd-spf: assignee Antonio Feitosa (antonio-cfc)
2012-06-14 20:01:12 Scott Kitterman bug task deleted py3dns (Ubuntu)
2012-06-14 20:30:27 Scott Kitterman bug task added pyspf (Ubuntu)
2012-06-14 20:30:39 Scott Kitterman pypolicyd-spf: status New Invalid
2012-06-14 20:37:40 Scott Kitterman description receiving an email from a sender whose SPF records are bogus (invalid UTF8) can crash policyd-spf. email (spam as it turns out, but whatever) from service@daltoninsurance.com whose SPF record looks like this - daltoninsurance.com. 6457 IN TXT "v=spf1 a:\239\187\191thoroughbred.webserversystems.com -all" causes policyd-spf to crash like so (filtered through syslog and logcheck, so ignore the line preambles) - 4 stomp policyd-spf: Traceback (most recent call last): 4 stomp policyd-spf: File "/usr/bin/policyd-spf", line 607, in <module> 4 stomp policyd-spf: instance_dict, configData, peruser) 4 stomp policyd-spf: File "/usr/bin/policyd-spf", line 469, in spfcheck 4 stomp policyd-spf: res = spf.check2(ip, sender, helo) 4 stomp policyd-spf: File "/usr/lib/python2.6/dist-packages/spf.py", line 294, in check2 4 stomp policyd-spf: res,_,exp = query(i=i, s=s, h=h, local=local, receiver=receiver).check() 4 stomp policyd-spf: File "/usr/lib/python2.6/dist-packages/spf.py", line 514, in check 4 stomp policyd-spf: rc = self.check1(spf, self.d, 0) 4 stomp policyd-spf: File "/usr/lib/python2.6/dist-packages/spf.py", line 553, in check1 4 stomp policyd-spf: return self.check0(spf, recursion) 4 stomp policyd-spf: File "/usr/lib/python2.6/dist-packages/spf.py", line 836, in check0 4 stomp policyd-spf: if self.cidrmatch(self.dns_a(arg,self.A), cidrlength): 4 stomp policyd-spf: File "/usr/lib/python2.6/dist-packages/spf.py", line 1132, in dns_a 4 stomp policyd-spf: return self.dns(domainname, A) 4 stomp policyd-spf: File "/usr/lib/python2.6/dist-packages/spf.py", line 1200, in dns 4 stomp policyd-spf: for k, v in DNSLookup(name, qtype, self.strict, self.timeout): 4 stomp policyd-spf: File "/usr/lib/python2.6/dist-packages/spf.py", line 127, in DNSLookup 4 stomp policyd-spf: resp = req.req() 4 stomp policyd-spf: File "/usr/lib/python2.6/dist-packages/DNS/Base.py", line 202, in req 4 stomp policyd-spf: m.addQuestion(qname, qtype, Class.IN) 4 stomp policyd-spf: File "/usr/lib/python2.6/dist-packages/DNS/Lib.py", line 478, in addQuestion 4 stomp policyd-spf: self.addname(qname) 4 stomp policyd-spf: File "/usr/lib/python2.6/dist-packages/DNS/Lib.py", line 125, in addname 4 stomp policyd-spf: label = label.encode(enc) 4 stomp policyd-spf: File "/usr/lib/python2.6/encodings/idna.py", line 164, in encode 4 stomp policyd-spf: result.append(ToASCII(label)) 4 stomp policyd-spf: File "/usr/lib/python2.6/encodings/idna.py", line 76, in ToASCII 4 stomp policyd-spf: label = nameprep(label) 4 stomp policyd-spf: File "/usr/lib/python2.6/encodings/idna.py", line 21, in nameprep 4 stomp policyd-spf: newlabel.append(stringprep.map_table_b2(c)) 4 stomp policyd-spf: File "/usr/lib/python2.6/stringprep.py", line 197, in map_table_b2 4 stomp policyd-spf: b = unicodedata.normalize("NFKC", al) 4 stomp policyd-spf: TypeError: normalize() argument 2 must be unicode, not str 4 stomp postfix/spawn: warning: command /usr/bin/python exit status 1 receiving an email from a sender whose SPF records are bogus (invalid UTF8) can crash policyd-spf. email (spam as it turns out, but whatever) from service@daltoninsurance.com whose SPF record looks like this - daltoninsurance.com. 6457 IN TXT "v=spf1 a:\239\187\191thoroughbred.webserversystems.com -all" causes policyd-spf to crash like so (filtered through syslog and logcheck, so ignore the line preambles) - ... TEST CASE: Install the current version of spf-tools-python and then run: $ pyspf 1.1.1.1 email.recipe.com email.recipe.com This should produce an error like: Traceback (most recent call last): File "/usr/bin/pyspf", line 1971, in <module> print(q.check(),q.mechanism) File "/usr/bin/pyspf", line 538, in check spf = self.dns_spf(self.d) File "/usr/bin/pyspf", line 1094, in dns_spf a = [t for t in self.dns_txt(domain) if RE_SPF.match(t)] File "/usr/bin/pyspf", line 1131, in dns_txt for a in self.dns(domainname, 'TXT')] File "/usr/bin/pyspf", line 1130, in <genexpr> return [''.join(s.decode("ascii") for s in a) UnicodeDecodeError: 'ascii' codec can't decode byte 0x96 in position 32: ordinal not in range(128) Install the updated binaries from pyspf (python-spf and spf-tools-python - don't bother with the python3 version, it's got other issues that aren't sorted yet) and try again. This time it should work without a traceback (it should raise a PermError about UniCode in an SPF record).
2012-06-14 20:37:53 Scott Kitterman nominated for series Ubuntu Precise
2012-06-14 20:37:53 Scott Kitterman bug task added pyspf (Ubuntu Precise)
2012-06-14 20:37:53 Scott Kitterman nominated for series Ubuntu Quantal
2012-06-14 20:37:53 Scott Kitterman bug task added pyspf (Ubuntu Quantal)
2012-06-14 20:38:35 Scott Kitterman pyspf (Ubuntu Quantal): importance Undecided Medium
2012-06-14 20:38:35 Scott Kitterman pyspf (Ubuntu Quantal): status New Fix Committed
2012-06-14 20:38:35 Scott Kitterman pyspf (Ubuntu Quantal): assignee Scott Kitterman (kitterman)
2012-06-14 20:42:31 Scott Kitterman pyspf (Ubuntu Quantal): importance Medium High
2012-06-14 20:44:19 Scott Kitterman pyspf (Ubuntu Precise): importance Undecided High
2012-06-14 20:44:19 Scott Kitterman pyspf (Ubuntu Precise): status New Fix Committed
2012-06-14 20:44:19 Scott Kitterman pyspf (Ubuntu Precise): assignee Scott Kitterman (kitterman)
2012-06-14 20:45:15 Scott Kitterman bug added subscriber Ubuntu Stable Release Updates Team
2012-06-19 11:49:44 Chris Halse Rogers bug added subscriber SRU Verification
2012-06-19 11:49:48 Chris Halse Rogers tags crash unicode crash unicode verification-needed
2012-06-19 12:12:19 Launchpad Janitor branch linked lp:ubuntu/precise-proposed/pyspf
2012-06-20 02:41:47 Scott Kitterman pyspf (Ubuntu Quantal): status Fix Committed Fix Released
2012-06-20 02:42:49 Scott Kitterman tags crash unicode verification-needed crash unicode verification-done
2012-06-26 14:39:51 Launchpad Janitor pyspf (Ubuntu Precise): status Fix Committed Fix Released