summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorR. David Murray <rdmurray@bitdance.com>2010-12-02 02:58:07 (GMT)
committerR. David Murray <rdmurray@bitdance.com>2010-12-02 02:58:07 (GMT)
commitd2bb830edc7fc9e54b6ccd8c75a23ed8fee455e0 (patch)
tree87cb3e02894374a4aa4dcbe7b5a56c29b3f3f188 /Lib
parent2fdc7b1f759e557c57d16e91b9ac53f2b441c0be (diff)
downloadcpython-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.py4
-rw-r--r--Lib/test/test_netrc.py22
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)