From 54f54fcca7af7e5bbc779cfc73d58d1ed2b4b6ae Mon Sep 17 00:00:00 2001 From: Yen Chi Hsuan Date: Sat, 22 Apr 2017 21:44:01 +0800 Subject: [PATCH] [socks] Report errors elegantly when credentails are required but missing In some non-standard implementations, the server may respond AUTH_USER_PASS even if's not listed in available authentication methods. (it should respond AUTH_NO_ACCEPTABLE per standards) --- ChangeLog | 4 ++++ youtube_dl/socks.py | 5 +++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index d699acb31..8dc6e6857 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ version +Core + +* [socks] Handle cases where credentials are required but missing + Extractors - [azubu] Remove extractor (#12813) * [porn91] Fix extraction (#12814) diff --git a/youtube_dl/socks.py b/youtube_dl/socks.py index 0f5d7bdb2..5d4adbe72 100644 --- a/youtube_dl/socks.py +++ b/youtube_dl/socks.py @@ -193,9 +193,10 @@ def _socks5_auth(self): self._check_response_version(SOCKS5_VERSION, version) - if method == Socks5Auth.AUTH_NO_ACCEPTABLE: + if method == Socks5Auth.AUTH_NO_ACCEPTABLE or ( + method == Socks5Auth.AUTH_USER_PASS and (not self._proxy.username or not self._proxy.password)): self.close() - raise Socks5Error(method) + raise Socks5Error(Socks5Auth.AUTH_NO_ACCEPTABLE) if method == Socks5Auth.AUTH_USER_PASS: username = self._proxy.username.encode('utf-8')