mirror of https://github.com/python/cpython.git
#10464: fix netrc handling of lines with embedded '#" characters.
Patch by Xuanji Li.
This commit is contained in:
parent
2fdc7b1f75
commit
d2bb830edc
|
@ -34,11 +34,15 @@ def __init__(self, file=None):
|
||||||
def _parse(self, file, fp):
|
def _parse(self, file, fp):
|
||||||
lexer = shlex.shlex(fp)
|
lexer = shlex.shlex(fp)
|
||||||
lexer.wordchars += r"""!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"""
|
lexer.wordchars += r"""!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"""
|
||||||
|
lexer.commenters = lexer.commenters.replace('#', '')
|
||||||
while 1:
|
while 1:
|
||||||
# Look for a machine, default, or macdef top-level keyword
|
# Look for a machine, default, or macdef top-level keyword
|
||||||
toplevel = tt = lexer.get_token()
|
toplevel = tt = lexer.get_token()
|
||||||
if not tt:
|
if not tt:
|
||||||
break
|
break
|
||||||
|
elif tt[0] == '#':
|
||||||
|
fp.readline();
|
||||||
|
continue;
|
||||||
elif tt == 'machine':
|
elif tt == 'machine':
|
||||||
entryname = lexer.get_token()
|
entryname = lexer.get_token()
|
||||||
elif tt == 'default':
|
elif tt == 'default':
|
||||||
|
|
|
@ -3,7 +3,13 @@
|
||||||
from test import support
|
from test import support
|
||||||
|
|
||||||
TEST_NETRC = """
|
TEST_NETRC = """
|
||||||
|
|
||||||
|
#this is a comment
|
||||||
|
#this is a comment
|
||||||
|
# this is a comment
|
||||||
|
|
||||||
machine foo login log1 password pass1 account acct1
|
machine foo login log1 password pass1 account acct1
|
||||||
|
machine bar login log1 password pass# account acct1
|
||||||
|
|
||||||
macdef macro1
|
macdef macro1
|
||||||
line1
|
line1
|
||||||
|
@ -28,17 +34,21 @@ def setUp(self):
|
||||||
fp = open(temp_filename, mode)
|
fp = open(temp_filename, mode)
|
||||||
fp.write(TEST_NETRC)
|
fp.write(TEST_NETRC)
|
||||||
fp.close()
|
fp.close()
|
||||||
|
self.nrc = netrc.netrc(temp_filename)
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
os.unlink(temp_filename)
|
os.unlink(temp_filename)
|
||||||
|
|
||||||
def test_case_1(self):
|
def test_case_1(self):
|
||||||
nrc = netrc.netrc(temp_filename)
|
self.assertEqual(self.nrc.hosts['foo'], ('log1', 'acct1', 'pass1'))
|
||||||
self.assertTrue(nrc.macros == {'macro1':['line1\n', 'line2\n'],
|
self.assertEqual(self.nrc.hosts['default'], ('log2', None, 'pass2'))
|
||||||
'macro2':['line3\n', 'line4\n']}
|
|
||||||
)
|
def test_macros(self):
|
||||||
self.assertTrue(nrc.hosts['foo'] == ('log1', 'acct1', 'pass1'))
|
self.assertEqual(self.nrc.macros, {'macro1':['line1\n', 'line2\n'],
|
||||||
self.assertTrue(nrc.hosts['default'] == ('log2', None, 'pass2'))
|
'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():
|
def test_main():
|
||||||
support.run_unittest(NetrcTestCase)
|
support.run_unittest(NetrcTestCase)
|
||||||
|
|
|
@ -501,6 +501,7 @@ John Lenton
|
||||||
Christopher Tur Lesniewski-Laas
|
Christopher Tur Lesniewski-Laas
|
||||||
Mark Levinson
|
Mark Levinson
|
||||||
William Lewis
|
William Lewis
|
||||||
|
Xuanji Li
|
||||||
Robert van Liere
|
Robert van Liere
|
||||||
Ross Light
|
Ross Light
|
||||||
Shawn Ligocki
|
Shawn Ligocki
|
||||||
|
|
|
@ -46,6 +46,8 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #10464: netrc now correctly handles lines with embedded '#' characters.
|
||||||
|
|
||||||
- Added itertools.accumulate().
|
- Added itertools.accumulate().
|
||||||
|
|
||||||
- Issue #4113: Added custom ``__repr__`` method to ``functools.partial``.
|
- Issue #4113: Added custom ``__repr__`` method to ``functools.partial``.
|
||||||
|
|
Loading…
Reference in New Issue