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.
This commit is contained in:
parent
4c8be8510b
commit
b2db587b11
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue