** Description changed:

+ [Impact]
+ 
+  * Causes random tracebacks on DNS lookups when break functionality of
+ packages that use the module.  In the case the bug was filed for, the
+ impact would be a postfix server returning servfail and deferring
+ message traffic.
+ 
+  * The code represents a missed change for the port from python to
+ python3.
+ 
+ [Test Case]
+ 
+  * This bug only happens when multiple DNS queries attempt to use the
+ same port at the same time.  It's very difficult to reproduce and as far
+ as I know impossible to do it consistently.  The attached script
+ demonstrates the new code working and the old code failing.  That and
+ code inspection are the best ways to verify this.
+ 
+ [Regression Potential]
+ 
+  * Regression potential is nil.
+ 
  Note:  This is an extract from a private bug.
  
  Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/DNS/Base.py", line 192, in getSource
  self.s.bind(('', source_port))
  OSError: [Errno 98] Address already in use
  
  During handling of the above exception, another exception occurred:
  Traceback (most recent call last):
  File "/usr/bin/policyd-spf", line 662, in <module>
  instance_dict, configData, peruser)
  File "/usr/bin/policyd-spf", line 508, in _spfcheck
  res = spf.check2(ip, sender, helo)
  File "/usr/lib/python3/dist-packages/spf.py", line 363, in check2
  receiver=receiver,timeout=timeout,verbose=verbose,querytime=querytime).check()
  File "/usr/lib/python3/dist-packages/spf.py", line 607, in check
  spf = self.dns_spf(self.d)
  File "/usr/lib/python3/dist-packages/spf.py", line 1179, in dns_spf
  a = [t for t in self.dns_txt(domain) if RE_SPF.match(t)]
  File "/usr/lib/python3/dist-packages/spf.py", line 1227, in dns_txt
  dns_list = self.dns(domainname, rr)
  File "/usr/lib/python3/dist-packages/spf.py", line 1357, in dns
  for k, v in DNSLookup(name, qtype, self.strict, timeout):
  File "/usr/lib/python3/dist-packages/spf.py", line 193, in DNSLookup
  resp = req.req()
  File "/usr/lib/python3/dist-packages/DNS/Base.py", line 238, in req
  self.sendUDPRequest(server)
  File "/usr/lib/python3/dist-packages/DNS/Base.py", line 263, in sendUDPRequest
  self.conn()
  File "/usr/lib/python3/dist-packages/DNS/Base.py", line 199, in conn
  self.getSource()
  File "/usr/lib/python3/dist-packages/DNS/Base.py", line 196, in getSource
  if msg[0] != 98: raise
  TypeError: 'OSError' object is not subscriptable
  warning: missing attribute action in input from private/policyd-spf
  warning: command /usr/bin/policyd-spf exit status 1
  
  Note that the policy server exiting non-zero will intefere with mail
  delivery.

** Attachment added: "Reduced test case showing the problem and the fix"
   
https://bugs.launchpad.net/ubuntu/+source/py3dns/+bug/1318264/+attachment/4109593/+files/dns_sockettest.py

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1318264

Title:
  Fix traceback to correctly deal with source port already in use errors

To manage notifications about this bug go to:
https://bugs.launchpad.net/py3dns/+bug/1318264/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to