Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(310)

Side by Side Diff: net/proxy/proxy_config_service_linux.cc

Issue 3413037: Change the default SOCKS version used by gnome settings (and environment vari... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | net/proxy/proxy_config_service_linux_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/proxy/proxy_config_service_linux.h" 5 #include "net/proxy/proxy_config_service_linux.h"
6 6
7 #include <errno.h> 7 #include <errno.h>
8 #include <fcntl.h> 8 #include <fcntl.h>
9 #include <gconf/gconf-client.h> 9 #include <gconf/gconf-client.h>
10 #include <limits.h> 10 #include <limits.h>
(...skipping 25 matching lines...) Expand all
36 36
37 namespace { 37 namespace {
38 38
39 // Given a proxy hostname from a setting, returns that hostname with 39 // Given a proxy hostname from a setting, returns that hostname with
40 // an appropriate proxy server scheme prefix. 40 // an appropriate proxy server scheme prefix.
41 // scheme indicates the desired proxy scheme: usually http, with 41 // scheme indicates the desired proxy scheme: usually http, with
42 // socks 4 or 5 as special cases. 42 // socks 4 or 5 as special cases.
43 // TODO(arindam): Remove URI string manipulation by using MapUrlSchemeToProxy. 43 // TODO(arindam): Remove URI string manipulation by using MapUrlSchemeToProxy.
44 std::string FixupProxyHostScheme(ProxyServer::Scheme scheme, 44 std::string FixupProxyHostScheme(ProxyServer::Scheme scheme,
45 std::string host) { 45 std::string host) {
46 if (scheme == ProxyServer::SCHEME_SOCKS4 && 46 if (scheme == ProxyServer::SCHEME_SOCKS5 &&
47 StartsWithASCII(host, "socks5://", false)) { 47 StartsWithASCII(host, "socks4://", false)) {
48 // We default to socks 4, but if the user specifically set it to 48 // We default to socks 5, but if the user specifically set it to
49 // socks5://, then use that. 49 // socks4://, then use that.
50 scheme = ProxyServer::SCHEME_SOCKS5; 50 scheme = ProxyServer::SCHEME_SOCKS4;
51 } 51 }
52 // Strip the scheme if any. 52 // Strip the scheme if any.
53 std::string::size_type colon = host.find("://"); 53 std::string::size_type colon = host.find("://");
54 if (colon != std::string::npos) 54 if (colon != std::string::npos)
55 host = host.substr(colon + 3); 55 host = host.substr(colon + 3);
56 // If a username and perhaps password are specified, give a warning. 56 // If a username and perhaps password are specified, give a warning.
57 std::string::size_type at_sign = host.find("@"); 57 std::string::size_type at_sign = host.find("@");
58 // Should this be supported? 58 // Should this be supported?
59 if (at_sign != std::string::npos) { 59 if (at_sign != std::string::npos) {
60 // ProxyConfig does not support authentication parameters, but Chrome 60 // ProxyConfig does not support authentication parameters, but Chrome
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 if (have_ftp) 145 if (have_ftp)
146 config->proxy_rules().proxy_for_ftp = proxy_server; 146 config->proxy_rules().proxy_for_ftp = proxy_server;
147 if (have_http || have_https || have_ftp) { 147 if (have_http || have_https || have_ftp) {
148 // mustn't change type unless some rules are actually set. 148 // mustn't change type unless some rules are actually set.
149 config->proxy_rules().type = 149 config->proxy_rules().type =
150 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME; 150 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME;
151 } 151 }
152 } 152 }
153 if (config->proxy_rules().empty()) { 153 if (config->proxy_rules().empty()) {
154 // If the above were not defined, try for socks. 154 // If the above were not defined, try for socks.
155 ProxyServer::Scheme scheme = ProxyServer::SCHEME_SOCKS4; 155 // For environment variables, we default to version 5, per the gnome
156 // documentation: http://library.gnome.org/devel/gnet/stable/gnet-socks.html
157 ProxyServer::Scheme scheme = ProxyServer::SCHEME_SOCKS5;
156 std::string env_version; 158 std::string env_version;
157 if (env_var_getter_->GetVar("SOCKS_VERSION", &env_version) 159 if (env_var_getter_->GetVar("SOCKS_VERSION", &env_version)
158 && env_version == "5") 160 && env_version == "4")
159 scheme = ProxyServer::SCHEME_SOCKS5; 161 scheme = ProxyServer::SCHEME_SOCKS4;
160 if (GetProxyFromEnvVarForScheme("SOCKS_SERVER", scheme, &proxy_server)) { 162 if (GetProxyFromEnvVarForScheme("SOCKS_SERVER", scheme, &proxy_server)) {
161 config->proxy_rules().type = ProxyConfig::ProxyRules::TYPE_SINGLE_PROXY; 163 config->proxy_rules().type = ProxyConfig::ProxyRules::TYPE_SINGLE_PROXY;
162 config->proxy_rules().single_proxy = proxy_server; 164 config->proxy_rules().single_proxy = proxy_server;
163 } 165 }
164 } 166 }
165 // Look for the proxy bypass list. 167 // Look for the proxy bypass list.
166 std::string no_proxy; 168 std::string no_proxy;
167 env_var_getter_->GetVar("no_proxy", &no_proxy); 169 env_var_getter_->GetVar("no_proxy", &no_proxy);
168 if (config->proxy_rules().empty()) { 170 if (config->proxy_rules().empty()) {
169 // Having only "no_proxy" set, presumably to "*", makes it 171 // Having only "no_proxy" set, presumably to "*", makes it
(...skipping 738 matching lines...) Expand 10 before | Expand all | Expand 10 after
908 return false; 910 return false;
909 } 911 }
910 // Check for an optional port. 912 // Check for an optional port.
911 int port = 0; 913 int port = 0;
912 gconf_getter_->GetInt((key + "port").c_str(), &port); 914 gconf_getter_->GetInt((key + "port").c_str(), &port);
913 if (port != 0) { 915 if (port != 0) {
914 // If a port is set and non-zero: 916 // If a port is set and non-zero:
915 host += ":" + base::IntToString(port); 917 host += ":" + base::IntToString(port);
916 } 918 }
917 host = FixupProxyHostScheme( 919 host = FixupProxyHostScheme(
918 is_socks ? ProxyServer::SCHEME_SOCKS4 : ProxyServer::SCHEME_HTTP, 920 is_socks ? ProxyServer::SCHEME_SOCKS5 : ProxyServer::SCHEME_HTTP,
919 host); 921 host);
920 ProxyServer proxy_server = ProxyServer::FromURI(host, 922 ProxyServer proxy_server = ProxyServer::FromURI(host,
921 ProxyServer::SCHEME_HTTP); 923 ProxyServer::SCHEME_HTTP);
922 if (proxy_server.is_valid()) { 924 if (proxy_server.is_valid()) {
923 *result_server = proxy_server; 925 *result_server = proxy_server;
924 return true; 926 return true;
925 } 927 }
926 return false; 928 return false;
927 } 929 }
928 930
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
975 // not exist (presumably on older versions), assume false in that 977 // not exist (presumably on older versions), assume false in that
976 // case. 978 // case.
977 gconf_getter_->GetBoolean("/system/http_proxy/use_same_proxy", 979 gconf_getter_->GetBoolean("/system/http_proxy/use_same_proxy",
978 &same_proxy); 980 &same_proxy);
979 981
980 ProxyServer proxy_server; 982 ProxyServer proxy_server;
981 if (!same_proxy) { 983 if (!same_proxy) {
982 // Try socks. 984 // Try socks.
983 if (GetProxyFromGConf("/system/proxy/socks_", true, &proxy_server)) { 985 if (GetProxyFromGConf("/system/proxy/socks_", true, &proxy_server)) {
984 // gconf settings do not appear to distinguish between socks 986 // gconf settings do not appear to distinguish between socks
985 // version. We default to version 4. 987 // version. We default to version 5. For more information on this policy
988 // decisions, see:
989 // http://code.google.com/p/chromium/issues/detail?id=55912#c2
986 config->proxy_rules().type = ProxyConfig::ProxyRules::TYPE_SINGLE_PROXY; 990 config->proxy_rules().type = ProxyConfig::ProxyRules::TYPE_SINGLE_PROXY;
987 config->proxy_rules().single_proxy = proxy_server; 991 config->proxy_rules().single_proxy = proxy_server;
988 } 992 }
989 } 993 }
990 if (config->proxy_rules().empty()) { 994 if (config->proxy_rules().empty()) {
991 bool have_http = GetProxyFromGConf("/system/http_proxy/", false, 995 bool have_http = GetProxyFromGConf("/system/http_proxy/", false,
992 &proxy_server); 996 &proxy_server);
993 if (same_proxy) { 997 if (same_proxy) {
994 if (have_http) { 998 if (have_http) {
995 config->proxy_rules().type = ProxyConfig::ProxyRules::TYPE_SINGLE_PROXY; 999 config->proxy_rules().type = ProxyConfig::ProxyRules::TYPE_SINGLE_PROXY;
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
1239 : delegate_(new Delegate(env_var_getter)) { 1243 : delegate_(new Delegate(env_var_getter)) {
1240 } 1244 }
1241 1245
1242 ProxyConfigServiceLinux::ProxyConfigServiceLinux( 1246 ProxyConfigServiceLinux::ProxyConfigServiceLinux(
1243 base::Environment* env_var_getter, 1247 base::Environment* env_var_getter,
1244 GConfSettingGetter* gconf_getter) 1248 GConfSettingGetter* gconf_getter)
1245 : delegate_(new Delegate(env_var_getter, gconf_getter)) { 1249 : delegate_(new Delegate(env_var_getter, gconf_getter)) {
1246 } 1250 }
1247 1251
1248 } // namespace net 1252 } // namespace net
OLDNEW
« no previous file with comments | « no previous file | net/proxy/proxy_config_service_linux_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698