summaryrefslogtreecommitdiffstats
path: root/Lib/nntplib.py
diff options
context:
space:
mode:
authorEric S. Raymond <esr@thyrsus.com>2002-11-13 23:05:35 (GMT)
committerEric S. Raymond <esr@thyrsus.com>2002-11-13 23:05:35 (GMT)
commitb2db587b118b1ebb90d20d724bbb826290d83c35 (patch)
tree6d44aba1ab05f363dc87743a4cc4c0ac94b5aeda /Lib/nntplib.py
parent4c8be8510b753a3caedacb689162b15a24605a29 (diff)
downloadcpython-b2db587b118b1ebb90d20d724bbb826290d83c35.zip
cpython-b2db587b118b1ebb90d20d724bbb826290d83c35.tar.gz
cpython-b2db587b118b1ebb90d20d724bbb826290d83c35.tar.bz2
Make nntplib aware of ~/.netrc credentials; now they get used if they are
present and the caller has not specified a name/password pair. This change makes it less likely that a lazy coder will expose sensitive information in a word-readable script. Also, make the test a bit smarter. If NNTPSERVER is defined in the environment it will go talk to that server rather than look for a possibly nonexistent local one named 'news'. Maybe the osession initializer ought to look at NNTPSERVER rather than requiring a host arg? Must look around and see how universal this convention is first.
Diffstat (limited to 'Lib/nntplib.py')
-rw-r--r--Lib/nntplib.py30
1 files changed, 23 insertions, 7 deletions
diff --git a/Lib/nntplib.py b/Lib/nntplib.py
index f09c69a..8bf78a3 100644
--- a/Lib/nntplib.py
+++ b/Lib/nntplib.py
@@ -133,6 +133,16 @@ class NNTP:
readermode_afterauth = 1
else:
raise
+ # If no login/password was specified, try to get them from ~/.netrc
+ # Presume that if .netc has an entry, NNRP authentication is required.
+ if not user:
+ import netrc
+ credentials = netrc.netrc()
+ auth = credentials.authenticators(host)
+ if auth:
+ user = auth[0]
+ password = auth[2]
+ # Perform NNRP authentication if needed.
if user:
resp = self.shortcmd('authinfo user '+user)
if resp[:3] == '381':
@@ -555,9 +565,19 @@ class NNTP:
return resp
-def _test():
- """Minimal test function."""
- s = NNTP('news', readermode='reader')
+# Test retrieval when rubn as a script.
+# Assumption: if there's a local news server, it's called 'news'.
+# Assumption: if user queries a remote news server, it's named
+# in the environment variable NNTPSERVER (used by slrn and kin)
+# and we want readermode off.
+if __name__ == '__main__':
+ import os
+ newshost = 'news' and os.environ["NNTPSERVER"]
+ if newshost.find('.') == -1:
+ mode = 'readermode'
+ else:
+ mode = None
+ s = NNTP(newshost, readermode=mode)
resp, count, first, last, name = s.group('comp.lang.python')
print resp
print 'Group', name, 'has', count, 'articles, range', first, 'to', last
@@ -568,7 +588,3 @@ def _test():
resp = s.quit()
print resp
-
-# Run the test when run as a script
-if __name__ == '__main__':
- _test()