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 <email address hidden> 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 <email address hidden> whose SPF record looks like this -
daltoninsurance .com. 6457 IN TXT "v=spf1 a:\239\ 187\191thorough bred.webservers ystems. com -all"
causes policyd-spf to crash like so -
4 stomp policyd-spf: Traceback (most recent call last): policyd- spf", line 607, in <module> policyd- spf", line 469, in spfcheck python2. 6/dist- packages/ spf.py" , line 294, in check2 receiver) .check( ) python2. 6/dist- packages/ spf.py" , line 514, in check python2. 6/dist- packages/ spf.py" , line 553, in check1 python2. 6/dist- packages/ spf.py" , line 836, in check0 self.dns_ a(arg,self. A), cidrlength): python2. 6/dist- packages/ spf.py" , line 1132, in dns_a domainname, A) python2. 6/dist- packages/ spf.py" , line 1200, in dns python2. 6/dist- packages/ spf.py" , line 127, in DNSLookup python2. 6/dist- packages/ DNS/Base. py", line 202, in req qname, qtype, Class.IN) python2. 6/dist- packages/ DNS/Lib. py", line 478, in addQuestion python2. 6/dist- packages/ DNS/Lib. py", line 125, in addname python2. 6/encodings/ idna.py" , line 164, in encode append( ToASCII( label)) python2. 6/encodings/ idna.py" , line 76, in ToASCII python2. 6/encodings/ idna.py" , line 21, in nameprep append( stringprep. map_table_ b2(c)) python2. 6/stringprep. py", line 197, in map_table_b2 normalize( "NFKC", al)
4 stomp policyd-spf: File "/usr/bin/
4 stomp policyd-spf: instance_dict, configData, peruser)
4 stomp policyd-spf: File "/usr/bin/
4 stomp policyd-spf: res = spf.check2(ip, sender, helo)
4 stomp policyd-spf: File "/usr/lib/
4 stomp policyd-spf: res,_,exp = query(i=i, s=s, h=h, local=local, receiver=
4 stomp policyd-spf: File "/usr/lib/
4 stomp policyd-spf: rc = self.check1(spf, self.d, 0)
4 stomp policyd-spf: File "/usr/lib/
4 stomp policyd-spf: return self.check0(spf, recursion)
4 stomp policyd-spf: File "/usr/lib/
4 stomp policyd-spf: if self.cidrmatch(
4 stomp policyd-spf: File "/usr/lib/
4 stomp policyd-spf: return self.dns(
4 stomp policyd-spf: File "/usr/lib/
4 stomp policyd-spf: for k, v in DNSLookup(name, qtype, self.strict, self.timeout):
4 stomp policyd-spf: File "/usr/lib/
4 stomp policyd-spf: resp = req.req()
4 stomp policyd-spf: File "/usr/lib/
4 stomp policyd-spf: m.addQuestion(
4 stomp policyd-spf: File "/usr/lib/
4 stomp policyd-spf: self.addname(qname)
4 stomp policyd-spf: File "/usr/lib/
4 stomp policyd-spf: label = label.encode(enc)
4 stomp policyd-spf: File "/usr/lib/
4 stomp policyd-spf: result.
4 stomp policyd-spf: File "/usr/lib/
4 stomp policyd-spf: label = nameprep(label)
4 stomp policyd-spf: File "/usr/lib/
4 stomp policyd-spf: newlabel.
4 stomp policyd-spf: File "/usr/lib/
4 stomp policyd-spf: b = unicodedata.
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