]> granicus.if.org Git - python/commitdiff
Merged revisions 86925 via svnmerge from
authorR. David Murray <rdmurray@bitdance.com>
Thu, 2 Dec 2010 03:16:23 +0000 (03:16 +0000)
committerR. David Murray <rdmurray@bitdance.com>
Thu, 2 Dec 2010 03:16:23 +0000 (03:16 +0000)
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.
........

Lib/netrc.py
Lib/test/test_netrc.py
Misc/ACKS
Misc/NEWS

index 723fc31d86fe52addacaac14551bdfa185ebccf8..4caeb965fba2aeac1386beaf8360dd50d06905f7 100644 (file)
@@ -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':
index 50afe76bf4f59be39919364fcb488334af94487a..a988430ae0197d0e8c2e3f71416404caab85eea5 100644 (file)
@@ -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)
index 4d2d4bbed66c6ff2cec6d5ecb042b7817a6d8d69..4cd8350457079c6ee5282fd52da8160bdff62cb0 100644 (file)
--- 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
index 367900d476ab6241be7cdbe9884faf574f140d3d..89894d85adfd4e84cd6307b42685d2c907a2e921 100644 (file)
--- 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?
 ===========================