From: R. David Murray Date: Thu, 2 Dec 2010 03:16:23 +0000 (+0000) Subject: Merged revisions 86925 via svnmerge from X-Git-Tag: v2.7.2rc1~516 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d75cc91647738727109cfd07c75cf1b69f5f3659;p=python Merged revisions 86925 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r86925 | r.david.murray | 2010-12-01 21:58:07 -0500 (Wed, 01 Dec 2010) | 4 lines #10464: fix netrc handling of lines with embedded '#" characters. Patch by Xuanji Li. ........ --- diff --git a/Lib/netrc.py b/Lib/netrc.py index 723fc31d86..4caeb965fb 100644 --- a/Lib/netrc.py +++ b/Lib/netrc.py @@ -34,11 +34,15 @@ class netrc: def _parse(self, file, fp): lexer = shlex.shlex(fp) lexer.wordchars += r"""!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~""" + lexer.commenters = lexer.commenters.replace('#', '') while 1: # Look for a machine, default, or macdef top-level keyword toplevel = tt = lexer.get_token() if not tt: break + elif tt[0] == '#': + fp.readline(); + continue; elif tt == 'machine': entryname = lexer.get_token() elif tt == 'default': diff --git a/Lib/test/test_netrc.py b/Lib/test/test_netrc.py index 50afe76bf4..a988430ae0 100644 --- a/Lib/test/test_netrc.py +++ b/Lib/test/test_netrc.py @@ -3,7 +3,13 @@ import netrc, os, unittest, sys from test import test_support TEST_NETRC = """ + + #this is a comment +#this is a comment +# this is a comment + machine foo login log1 password pass1 account acct1 +machine bar login log1 password pass# account acct1 macdef macro1 line1 @@ -28,18 +34,21 @@ class NetrcTestCase(unittest.TestCase): fp = open(temp_filename, mode) fp.write(TEST_NETRC) fp.close() - self.netrc = netrc.netrc(temp_filename) + self.nrc = netrc.netrc(temp_filename) def tearDown (self): - del self.netrc os.unlink(temp_filename) def test_case_1(self): - self.assertTrue(self.netrc.macros == {'macro1':['line1\n', 'line2\n'], - 'macro2':['line3\n', 'line4\n']} - ) - self.assertTrue(self.netrc.hosts['foo'] == ('log1', 'acct1', 'pass1')) - self.assertTrue(self.netrc.hosts['default'] == ('log2', None, 'pass2')) + self.assertEqual(self.nrc.hosts['foo'], ('log1', 'acct1', 'pass1')) + self.assertEqual(self.nrc.hosts['default'], ('log2', None, 'pass2')) + + def test_macros(self): + self.assertEqual(self.nrc.macros, {'macro1':['line1\n', 'line2\n'], + 'macro2':['line3\n', 'line4\n']}) + + def test_parses_passwords_with_hash_character(self): + self.assertEqual(self.nrc.hosts['bar'], ('log1', 'acct1', 'pass#')) def test_main(): test_support.run_unittest(NetrcTestCase) diff --git a/Misc/ACKS b/Misc/ACKS index 4d2d4bbed6..4cd8350457 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -472,6 +472,7 @@ John Lenton Christopher Tur Lesniewski-Laas Mark Levinson William Lewis +Xuanji Li Robert van Liere Ross Light Shawn Ligocki diff --git a/Misc/NEWS b/Misc/NEWS index 367900d476..89894d85ad 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -13,6 +13,8 @@ Core and Builtins Library ------- +- Issue #10464: netrc now correctly handles lines with embedded '#' characters. + What's New in Python 2.7.1? ===========================