summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/nntplib.py20
1 files changed, 20 insertions, 0 deletions
diff --git a/Lib/nntplib.py b/Lib/nntplib.py
index 16716ec..1a2254c 100644
--- a/Lib/nntplib.py
+++ b/Lib/nntplib.py
@@ -112,12 +112,25 @@ class NNTP:
self.file = self.sock.makefile('rb')
self.debugging = 0
self.welcome = self.getresp()
+
+ # 'mode reader' is sometimes necessary to enable 'reader' mode.
+ # However, the order in which 'mode reader' and 'authinfo' need to
+ # arrive differs between some NNTP servers. Try to send
+ # 'mode reader', and if it fails with an authorization failed
+ # error, try again after sending authinfo.
+ readermode_afterauth = 0
if readermode:
try:
self.welcome = self.shortcmd('mode reader')
except NNTPPermanentError:
# error 500, probably 'not implemented'
pass
+ except NNTPTemporaryError, e:
+ if user and e.response[:3] == '480':
+ # Need authorization before 'mode reader'
+ readermode_afterauth = 1
+ else:
+ raise
if user:
resp = self.shortcmd('authinfo user '+user)
if resp[:3] == '381':
@@ -128,6 +141,13 @@ class NNTP:
'authinfo pass '+password)
if resp[:3] != '281':
raise NNTPPermanentError(resp)
+ if readermode_afterauth:
+ try:
+ self.welcome = self.shortcmd('mode reader')
+ except NNTPPermanentError:
+ # error 500, probably 'not implemented'
+ pass
+
# Get the welcome message from the server
# (this is read and squirreled away by __init__()).