From: R. David Murray Date: Sat, 23 May 2009 21:05:11 +0000 (+0000) Subject: Merged revisions 72868 via svnmerge from X-Git-Tag: 3.0~57 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6b41be8867463fc3e645580e4a0d1782d67b2ca9;p=thirdparty%2FPython%2Fcpython.git Merged revisions 72868 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r72868 | r.david.murray | 2009-05-23 14:49:56 -0400 (Sat, 23 May 2009) | 5 lines Fix for issue 5259: ASCII encode the username and password before passing it to encode_base64, which requires bytes in py3k. Fix by Musashi Tamura, tests by Marcin Bachry. ........ --- diff --git a/Lib/smtplib.py b/Lib/smtplib.py index acbbf67194bf..b0227031138d 100755 --- a/Lib/smtplib.py +++ b/Lib/smtplib.py @@ -542,7 +542,8 @@ class SMTP: return encode_base64(response) def encode_plain(user, password): - return encode_base64("\0%s\0%s" % (user, password)) + s = "\0%s\0%s" % (user, password) + return encode_base64(s.encode('ascii'), eol='') AUTH_PLAIN = "PLAIN" diff --git a/Lib/test/test_smtplib.py b/Lib/test/test_smtplib.py index 55e30a808286..012ab9427eb1 100644 --- a/Lib/test/test_smtplib.py +++ b/Lib/test/test_smtplib.py @@ -284,6 +284,9 @@ sim_users = {'Mr.A@somewhere.com':'John A', 'Mrs.C@somewhereesle.com':'Ruth C', } +sim_auth = ('Mr.A@somewhere.com', 'somepassword') +sim_auth_b64encoded = 'AE1yLkFAc29tZXdoZXJlLmNvbQBzb21lcGFzc3dvcmQ=' + sim_lists = {'list-1':['Mr.A@somewhere.com','Mrs.C@somewhereesle.com'], 'list-2':['Ms.B@somewhere.com',], } @@ -296,6 +299,7 @@ class SimSMTPChannel(smtpd.SMTPChannel): '250-SIZE 20000000\r\n' \ '250-STARTTLS\r\n' \ '250-DELIVERBY\r\n' \ + '250-AUTH PLAIN\r\n' \ '250 HELP' self.push(resp) @@ -324,6 +328,16 @@ class SimSMTPChannel(smtpd.SMTPChannel): else: self.push('550 No access for you!') + def smtp_AUTH(self, arg): + mech, auth = arg.split() + if mech.lower() == 'plain': + if auth == sim_auth_b64encoded: + self.push('235 ok, go ahead') + else: + self.push('550 No access for you!') + else: + self.push('504 auth type unimplemented') + class SimSMTPServer(smtpd.SMTPServer): def handle_accept(self): @@ -372,6 +386,7 @@ class SMTPSimTests(TestCase): 'size': '20000000', 'starttls': '', 'deliverby': '', + 'auth': ' PLAIN', 'help': '', } @@ -412,6 +427,11 @@ class SMTPSimTests(TestCase): self.assertEqual(smtp.expn(u), expected_unknown) smtp.quit() + def testAUTH(self): + smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=15) + + expected_auth_ok = (235, b'ok, go ahead') + self.assertEqual(smtp.login(sim_auth[0], sim_auth[1]), expected_auth_ok) def test_main(verbose=None): diff --git a/Misc/ACKS b/Misc/ACKS index 2eadbf45be39..ad731505caba 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -686,6 +686,7 @@ Paul Swartz Thenault Sylvain Arfrever Frehtes Taifersar Arahesis Geoff Talvola +Musashi Tamura William Tanksley Christian Tanzer Steven Taschuk diff --git a/Misc/NEWS b/Misc/NEWS index b43d3b258780..bc5b3e9b11d6 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -65,6 +65,9 @@ Core and Builtins Library ------- +- Issue #5259: smtplib plain auth login no longer gives a traceback. Fix + by Musashi Tamura, tests by Marcin Bachry. + - Issue #4066: smtplib.SMTP_SSL._get_socket now correctly returns the socket. Patch by Farhan Ahmad, test by Marcin Bachry.