diff options
author | R. David Murray <rdmurray@bitdance.com> | 2010-12-02 02:58:07 (GMT) |
---|---|---|
committer | R. David Murray <rdmurray@bitdance.com> | 2010-12-02 02:58:07 (GMT) |
commit | d2bb830edc7fc9e54b6ccd8c75a23ed8fee455e0 (patch) | |
tree | 87cb3e02894374a4aa4dcbe7b5a56c29b3f3f188 /Lib | |
parent | 2fdc7b1f759e557c57d16e91b9ac53f2b441c0be (diff) | |
download | cpython-d2bb830edc7fc9e54b6ccd8c75a23ed8fee455e0.zip cpython-d2bb830edc7fc9e54b6ccd8c75a23ed8fee455e0.tar.gz cpython-d2bb830edc7fc9e54b6ccd8c75a23ed8fee455e0.tar.bz2 |
#10464: fix netrc handling of lines with embedded '#" characters.
Patch by Xuanji Li.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/netrc.py | 4 | ||||
-rw-r--r-- | Lib/test/test_netrc.py | 22 |
2 files changed, 20 insertions, 6 deletions
diff --git a/Lib/netrc.py b/Lib/netrc.py index 90255df8..a60b8b7 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 21ff88c..da7ec05 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 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,17 +34,21 @@ class NetrcTestCase(unittest.TestCase): fp = open(temp_filename, mode) fp.write(TEST_NETRC) fp.close() + self.nrc = netrc.netrc(temp_filename) def tearDown(self): os.unlink(temp_filename) def test_case_1(self): - nrc = netrc.netrc(temp_filename) - self.assertTrue(nrc.macros == {'macro1':['line1\n', 'line2\n'], - 'macro2':['line3\n', 'line4\n']} - ) - self.assertTrue(nrc.hosts['foo'] == ('log1', 'acct1', 'pass1')) - self.assertTrue(nrc.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(): support.run_unittest(NetrcTestCase) |