From 9c8624993d8434667483c8d6ade46c9ec792b47e Mon Sep 17 00:00:00 2001 From: vdrfan Date: Sun, 24 Jul 2011 13:46:25 +0200 Subject: [PATCH] fixed: add-ons not properly working with authenticated proxy servers - use format 'user:pass@host:port' as this is parsed by urllib/urllib2 (fixes #11485) --- xbmc/cores/DllLoader/exports/emu_msvcrt.cpp | 35 +++++++++------------ 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/xbmc/cores/DllLoader/exports/emu_msvcrt.cpp b/xbmc/cores/DllLoader/exports/emu_msvcrt.cpp index 41e491942ba27..a15575c93785d 100644 --- a/xbmc/cores/DllLoader/exports/emu_msvcrt.cpp +++ b/xbmc/cores/DllLoader/exports/emu_msvcrt.cpp @@ -186,31 +186,24 @@ extern "C" void __stdcall update_emu_environ() g_guiSettings.GetString("network.httpproxyserver") && g_guiSettings.GetString("network.httpproxyport")) { - const CStdString &strProxyServer = g_guiSettings.GetString("network.httpproxyserver"); - const CStdString &strProxyPort = g_guiSettings.GetString("network.httpproxyport"); - // Should we check for valid strings here? should HTTPS_PROXY use https://? -#ifdef _WIN32 - CStdString buf; - buf = "HTTP_PROXY=http://" + strProxyServer + ":" + strProxyPort; - pgwin32_putenv(buf.c_str()); - buf = "HTTPS_PROXY=http://" + strProxyServer + ":" + strProxyPort; - dll_putenv(buf.c_str()); -#else - setenv( "HTTP_PROXY", "http://" + strProxyServer + ":" + strProxyPort, true ); - setenv( "HTTPS_PROXY", "http://" + strProxyServer + ":" + strProxyPort, true ); -#endif - if (!g_guiSettings.GetString("network.httpproxyusername").IsEmpty()) + CStdString strProxy; + if (g_guiSettings.GetString("network.httpproxyusername") && + g_guiSettings.GetString("network.httpproxypassword")) { + strProxy.Format("%s:%s@", g_guiSettings.GetString("network.httpproxyusername").c_str(), + g_guiSettings.GetString("network.httpproxypassword").c_str()); + } + + strProxy += g_guiSettings.GetString("network.httpproxyserver"); + strProxy += ":" + g_guiSettings.GetString("network.httpproxyport"); + #ifdef _WIN32 - buf = "PROXY_USER" + g_guiSettings.GetString("network.httpproxyusername"); - pgwin32_putenv(buf.c_str()); - buf = "PROXY_PASS=" + g_guiSettings.GetString("network.httpproxypassword"); - dll_putenv(buf.c_str()); + pgwin32_putenv("HTTP_PROXY=http://" +strProxy.c_str()); + pgwin32_putenv("HTTPS_PROXY=http://" +strProxy.c_str()); #else - setenv("PROXY_USER", g_guiSettings.GetString("network.httpproxyusername"), true); - setenv("PROXY_PASS", g_guiSettings.GetString("network.httpproxypassword"), true); + setenv( "HTTP_PROXY", "http://" + strProxy, true ); + setenv( "HTTPS_PROXY", "http://" + strProxy, true ); #endif - } } else {