Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 47adcba

Browse files
committed
Fix for SF bug #123625: some newsservers need 'authinfo' *before* 'mode
readers', others *after*. (Netscape Collabra for the first category, INN-which-forks-nnrpd for the second.)
1 parent 19030a0 commit 47adcba

1 file changed

Lines changed: 20 additions & 0 deletions

File tree

Lib/nntplib.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,12 +112,25 @@ def __init__(self, host, port=NNTP_PORT, user=None, password=None,
112112
self.file = self.sock.makefile('rb')
113113
self.debugging = 0
114114
self.welcome = self.getresp()
115+
116+
# 'mode reader' is sometimes necessary to enable 'reader' mode.
117+
# However, the order in which 'mode reader' and 'authinfo' need to
118+
# arrive differs between some NNTP servers. Try to send
119+
# 'mode reader', and if it fails with an authorization failed
120+
# error, try again after sending authinfo.
121+
readermode_afterauth = 0
115122
if readermode:
116123
try:
117124
self.welcome = self.shortcmd('mode reader')
118125
except NNTPPermanentError:
119126
# error 500, probably 'not implemented'
120127
pass
128+
except NNTPTemporaryError, e:
129+
if user and e.response[:3] == '480':
130+
# Need authorization before 'mode reader'
131+
readermode_afterauth = 1
132+
else:
133+
raise
121134
if user:
122135
resp = self.shortcmd('authinfo user '+user)
123136
if resp[:3] == '381':
@@ -128,6 +141,13 @@ def __init__(self, host, port=NNTP_PORT, user=None, password=None,
128141
'authinfo pass '+password)
129142
if resp[:3] != '281':
130143
raise NNTPPermanentError(resp)
144+
if readermode_afterauth:
145+
try:
146+
self.welcome = self.shortcmd('mode reader')
147+
except NNTPPermanentError:
148+
# error 500, probably 'not implemented'
149+
pass
150+
131151

132152
# Get the welcome message from the server
133153
# (this is read and squirreled away by __init__()).

0 commit comments

Comments
 (0)