diff options
-rw-r--r-- | configure.in | 2 | ||||
-rw-r--r-- | debian/changelog | 6 | ||||
-rw-r--r-- | doc/apt.conf.5.xml | 15 | ||||
-rw-r--r-- | methods/ftp.cc | 33 | ||||
-rw-r--r-- | methods/http.cc | 31 | ||||
-rw-r--r-- | 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[::<host>]' 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 <literal>http://[[user][:pass]@]host[:port]/</literal>. Per host proxies can also be specified by using the form <literal>http::Proxy::<host></literal> with the special keyword <literal>DIRECT</literal> - meaning to use no proxies. The <envar>http_proxy</envar> environment variable - will override all settings.</para> + meaning to use no proxies. If no one of the above settings is specified, + <envar>http_proxy</envar> environment variable + will be used.</para> <para>Three settings are provided for cache control with HTTP/1.1 compliant proxy caches. <literal>No-Cache</literal> tells the proxy to not use its cached @@ -251,9 +252,13 @@ DPkg::Pre-Install-Pkgs {"/usr/sbin/dpkg-preconfigure --apt";}; </para></listitem></varlistentry> <varlistentry><term>ftp</term> - <listitem><para>FTP URIs; ftp::Proxy is the default proxy server to use. It is in the - standard form of <literal>ftp://[[user][:pass]@]host[:port]/</literal> and is - overridden by the <envar>ftp_proxy</envar> environment variable. To use a ftp + <listitem><para>FTP URIs; ftp::Proxy is the default ftp proxy to use. It is in the + standard form of <literal>ftp://[[user][:pass]@]host[:port]/</literal>. Per + host proxies can also be specified by using the form + <literal>ftp::Proxy::<host></literal> with the special keyword <literal>DIRECT</literal> + meaning to use no proxies. If no one of the above settings is specified, + <envar>ftp_proxy</envar> environment variable + will be used. To use a ftp proxy you will have to set the <literal>ftp::ProxyLogin</literal> 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 |