From 788a8f42c1ec146c812550d076e5fb720e83ae52 Mon Sep 17 00:00:00 2001 From: "Eugene V. Lyubimkin" Date: Mon, 15 Dec 2008 21:17:39 +0200 Subject: Make apt proxy options have the highest priority, unified proxy determining code. --- configure.in | 2 +- debian/changelog | 6 ++++++ doc/apt.conf.5.xml | 15 ++++++++++----- methods/ftp.cc | 33 +++++++++++++++++++-------------- methods/http.cc | 31 ++++++++++++++++++------------- methods/https.cc | 31 +++++++++++++++++++------------ 6 files changed, 73 insertions(+), 45 deletions(-) diff --git a/configure.in b/configure.in index f90a32c3b..04d8a4712 100644 --- a/configure.in +++ b/configure.in @@ -18,7 +18,7 @@ AC_CONFIG_AUX_DIR(buildlib) AC_CONFIG_HEADER(include/config.h:buildlib/config.h.in include/apti18n.h:buildlib/apti18n.h.in) dnl -- SET THIS TO THE RELEASE VERSION -- -AC_DEFINE_UNQUOTED(VERSION,"0.7.20~exp3") +AC_DEFINE_UNQUOTED(VERSION,"0.7.20") PACKAGE="apt" AC_DEFINE_UNQUOTED(PACKAGE,"$PACKAGE") AC_SUBST(PACKAGE) diff --git a/debian/changelog b/debian/changelog index 90be66400..304e0fb2a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -13,6 +13,12 @@ apt (0.7.20) unstable; urgency=low - Mentioned 'APT::Periodic' and 'APT::Archives' groups of options. (Closes: #438559) - Mentioned '/* ... */' comments. (Closes: #507601) + * methods/{http,https,ftp}, doc/apt.conf.5.xml: + - Changed and unified the code that determines which proxy to use. Now + 'Acquire::{http,ftp}::Proxy[::]' options have the highest priority, + and '{http,ftp}_proxy' environment variables are used only if options + mentioned above are not specified. + (Closes: #445985, #157759, #320184, #365880, #479617) [ Michael Vogt ] * make "apt-get build-dep" installed packages marked automatic diff --git a/doc/apt.conf.5.xml b/doc/apt.conf.5.xml index 74966c5b3..4d9e708a8 100644 --- a/doc/apt.conf.5.xml +++ b/doc/apt.conf.5.xml @@ -202,8 +202,9 @@ DPkg::Pre-Install-Pkgs {"/usr/sbin/dpkg-preconfigure --apt";}; standard form of http://[[user][:pass]@]host[:port]/. Per host proxies can also be specified by using the form http::Proxy::<host> with the special keyword DIRECT - meaning to use no proxies. The http_proxy environment variable - will override all settings. + meaning to use no proxies. If no one of the above settings is specified, + http_proxy environment variable + will be used. Three settings are provided for cache control with HTTP/1.1 compliant proxy caches. No-Cache tells the proxy to not use its cached @@ -251,9 +252,13 @@ DPkg::Pre-Install-Pkgs {"/usr/sbin/dpkg-preconfigure --apt";}; ftp - FTP URIs; ftp::Proxy is the default proxy server to use. It is in the - standard form of ftp://[[user][:pass]@]host[:port]/ and is - overridden by the ftp_proxy environment variable. To use a ftp + FTP URIs; ftp::Proxy is the default ftp proxy to use. It is in the + standard form of ftp://[[user][:pass]@]host[:port]/. Per + host proxies can also be specified by using the form + ftp::Proxy::<host> with the special keyword DIRECT + meaning to use no proxies. If no one of the above settings is specified, + ftp_proxy environment variable + will be used. To use a ftp proxy you will have to set the ftp::ProxyLogin script in the configuration file. This entry specifies the commands to send to tell the proxy server what to connect to. Please see diff --git a/methods/ftp.cc b/methods/ftp.cc index 554a24cf5..c91600ad5 100644 --- a/methods/ftp.cc +++ b/methods/ftp.cc @@ -112,23 +112,28 @@ bool FTPConn::Open(pkgAcqMethod *Owner) Close(); // Determine the proxy setting - if (getenv("ftp_proxy") == 0) + string SpecificProxy = _config->Find("Acquire::ftp::Proxy::" + ServerName.Host); + if (!SpecificProxy.empty()) { - string DefProxy = _config->Find("Acquire::ftp::Proxy"); - string SpecificProxy = _config->Find("Acquire::ftp::Proxy::" + ServerName.Host); - if (SpecificProxy.empty() == false) - { - if (SpecificProxy == "DIRECT") - Proxy = ""; - else - Proxy = SpecificProxy; - } - else - Proxy = DefProxy; + if (SpecificProxy == "DIRECT") + Proxy = ""; + else + Proxy = SpecificProxy; } else - Proxy = getenv("ftp_proxy"); - + { + string DefProxy = _config->Find("Acquire::ftp::Proxy"); + if (!DefProxy.empty()) + { + Proxy = DefProxy; + } + else + { + char* result = getenv("ftp_proxy"); + Proxy = result ? result : ""; + } + } + // Parse no_proxy, a , separated list of domains if (getenv("no_proxy") != 0) { diff --git a/methods/http.cc b/methods/http.cc index b3c791fa0..5d18b3adc 100644 --- a/methods/http.cc +++ b/methods/http.cc @@ -309,22 +309,27 @@ bool ServerState::Open() Persistent = true; // Determine the proxy setting - if (getenv("http_proxy") == 0) + string SpecificProxy = _config->Find("Acquire::http::Proxy::" + ServerName.Host); + if (!SpecificProxy.empty()) { - string DefProxy = _config->Find("Acquire::http::Proxy"); - string SpecificProxy = _config->Find("Acquire::http::Proxy::" + ServerName.Host); - if (SpecificProxy.empty() == false) - { - if (SpecificProxy == "DIRECT") - Proxy = ""; - else - Proxy = SpecificProxy; - } - else - Proxy = DefProxy; + if (SpecificProxy == "DIRECT") + Proxy = ""; + else + Proxy = SpecificProxy; } else - Proxy = getenv("http_proxy"); + { + string DefProxy = _config->Find("Acquire::http::Proxy"); + if (!DefProxy.empty()) + { + Proxy = DefProxy; + } + else + { + char* result = getenv("http_proxy"); + Proxy = result ? result : ""; + } + } // Parse no_proxy, a , separated list of domains if (getenv("no_proxy") != 0) diff --git a/methods/https.cc b/methods/https.cc index 98dfeefa1..728869fa2 100644 --- a/methods/https.cc +++ b/methods/https.cc @@ -61,19 +61,26 @@ void HttpsMethod::SetupProxy() URI ServerName = Queue->Uri; // Determine the proxy setting - if (getenv("http_proxy") == 0) + string SpecificProxy = _config->Find("Acquire::http::Proxy::" + ServerName.Host); + if (!SpecificProxy.empty()) { - string DefProxy = _config->Find("Acquire::http::Proxy"); - string SpecificProxy = _config->Find("Acquire::http::Proxy::" + ServerName.Host); - if (SpecificProxy.empty() == false) - { - if (SpecificProxy == "DIRECT") - Proxy = ""; - else - Proxy = SpecificProxy; - } - else - Proxy = DefProxy; + if (SpecificProxy == "DIRECT") + Proxy = ""; + else + Proxy = SpecificProxy; + } + else + { + string DefProxy = _config->Find("Acquire::http::Proxy"); + if (!DefProxy.empty()) + { + Proxy = DefProxy; + } + else + { + char* result = getenv("http_proxy"); + Proxy = result ? result : ""; + } } // Parse no_proxy, a , separated list of domains -- cgit v1.2.3