From 76cce06c15e04b9b2fa5725eb9b3215a7587318e Mon Sep 17 00:00:00 2001 From: Michael Andres Date: Mon, 16 Jan 2012 11:43:35 +0100 Subject: [PATCH] Correctly use user:pass directly embedded in a proxy url (bnc#740764) --- zypp/media/MediaCurl.cc | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/zypp/media/MediaCurl.cc b/zypp/media/MediaCurl.cc index 46a6f26..bd10ddc 100644 --- a/zypp/media/MediaCurl.cc +++ b/zypp/media/MediaCurl.cc @@ -333,9 +333,19 @@ void fillSettingsSystemProxy( const Url&url, TransferSettings &s ) #else ProxyInfo proxy_info (ProxyInfo::ImplPtr(new ProxyInfoSysconfig("proxy"))); #endif - s.setProxyEnabled( proxy_info.useProxyFor( url ) ); - if ( s.proxyEnabled() ) - s.setProxy(proxy_info.proxy(url)); + if ( proxy_info.useProxyFor( url ) ) + { + // We must extract any 'user:pass' from the proxy url + // otherwise they won't make it into curl (.curlrc wins). + try { + Url u( proxy_info.proxy( url ) ); + s.setProxy( u.asString( url::ViewOption::WITH_SCHEME + url::ViewOption::WITH_HOST + url::ViewOption::WITH_PORT ) ); + s.setProxyUsername( u.getUsername( url::E_ENCODED ) ); + s.setProxyPassword( u.getPassword( url::E_ENCODED ) ); + s.setProxyEnabled( true ); + } + catch (...) {} // no proxy if URL is malformed + } } Pathname MediaCurl::_cookieFile = "/var/lib/YaST2/cookies"; @@ -642,10 +652,15 @@ void MediaCurl::setupEasy() DBG << "using proxy-user from ~/.curlrc" << endl; } } + else + { + DBG << "using provided proxy-user" << endl; + } - proxyuserpwd = unEscape( proxyuserpwd ); if ( ! proxyuserpwd.empty() ) - SET_OPTION(CURLOPT_PROXYUSERPWD, proxyuserpwd.c_str()); + { + SET_OPTION(CURLOPT_PROXYUSERPWD, unEscape( proxyuserpwd ).c_str()); + } } } else -- 2.7.4