fix issue #9129: added proper error handling when accepting new connections in SMTPSe...
authorGiampaolo Rodolà <g.rodola@gmail.com>
Sat, 21 Aug 2010 18:35:05 +0000 (18:35 +0000)
committerGiampaolo Rodolà <g.rodola@gmail.com>
Sat, 21 Aug 2010 18:35:05 +0000 (18:35 +0000)
Lib/smtpd.py
Misc/NEWS

index b4082786fa147b7771238f4d5e3b5578bfa0fff5..e8459f09209e5e9b3deb36fb3fb281573a2b0c30 100755 (executable)
@@ -413,8 +413,21 @@ class SMTPServer(asyncore.dispatcher):
                 self.__class__.__name__, time.ctime(time.time()),
                 localaddr, remoteaddr), file=DEBUGSTREAM)
 
-    def handle_accept(self):
-        conn, addr = self.accept()
+    def handle_accept(self)
+        try:
+            conn, addr = self.accept()
+        except TypeError:
+            # sometimes accept() might return None
+            return
+        except socket.error, err:
+            # ECONNABORTED might be thrown
+            if err[0] != errno.ECONNABORTED:
+                raise
+            return
+        else:
+            # sometimes addr == None instead of (ip, port)
+            if addr == None:
+                return
         print('Incoming connection from %s' % repr(addr), file=DEBUGSTREAM)
         channel = self.channel_class(self, conn, addr)
 
index 019cd4b9dafb85d653f5533f9b995de650104cdc..6552a799493aba8849c46b58165c031dc2ee452b 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -117,6 +117,9 @@ Extensions
 Library
 -------
 
+- Issue #9129: smtpd.py module is vulnerable to DoS attacks due to missing 
+  error handling when accepting new connections.
+
 - Issue #843590: Make "macintosh" an alias to the "mac_roman" encoding.
 
 - Create os.fsdecode(): decode from the filesystem encoding with