diff options
author | Antoine Pitrou <solipsis@pitrou.net> | 2012-02-14 22:29:34 (GMT) |
---|---|---|
committer | Antoine Pitrou <solipsis@pitrou.net> | 2012-02-14 22:29:34 (GMT) |
commit | 71135624d81fac63a1684d5cf31932652f9250ff (patch) | |
tree | ba562d04771744902f979f834c1b6ba1b262705d /Lib/nntplib.py | |
parent | ffeee3518a9ccb0d6375bf06abe2cf8a6bc9e5b8 (diff) | |
download | cpython-71135624d81fac63a1684d5cf31932652f9250ff.zip cpython-71135624d81fac63a1684d5cf31932652f9250ff.tar.gz cpython-71135624d81fac63a1684d5cf31932652f9250ff.tar.bz2 |
Issue #10287: nntplib now queries the server's CAPABILITIES first before sending MODE READER, and only sends it if not already in READER mode.
Patch by Hynek Schlawack.
Diffstat (limited to 'Lib/nntplib.py')
-rw-r--r-- | Lib/nntplib.py | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/Lib/nntplib.py b/Lib/nntplib.py index 6b0150d..32bffd8 100644 --- a/Lib/nntplib.py +++ b/Lib/nntplib.py @@ -324,25 +324,30 @@ class _NNTPBase: self.debugging = 0 self.welcome = self._getresp() + # Inquire about capabilities (RFC 3977). + self._caps = None + self.getcapabilities() + # '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. If _setreadermode() fails # with an authorization failed error, it will set this to True; # the login() routine will interpret that as a request to try again # after performing its normal function. + # Enable only if we're not already in READER mode anyway. self.readermode_afterauth = False - if readermode: + if readermode and 'READER' not in self._caps: self._setreadermode() + if not self.readermode_afterauth: + # Capabilities might have changed after MODE READER + self._caps = None + self.getcapabilities() # RFC 4642 2.2.2: Both the client and the server MUST know if there is # a TLS session active. A client MUST NOT attempt to start a TLS # session if a TLS session is already active. self.tls_on = False - # Inquire about capabilities (RFC 3977). - self._caps = None - self.getcapabilities() - # Log in and encryption setup order is left to subclasses. self.authenticated = False @@ -945,8 +950,12 @@ class _NNTPBase: self._caps = None self.getcapabilities() # Attempt to send mode reader if it was requested after login. - if self.readermode_afterauth: + # Only do so if we're not in reader mode already. + if self.readermode_afterauth and 'READER' not in self._caps: self._setreadermode() + # Capabilities might have changed after MODE READER + self._caps = None + self.getcapabilities() def _setreadermode(self): try: |