commit: 6e6d8e7f522fef3c32a7c71298024167c066a3c5 Author: Frédéric Pierret (fepitre) <frederic.pierret <AT> qubes-os <DOT> org> AuthorDate: Thu Aug 20 09:35:23 2020 +0000 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org> CommitDate: Mon Sep 7 22:23:08 2020 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=6e6d8e7f
Use portage proxy settings for fetching BINPKG host Bug: https://bugs.gentoo.org/740898 See: https://github.com/gentoo/portage/pull/607 Signed-off-by: Frédéric Pierret (fepitre) <frederic.pierret <AT> qubes-os.org> Signed-off-by: Zac Medico <zmedico <AT> gentoo.org> lib/portage/dbapi/bintree.py | 9 ++++++++- lib/portage/util/_urlopen.py | 10 +++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/lib/portage/dbapi/bintree.py b/lib/portage/dbapi/bintree.py index 620865a79..ee30542a5 100644 --- a/lib/portage/dbapi/bintree.py +++ b/lib/portage/dbapi/bintree.py @@ -964,11 +964,18 @@ class binarytree: download_timestamp + ttl > time.time(): raise UseCachedCopyOfRemoteIndex() + # Set proxy settings for _urlopen -> urllib_request + proxies = {} + for proto in ('http', 'https'): + value = self.settings.get(proto + '_proxy') + if value is not None: + proxies[proto] = value + # Don't use urlopen for https, unless # PEP 476 is supported (bug #469888). if parsed_url.scheme not in ('https',) or _have_pep_476(): try: - f = _urlopen(url, if_modified_since=local_timestamp) + f = _urlopen(url, if_modified_since=local_timestamp, proxies=proxies) if hasattr(f, 'headers') and f.headers.get('timestamp', ''): remote_timestamp = f.headers.get('timestamp') except IOError as err: diff --git a/lib/portage/util/_urlopen.py b/lib/portage/util/_urlopen.py index b46d1554c..b67d02739 100644 --- a/lib/portage/util/_urlopen.py +++ b/lib/portage/util/_urlopen.py @@ -26,7 +26,7 @@ def have_pep_476(): return hasattr(__import__('ssl'), '_create_unverified_context') -def urlopen(url, if_modified_since=None): +def urlopen(url, if_modified_since=None, proxies=None): parse_result = urllib_parse.urlparse(url) if parse_result.scheme not in ("http", "https"): return _urlopen(url) @@ -40,8 +40,12 @@ def urlopen(url, if_modified_since=None): request.add_header('If-Modified-Since', _timestamp_to_http(if_modified_since)) if parse_result.username is not None: password_manager.add_password(None, url, parse_result.username, parse_result.password) - auth_handler = CompressedResponseProcessor(password_manager) - opener = urllib_request.build_opener(auth_handler) + + handlers = [CompressedResponseProcessor(password_manager)] + if proxies: + handlers.append(urllib_request.ProxyHandler(proxies)) + opener = urllib_request.build_opener(*handlers) + hdl = opener.open(request) if hdl.headers.get('last-modified', ''): try: