#10464: fix netrc handling of lines with embedded '#" characters.

Patch by Xuanji Li.
This commit is contained in:
R. David Murray 2010-12-02 02:58:07 +00:00
parent 2fdc7b1f75
commit d2bb830edc
4 changed files with 23 additions and 6 deletions

View 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':

View File

@ -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)

View File

@ -501,6 +501,7 @@ John Lenton
Christopher Tur Lesniewski-Laas
Mark Levinson
William Lewis
Xuanji Li
Robert van Liere
Ross Light
Shawn Ligocki

View File

@ -46,6 +46,8 @@ Core and Builtins
Library
-------
- Issue #10464: netrc now correctly handles lines with embedded '#' characters.
- Added itertools.accumulate().
- Issue #4113: Added custom ``__repr__`` method to ``functools.partial``.