@@ -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