Kaynağa Gözat

merged from the mvo branch

Michael Vogt 17 yıl önce
ebeveyn
işleme
f408836a80

+ 1 - 1
apt-pkg/contrib/mmap.cc

@@ -317,7 +317,7 @@ unsigned long DynamicMMap::WriteString(const char *String,
    but why we should not at least try to grow it before we give up? */
    but why we should not at least try to grow it before we give up? */
 bool DynamicMMap::Grow()
 bool DynamicMMap::Grow()
 {
 {
-#ifdef _POSIX_MAPPED_FILES
+#if defined(_POSIX_MAPPED_FILES) && defined(__linux__)
    unsigned long newSize = WorkSpace + 1024*1024;
    unsigned long newSize = WorkSpace + 1024*1024;
 
 
    if(Fd != 0)
    if(Fd != 0)

+ 6 - 6
apt-pkg/pkgcache.cc

@@ -275,13 +275,13 @@ pkgCache::PkgIterator::OkState pkgCache::PkgIterator::State() const
       return NeedsUnpack;
       return NeedsUnpack;
    
    
    if (Pkg->CurrentState == pkgCache::State::UnPacked ||
    if (Pkg->CurrentState == pkgCache::State::UnPacked ||
-       Pkg->CurrentState == pkgCache::State::HalfConfigured ||
-      //we don't need to care for triggers awaiting packages
-      //dpkg will deal with them automatically when the 
-      //trigger pending action is run (those packages are usually
-      //in half-configured or triggers-pending state)
+       Pkg->CurrentState == pkgCache::State::HalfConfigured)
+      // we leave triggers alone complettely. dpkg deals with
+      // them in a hard-to-predict manner and if they get 
+      // resolved by dpkg before apt run dpkg --configure on 
+      // the TriggersPending package dpkg returns a error
       //Pkg->CurrentState == pkgCache::State::TriggersAwaited
       //Pkg->CurrentState == pkgCache::State::TriggersAwaited
-       Pkg->CurrentState == pkgCache::State::TriggersPending)
+      //Pkg->CurrentState == pkgCache::State::TriggersPending)
       return NeedsConfigure;
       return NeedsConfigure;
    
    
    if (Pkg->CurrentState == pkgCache::State::HalfInstalled ||
    if (Pkg->CurrentState == pkgCache::State::HalfInstalled ||

+ 6 - 3
apt-pkg/sourcelist.cc

@@ -157,15 +157,18 @@ bool pkgSourceList::ReadMainList()
    // CNC:2003-11-28 - Entries in sources.list have priority over
    // CNC:2003-11-28 - Entries in sources.list have priority over
    //                  entries in sources.list.d.
    //                  entries in sources.list.d.
    string Main = _config->FindFile("Dir::Etc::sourcelist");
    string Main = _config->FindFile("Dir::Etc::sourcelist");
+   string Parts = _config->FindDir("Dir::Etc::sourceparts");
+   
    if (FileExists(Main) == true)
    if (FileExists(Main) == true)
       Res &= ReadAppend(Main);
       Res &= ReadAppend(Main);
-   else
+   else if (FileExists(Parts) == false)
+      // Only warn if there are no sources.list.d.
       _error->WarningE("FileExists",_("Unable to read %s"),Main.c_str());
       _error->WarningE("FileExists",_("Unable to read %s"),Main.c_str());
 
 
-   string Parts = _config->FindDir("Dir::Etc::sourceparts");
    if (FileExists(Parts) == true)
    if (FileExists(Parts) == true)
       Res &= ReadSourceDir(Parts);
       Res &= ReadSourceDir(Parts);
-   else
+   else if (FileExists(Main) == false)
+      // Only warn if there is no sources.list file.
       _error->WarningE("FileExists",_("Unable to read %s"),Parts.c_str());
       _error->WarningE("FileExists",_("Unable to read %s"),Parts.c_str());
 
 
    return Res;
    return Res;

+ 2 - 2
cmdline/apt-get.cc

@@ -1262,7 +1262,8 @@ pkgSrcRecords::Parser *FindSrc(const char *Name,pkgRecords &Recs,
    /* Lookup the version of the package we would install if we were to
    /* Lookup the version of the package we would install if we were to
       install a version and determine the source package name, then look
       install a version and determine the source package name, then look
       in the archive for a source package of the same name. */
       in the archive for a source package of the same name. */
-   if (_config->FindB("APT::Get::Only-Source") == false)
+   bool MatchSrcOnly = _config->FindB("APT::Get::Only-Source");
+   if (MatchSrcOnly == false)
    {
    {
       if (Pkg.end() == false)
       if (Pkg.end() == false)
       {
       {
@@ -1280,7 +1281,6 @@ pkgSrcRecords::Parser *FindSrc(const char *Name,pkgRecords &Recs,
    unsigned long Offset = 0;
    unsigned long Offset = 0;
    string Version;
    string Version;
    bool IsMatch = false;
    bool IsMatch = false;
-   bool MatchSrcOnly = false;
 
 
    // No source package name..
    // No source package name..
    if (Src.empty() == true)
    if (Src.empty() == true)

+ 1 - 2
configure.in

@@ -18,8 +18,7 @@ AC_CONFIG_AUX_DIR(buildlib)
 AC_CONFIG_HEADER(include/config.h:buildlib/config.h.in include/apti18n.h:buildlib/apti18n.h.in)
 AC_CONFIG_HEADER(include/config.h:buildlib/config.h.in include/apti18n.h:buildlib/apti18n.h.in)
 
 
 dnl -- SET THIS TO THE RELEASE VERSION --
 dnl -- SET THIS TO THE RELEASE VERSION --
-
-AC_DEFINE_UNQUOTED(VERSION,"0.7.21")
+AC_DEFINE_UNQUOTED(VERSION,"0.7.22.3")
 PACKAGE="apt"
 PACKAGE="apt"
 AC_DEFINE_UNQUOTED(PACKAGE,"$PACKAGE")
 AC_DEFINE_UNQUOTED(PACKAGE,"$PACKAGE")
 AC_SUBST(PACKAGE)
 AC_SUBST(PACKAGE)

+ 9 - 0
debian/NEWS.Debian

@@ -1,3 +1,12 @@
+apt (0.7.22.3) unstable; urgency=low
+
+  * Code that determines which proxy to use was changed. 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.
+
+ -- Eugene V. Lyubimkin <jackyf.devel@gmail.com>  Thu, 19 Aug 2009 11:26:16 +0200
+
 apt (0.6.44) unstable; urgency=low
 apt (0.6.44) unstable; urgency=low
 
 
   * apt-ftparchive --db now uses Berkeley DB_BTREE instead of DB_HASH. 
   * apt-ftparchive --db now uses Berkeley DB_BTREE instead of DB_HASH. 

+ 61 - 8
debian/apt.cron.daily

@@ -4,17 +4,58 @@
 #set -e
 #set -e
 #
 #
 # This file understands the following apt configuration variables:
 # This file understands the following apt configuration variables:
+# Values here are the default.
+# Create /etc/apt/apt.conf.d/02periodic file to set your preference.
 #
 #
-#  "APT::Periodic::Update-Package-Lists=1"
+#  Dir "/";
+#  - RootDir for all configuration files
+#
+#  Dir::Cache "var/apt/cache/";
+#  - Set apt package cache directory
+#
+#  Dir::Cache::Archive "archives/";
+#  - Set package archive directory
+#
+#  APT::Periodic::Enable "1";
+#  - Enable the update/upgrade script (0=disable)
+#
+#  APT::Periodic::BackupArchiveInterval "0";
+#  - Backup after n-days if archive contents changed.(0=disable)
+#
+#  APT::Periodic::BackupLevel "3";
+#  - Backup level.(0=disable), 1 is invalid.
+#
+#  Dir::Cache::Backup "backup/";
+#  - Set periodic package backup directory
+#
+#  APT::Archives::MaxAge "0"; (old, deprecated)
+#  APT::Periodic::MaxAge "0"; (new)
+#  - Set maximum allowed age of a cache package file. If a cache 
+#    package file is older it is deleted (0=disable)
+#
+#  APT::Archives::MinAge "2"; (old, deprecated)
+#  APT::Periodic::MinAge "2"; (new)
+#  - Set minimum age of a package file. If a file is younger it
+#    will not be deleted (0=disable). Usefull to prevent races 
+#    and to keep backups of the packages for emergency.
+#
+#  APT::Archives::MaxSize "0"; (old, deprecated)
+#  APT::Periodic::MaxSize "0"; (new)
+#  - Set maximum size of the cache in MB (0=disable). If the cache
+#    is bigger, cached package files are deleted until the size
+#    requirement is met (the biggest packages will be deleted 
+#    first).
+#
+#  APT::Periodic::Update-Package-Lists "0";
 #  - Do "apt-get update" automatically every n-days (0=disable)
 #  - Do "apt-get update" automatically every n-days (0=disable)
 #    
 #    
 #  "APT::Periodic::Download-Upgradeable-Packages=0",
 #  "APT::Periodic::Download-Upgradeable-Packages=0",
 #  - Do "apt-get upgrade --download-only" every n-days (0=disable)
 #  - Do "apt-get upgrade --download-only" every n-days (0=disable)
-# 
-#  "APT::Periodic::AutocleanInterval"
-#  - Do "apt-get autoclean" every n-days (0=disable)
 #
 #
-#  "APT::Periodic::Unattended-Upgrade"
+#  APT::Periodic::Download-Upgradeable-Packages-Debdelta "1";
+#  - Use debdelta-upgrade to download updates if available (0=disable)
+#
+#  APT::Periodic::Unattended-Upgrade "0";
 #  - Run the "unattended-upgrade" security upgrade script 
 #  - Run the "unattended-upgrade" security upgrade script 
 #    every n-days (0=disabled)
 #    every n-days (0=disabled)
 #    Requires the package "unattended-upgrades" and will write
 #    Requires the package "unattended-upgrades" and will write
@@ -301,12 +342,18 @@ if ! which apt-config >/dev/null ; then
 	exit 0
 	exit 0
 fi
 fi
 
 
+# check if the user really wants to do something
+AutoAptEnable=1  # default is yes
+eval $(apt-config shell AutoAptEnable APT::Periodic::Enable)
+
+if [ $AutoAptEnable -eq 0 ]; then
+    exit 0
+fi
+
 # Set VERBOSE mode from  apt-config (or inherit from environment)
 # Set VERBOSE mode from  apt-config (or inherit from environment)
+VERBOSE=0
 eval $(apt-config shell VERBOSE APT::Periodic::Verbose)
 eval $(apt-config shell VERBOSE APT::Periodic::Verbose)
 debug_echo "verbose level $VERBOSE"
 debug_echo "verbose level $VERBOSE"
-if [ -z "$VERBOSE" ]; then
-    VERBOSE="0"
-fi
 if [ "$VERBOSE" -le 2 ]; then
 if [ "$VERBOSE" -le 2 ]; then
     # quiet for 0,1,2
     # quiet for 0,1,2
     XSTDOUT=">/dev/null"
     XSTDOUT=">/dev/null"
@@ -367,6 +414,9 @@ eval $(apt-config shell AutocleanInterval APT::Periodic::AutocleanInterval)
 BackupArchiveInterval=0
 BackupArchiveInterval=0
 eval $(apt-config shell BackupArchiveInterval APT::Periodic::BackupArchiveInterval)
 eval $(apt-config shell BackupArchiveInterval APT::Periodic::BackupArchiveInterval)
 
 
+Debdelta=1
+eval $(apt-config shell Debdelta APT::Periodic::Download-Upgradeable-Packages-Debdelta)
+
 # check if we actually have to do anything
 # check if we actually have to do anything
 if [ $UpdateInterval -eq 0 ] &&
 if [ $UpdateInterval -eq 0 ] &&
    [ $DownloadUpgradeableInterval -eq 0 ] &&
    [ $DownloadUpgradeableInterval -eq 0 ] &&
@@ -432,6 +482,9 @@ fi
 # download all upgradeable packages (if it is requested)
 # download all upgradeable packages (if it is requested)
 DOWNLOAD_UPGRADEABLE_STAMP=/var/lib/apt/periodic/download-upgradeable-stamp
 DOWNLOAD_UPGRADEABLE_STAMP=/var/lib/apt/periodic/download-upgradeable-stamp
 if [ $UPDATED -eq 1 ] && check_stamp $DOWNLOAD_UPGRADEABLE_STAMP $DownloadUpgradeableInterval; then
 if [ $UPDATED -eq 1 ] && check_stamp $DOWNLOAD_UPGRADEABLE_STAMP $DownloadUpgradeableInterval; then
+    if [ $Debdelta -eq 1 ]; then
+        debdelta-upgrade >/dev/null 2>&1 || true
+    fi
     if  eval apt-get $XAPTOPT -y -d dist-upgrade $XSTDERR; then
     if  eval apt-get $XAPTOPT -y -d dist-upgrade $XSTDERR; then
 	update_stamp $DOWNLOAD_UPGRADEABLE_STAMP
 	update_stamp $DOWNLOAD_UPGRADEABLE_STAMP
 	debug_echo "download upgradable (success)"
 	debug_echo "download upgradable (success)"

+ 46 - 9
debian/changelog

@@ -1,11 +1,19 @@
-apt (0.7.23ubuntu1) karmic; urgency=low
+apt (0.7.22.3) UNRELEASED; urgency=low
 
 
+  [ Eugene V. Lyubimkin ]
+  * 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 ]
   [ Michael Vogt ]
-  * merged from the debian-sid bzr branch
-
-  * cmdline/apt-get.cc:
-    - honor APT::Get::Only-Source properly in FindSrc() (thanks to
-      Martin Pitt for reporting the problem)
+  * apt-pkg/pkgcache.cc:
+    - do not set internel "needs-configure" state for packages in 
+      triggers-pending state. dpkg will deal with the trigger and
+      it if does it before we trigger it, dpkg will error out
+      (LP: #414631)
 
 
   [ Matt Zimmerman ]
   [ Matt Zimmerman ]
   * apt-pkg/deb/dpkgpm.cc:
   * apt-pkg/deb/dpkgpm.cc:
@@ -16,7 +24,36 @@ apt (0.7.23ubuntu1) karmic; urgency=low
   * cmdline/apt-get.cc:
   * cmdline/apt-get.cc:
     - typo fix (LP: #370094)
     - typo fix (LP: #370094)
 
 
- -- Matt Zimmerman <mdz@ubuntu.com>  Thu, 06 Aug 2009 16:37:04 +0100
+ -- Michael Vogt <mvo@debian.org>  Wed, 19 Aug 2009 11:14:15 +0200
+
+apt (0.7.22.2) unstable; urgency=low
+
+  * debian/apt.cron.daily:
+    - Make sure that VERBOSE is always set (Closes: #539366)
+    - Script can be disabled by APT::Periodic::Enable=0 (Closes: #485476)
+    - Support using debdelta to download packages (Closes: #532079)
+
+ -- Julian Andres Klode <jak@debian.org>  Thu, 06 Aug 2009 12:17:19 +0200
+
+apt (0.7.22.1) unstable; urgency=low
+
+  [ Michael Vogt ]
+  * cmdline/apt-get.cc:
+    - honor APT::Get::Only-Source properly in FindSrc() (thanks to
+      Martin Pitt for reporting the problem), also Closes: #535362.
+
+  [ Julian Andres Klode ]
+  * apt-pkg/contrib/mmap.cc:
+    - Fix FTBFS on GNU/kFreeBSD by disabling DynamicMMap::Grow() on
+      non-Linux architectures as it uses mremap (Closes: #539742).
+  * apt-pkg/sourcelist.cc:
+    - Only warn about missing sources.list if there is no sources.list.d
+      and vice versa as only one of them is needed (Closes: #539731).
+  * debian/control:
+    - Add myself to Uploaders.
+    - Increase Standards-Version to 3.8.2.0.
+
+ -- Julian Andres Klode <jak@debian.org>  Mon, 03 Aug 2009 12:48:31 +0200
 
 
 apt (0.7.22) unstable; urgency=low
 apt (0.7.22) unstable; urgency=low
 
 
@@ -135,7 +172,7 @@ apt (0.7.22) unstable; urgency=low
   [ Osamu Aoki ]
   [ Osamu Aoki ]
   * Updated cron script to support backups by hardlinks and 
   * Updated cron script to support backups by hardlinks and 
     verbose levels.  All features turned off by default. 
     verbose levels.  All features turned off by default. 
-  * Added more error handlings.  Closes: #438803, #462734, #454989, 
+  * Added more error handlings.  Closes: #438803, #462734, #454989
   * Documented all cron script related configuration items in 
   * Documented all cron script related configuration items in 
     configure-index.
     configure-index.
 
 
@@ -373,7 +410,7 @@ apt (0.7.20) unstable; urgency=low
   * buildlib/config.{sub,guess}:
   * buildlib/config.{sub,guess}:
     - Renewed. This fixes lintian errors.
     - Renewed. This fixes lintian errors.
   * doc/apt.conf.5.xml, debian/apt-transport-https:
   * doc/apt.conf.5.xml, debian/apt-transport-https:
-    - Documented briefly 'APT::https' group of options. (Closes: #507398)
+    - Documented briefly 'Acquire::https' group of options. (Closes: #507398)
     - Applied patch from Daniel Burrows to document 'Debug' group of options.
     - Applied patch from Daniel Burrows to document 'Debug' group of options.
       (Closes: #457265)
       (Closes: #457265)
     - Mentioned 'APT::Periodic' and 'APT::Archives' groups of options.
     - Mentioned 'APT::Periodic' and 'APT::Archives' groups of options.

+ 2 - 3
debian/control

@@ -5,10 +5,9 @@ Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
 XSBC-Original-Maintainer: APT Development Team <deity@lists.debian.org>
 XSBC-Original-Maintainer: APT Development Team <deity@lists.debian.org>
 Uploaders: Michael Vogt <mvo@debian.org>, Otavio Salvador <otavio@debian.org>,
 Uploaders: Michael Vogt <mvo@debian.org>, Otavio Salvador <otavio@debian.org>,
  Christian Perrier <bubulle@debian.org>, Daniel Burrows <dburrows@debian.org>,
  Christian Perrier <bubulle@debian.org>, Daniel Burrows <dburrows@debian.org>,
- Luca Bruno <lethalman88@gmail.com>
-Standards-Version: 3.8.1.0
+ Luca Bruno <lethalman88@gmail.com>, Julian Andres Klode <jak@debian.org>
+Standards-Version: 3.8.2.0
 Build-Depends: debhelper (>= 5.0), libdb-dev, gettext (>= 0.12), libcurl4-gnutls-dev | libcurl3-gnutls-dev (>= 7.15.5), debiandoc-sgml, docbook-utils (>= 0.6.12), xsltproc, docbook-xsl, xmlto, intltool
 Build-Depends: debhelper (>= 5.0), libdb-dev, gettext (>= 0.12), libcurl4-gnutls-dev | libcurl3-gnutls-dev (>= 7.15.5), debiandoc-sgml, docbook-utils (>= 0.6.12), xsltproc, docbook-xsl, xmlto, intltool
-Vcs-Bzr: http://code.launchpad.net/~ubuntu-core-dev/apt/ubuntu
 
 
 Package: apt
 Package: apt
 Architecture: any
 Architecture: any

+ 10 - 5
doc/apt.conf.5.xml

@@ -203,8 +203,9 @@ DPkg::Pre-Install-Pkgs {"/usr/sbin/dpkg-preconfigure --apt";};
      standard form of <literal>http://[[user][:pass]@]host[:port]/</literal>. Per 
      standard form of <literal>http://[[user][:pass]@]host[:port]/</literal>. Per 
      host proxies can also be specified by using the form 
      host proxies can also be specified by using the form 
      <literal>http::Proxy::&lt;host&gt;</literal> with the special keyword <literal>DIRECT</literal> 
      <literal>http::Proxy::&lt;host&gt;</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 
      <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 
      proxy caches. <literal>No-Cache</literal> tells the proxy to not use its cached 
@@ -252,9 +253,13 @@ DPkg::Pre-Install-Pkgs {"/usr/sbin/dpkg-preconfigure --apt";};
 	 </para></listitem></varlistentry>
 	 </para></listitem></varlistentry>
 
 
      <varlistentry><term>ftp</term>
      <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::&lt;host&gt;</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 
      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 
      configuration file. This entry specifies the commands to send to tell 
      the proxy server what to connect to. Please see 
      the proxy server what to connect to. Please see 

+ 19 - 14
methods/ftp.cc

@@ -112,23 +112,28 @@ bool FTPConn::Open(pkgAcqMethod *Owner)
    Close();
    Close();
    
    
    // Determine the proxy setting
    // 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
    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
    // Parse no_proxy, a , separated list of domains
    if (getenv("no_proxy") != 0)
    if (getenv("no_proxy") != 0)
    {
    {

+ 18 - 13
methods/http.cc

@@ -311,22 +311,27 @@ bool ServerState::Open()
    Persistent = true;
    Persistent = true;
    
    
    // Determine the proxy setting
    // 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
    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
    // Parse no_proxy, a , separated list of domains
    if (getenv("no_proxy") != 0)
    if (getenv("no_proxy") != 0)

+ 19 - 12
methods/https.cc

@@ -61,19 +61,26 @@ void HttpsMethod::SetupProxy()
    URI ServerName = Queue->Uri;
    URI ServerName = Queue->Uri;
 
 
    // Determine the proxy setting
    // 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
    // Parse no_proxy, a , separated list of domains