]> git.saurik.com Git - apt.git/commitdiff
merged from the jackyf-devel branch
authorMichael Vogt <michael.vogt@ubuntu.com>
Wed, 19 Aug 2009 09:27:00 +0000 (11:27 +0200)
committerMichael Vogt <michael.vogt@ubuntu.com>
Wed, 19 Aug 2009 09:27:00 +0000 (11:27 +0200)
1  2 
configure.in
debian/NEWS
debian/changelog
doc/apt.conf.5.xml
methods/http.cc
methods/https.cc

diff --combined configure.in
index 9131e2fbe41a3452228010c1c17cd6ab898eedcb,04d8a4712894adb86fa6bc23e9425695cad49af2..7287b925ae630156f17ad971bee68eeb422a7a68
@@@ -18,7 -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.22.1")
 -AC_DEFINE_UNQUOTED(VERSION,"0.7.20")
++AC_DEFINE_UNQUOTED(VERSION,"0.7.22.3")
  PACKAGE="apt"
  AC_DEFINE_UNQUOTED(PACKAGE,"$PACKAGE")
  AC_SUBST(PACKAGE)
diff --combined debian/NEWS
index 0000000000000000000000000000000000000000,5730fd7c60b8c6a8bbe3ec9443307cf6947b2bfa..19f06793efec9cb295a26547d7c14573ecfef97e
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,27 +1,27 @@@
 -apt (0.7.20) unstable; urgency=low
++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, 18 Dec 2008 00:30:16 +0200
++ -- Eugene V. Lyubimkin <jackyf.devel@gmail.com>  Thu, 19 Aug 2009 11:26:16 +0200
+ apt (0.6.44) unstable; urgency=low
+   * apt-ftparchive --db now uses Berkeley DB_BTREE instead of DB_HASH. 
+     If you use a database created by an older version of apt, delete 
+     it and allow it to be recreated the next time.
+  -- Michael Vogt <mvo@debian.org>  Wed, 26 Apr 2006 12:57:53 +0200
+ apt (0.5.25) unstable; urgency=low
+   * apt-ftparchive --db now uses Berkeley DB version 4.2.  If used with a
+     database created by an older version of apt, an attempt will be made
+     to upgrade the database, but this may not work in all cases.  If your
+     database is not automatically upgraded, delete it and allow it to be
+     recreated the next time.
+  -- Matt Zimmerman <mdz@debian.org>  Sat,  8 May 2004 12:38:07 -0700
diff --combined debian/changelog
index 2d3446d48a5bfa24585a877b77e5034f7cb8e89a,758d7a4bd84005ccaf15ea1ab50b2cf1086db94b..2131b807760848e556f823026f8764c92d8a96f5
++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 <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
 +
 +  [ Christian Perrier ]
 +  * Documentation translations:
 +    - Fix a typo in apt-get(8) French translation. Closes: #525043
 +      Thanks to Guillaume Delacour for spotting it.
 +    - Updated apt.conf(5) manpgae French translation.
 +      Thanks to Aurélien Couderc.
 +  * Translations:
 +    - fr.po
 +    - sk.po. Closes: #525857 
 +    - ru.po. Closes: #526816
 +    - eu.po. Closes: #528985
 +    - zh_CN.po. Closes: #531390
 +    - fr.po
 +    - it.po. Closes: #531758
 +    - ca.po. Closes: #531921
 +    - de.po. Closes: #536430
 +  * Added translations
 +    - ast.po (Asturian by Marcos Alvareez Costales).
 +      Closes: #529007, #529730, #535328
 +  
 +  [ David Kalnischkies ]
 +  * [ABI break] support '#' in apt.conf and /etc/apt/preferences
 +    (closes: #189866)
 +  * [ABI break] Allow pinning by codename (closes: #97564)
 +  * support running "--simulate" as user
 +  * add depth information to the debug output and show what depends
 +    type triggers a autoinst (closes: #458389)
 +  * add Debug::pkgDepCache::Marker with more detailed debug output 
 +    (closes: #87520)
 +  * add Debug::pkgProblemResolver::ShowScores and make the scores
 +    adjustable
 +  * do not write state file in simulate mode (closes: #433007)
 +  * add hook for MarkInstall and MarkDelete (closes: #470035)
 +  * fix typo in apt-pkg/acquire.cc which prevents Dl-Limit to work
 +    correctly when downloading from multiple sites (Closes: #534752)
 +  * add the various foldmarkers in apt-pkg & cmdline (no code change)
 +  * versions with a pin of -1 shouldn't be a candidate (Closes: #355237)
 +  * prefer mmap as memory allocator in MMap instead of a static char
 +    array which can (at least in theory) grow dynamic
 +  * eliminate (hopefully all) segfaults in pkgcachegen.cc and mmap.cc
 +    which can arise if cache doesn't fit into the mmap (Closes: #535218)
 +  * display warnings instead of errors if the parts dirs doesn't exist
 +
 +  [ Michael Vogt ]
 +  * honor the dpkg hold state in new Marker hooks (closes: #64141)
 +  * debian/apt.cron.daily:
 +    - if the timestamp is too far in the future, delete it
 +  * apt-pkg/acquire.cc:
 +    - make the max pipeline depth of the acquire queue configurable
 +      via Acquire::Max-Pipeline-Depth
 +  * apt-pkg/deb/dpkgpm.cc:
 +    - add Dpkg::UseIoNice boolean option to run dpkg with ionice -c3
 +      (off by default)
 +    - send "dpkg-exec" message on the status fd when dpkg is run
 +    - provide DPkg::Chroot-Directory config option (useful for testing)
 +    - fix potential hang when in a backgroud process group
 +  * apt-pkg/algorithms.cc:
 +    - consider recommends when making the scores for the problem 
 +      resolver
 +  * apt-pkg/acquire-worker.cc:
 +    - show error details of failed methods
 +  * apt-pkg/contrib/fileutl.cc:
 +    - if a process aborts with signal, show signal number
 +  * methods/http.cc:
 +    - ignore SIGPIPE, we deal with EPIPE from write in 
 +      HttpMethod::ServerDie() (LP: #385144)
 +  * Only run Download-Upgradable and Unattended-Upgrades if the initial
 +    update was successful Closes: #341970
 +  * apt-pkg/indexcopy.cc:
 +    - support having CDs with no Packages file (just a Packages.gz)
 +      by not forcing a verification on non-existing files
 +     (LP: #255545)
 +    - remove the gettext from a string that consists entirely 
 +      of variables (LP: #56792)
 +  * apt-pkg/cacheiterators.h:
 +    - add missing checks for Owner == 0 in end()
 +  * apt-pkg/indexrecords.cc:
 +    - fix some i18n issues
 +  * apt-pkg/contrib/strutl.h:
 +    - add new strprintf() function to make i18n strings easier
 +    - fix compiler warning
 +  * apt-pkg/deb/debsystem.cc:
 +    - make strings i18n able 
 +  * fix problematic use of tolower() when calculating the version 
 +    hash by using locale independant tolower_ascii() function. 
 +    Thanks to M. Vefa Bicakci (LP: #80248)
 +  * build fixes for g++-4.4
 +  * cmdline/apt-mark:
 +    - add "showauto" option to show automatically installed packages
 +  * document --install-recommends and --no-install-recommends
 +    (thanks to Dereck Wonnacott, LP: #126180)
 +  * doc/apt.conf.5.xml:
 +    - merged patch from Aurélien Couderc to improve the text
 +      (thanks!)
 +  * [ABI] merged the libudev-dlopen branch, this allows to pass
 +    "apt-udev-auto" to Acquire::Cdrom::mount and the cdrom method will  
 +    dynamically find/mount the cdrom device (if libhal is available)
 +
 +  [ Julian Andres Klode ]
 +  * apt-pkg/contrib/configuration.cc: Fix a small memory leak in
 +    ReadConfigFile.
 +  * Introduce support for the Enhances field. (Closes: #137583) 
 +  * Support /etc/apt/preferences.d, by adding ReadPinDir() (Closes: #535512)
 +  * configure-index: document Dir::Etc::SourceParts and some other options
 +    (Closes: #459605)
 +  * Remove Eugene V. Lyubimkin from uploaders as requested.
 +  * apt-pkg/contrib/hashes.cc, apt-pkg/contrib/md5.cc:
 +    - Support reading until EOF if Size=0 to match behaviour of
 +      SHA1Summation and SHA256Summation
 +
 +  [ Osamu Aoki ]
 +  * Updated cron script to support backups by hardlinks and 
 +    verbose levels.  All features turned off by default. 
 +  * Added more error handlings.  Closes: #438803, #462734, #454989
 +  * Documented all cron script related configuration items in 
 +    configure-index.
 +
 +  [ Dereck Wonnacott ]
 +  * apt-ftparchive might write corrupt Release files (LP: #46439)
 +  * Apply --important option to apt-cache depends (LP: #16947) 
 +
 +  [ Otavio Salvador ]
 +  * Apply patch from Sami Liedes <sliedes@cc.hut.fi> to reduce the
 +    number of times we call progress bar updating and debugging
 +    configuration settings.
 +  * Apply patch from Sami Liedes <sliedes@cc.hut.fi> to avoid unecessary
 +    temporary allocations.
 +
 + -- Michael Vogt <mvo@debian.org>  Wed, 29 Jul 2009 19:16:22 +0200
 +
 +apt (0.7.21) unstable; urgency=low
 +
 +  [ Christian Perrier ]
 +  * Translations:
 +    - bg.po. Closes: #513211
 +    - zh_TW.po. Closes: #513311
 +    - nb.po. Closes: #513843
 +    - fr.po. Closes: #520430
 +    - sv.po. Closes: #518070
 +    - sk.po. Closes: #520403
 +    - it.po. Closes: #522222
 +    - sk.po. Closes: #520403
 +  
 +  [ Jamie Strandboge ]
 +  * apt.cron.daily: catch invalid dates due to DST time changes
 +    in the stamp files
 +
 +  [ Michael Vogt ]
 +  * methods/gpgv.cc:
 +    - properly check for expired and revoked keys (closes: #433091)
 +  * apt-pkg/contrib/strutl.cc:
 +    - fix TimeToStr i18n (LP: #289807)
 +  * [ABI break] merge support for http redirects, thanks to
 +    Jeff Licquia and Anthony Towns
 +  * [ABI break] use int for the package IDs (thanks to Steve Cotton)
 +  * apt-pkg/pkgcache.cc:
 +    - do not run "dpkg --configure pkg" if pkg is in trigger-awaited
 +      state (LP: #322955)
 +  * methods/https.cc:
 +    - add Acquire::https::AllowRedirect support
 +  * Clarify the --help for 'purge' (LP: #243948)
 +  * cmdline/apt-get.cc
 +    - fix "apt-get source pkg" if there is a binary package and
 +      a source package of the same name but from different 
 +      packages (LP: #330103)
 +
 +  [ Colin Watson ]
 +  * cmdline/acqprogress.cc:
 +    - Call pkgAcquireStatus::Pulse even if quiet, so that we still get
 +      dlstatus messages on the status-fd (LP: #290234).
 +
 + -- Michael Vogt <mvo@debian.org>  Tue, 14 Apr 2009 14:12:51 +0200
 +
 +apt (0.7.20.2) unstable; urgency=medium
 +
 +  [ Eugene V. Lyubimkin ]
 +  * Urgency set to medium due to RC bug fix.
 +  * doc/apt.ent, apt-get.8.xml:
 +    - Fix invalid XML entities. (Closes: #514402)
 +
 + -- Eugene V. Lyubimkin <jackyf.devel@gmail.com>  Sat, 07 Feb 2009 16:48:21 +0200
 +
 +apt (0.7.20.1) unstable; urgency=low
 +
 +  [ Michael Vogt ]
 +  * apt-pkg/pkgcachegen.cc:
 +    - fix apt-cache search for localized description 
 +      (closes: #512110)
 +  
 +  [ Christian Perrier ]
 +  * Translations:
 +    - fr.po: fix spelling error to "défectueux". Thanks to Thomas Péteul.
 +
 + -- Michael Vogt <mvo@debian.org>  Tue, 20 Jan 2009 09:35:05 +0100
 +
  apt (0.7.20) unstable; urgency=low
  
    [ Eugene V. Lyubimkin ]
    * buildlib/config.{sub,guess}:
      - Renewed. This fixes lintian errors.
    * 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.
        (Closes: #457265)
      - 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)
 +  * doc/examples/sources.list:
 +    - Removed obsolete commented non-us deb-src entry, replaced it with
 +      'deb-src security.debian.org' one. (Closes: #411298)
 +  * apt-pkg/contrib/mmap.cc:
 +    - Added instruction how to work around MMap error in MMap error message.
 +      (Closes: #385674, 436028)
    * COPYING:
      - Actualized. Removed obsolete Qt section, added GPLv2 clause.
        (Closes: #440049, #509337)
    * Translations:
      - Finnish updated. Closes: #508449 
      - Galician updated. Closes: #509151
 -
 - -- Eugene V. Lyubimkin <jackyf.devel@gmail.com>  Mon, 15 Dec 2008 23:48:46 +0200
 -
 -apt (0.7.20~exp2) unstable; urgency=low
 -
 -  [ Eugene V. Lyubimkin ]
 -  * doc/examples/sources.list:
 -    - Removed obsolete commented non-us deb-src entry, replaced it with
 -      'deb-src security.debian.org' one. (Closes: #411298)
 -  * apt-pkg/contrib/mmap.cc:
 -    - Added instruction how to work around MMap error in MMap error message.
 -      (Closes: #385674, 436028)
 -
 -  [ Christian Perrier ]
 -  * Translations:
 +    - Catalan updated. Closes: #509375
 +    - Vietnamese updated. Closes: #509422
 +    - Traditional Chinese added. Closes: #510664
      - French corrected (remove awful use of first person) 
  
 - -- Michael Vogt <mvo@debian.org>  Tue, 02 Dec 2008 20:30:14 +0100
 + -- Michael Vogt <mvo@debian.org>  Mon, 05 Jan 2009 08:59:20 +0100
  
  apt (0.7.19) unstable; urgency=low
  
        is a request to install only one package and it is not installable.
        (Closes: #419521)
  
 -
    [ Michael Vogt ]
      - fix SIGHUP handling (closes: #463030)
  
diff --combined doc/apt.conf.5.xml
index 2b2430c8353b98bfa698f6290eb217190d6e5ae3,4d9e708a875d0e33b160097e398e0f3d90fed2f6..1fe980d285309e5464ad907b56ab4f055600fc57
@@@ -71,7 -71,7 +71,7 @@@ APT 
  </programlisting></informalexample>
  
     <para>with newlines placed to make it more readable. Lists can be created by 
 -   opening a scope and including a single word enclosed in quotes followed by a 
 +   opening a scope and including a single string enclosed in quotes followed by a
     semicolon. Multiple entries can be included, each separated by a semicolon.</para>
  
  <informalexample><programlisting>   
@@@ -88,8 -88,7 +88,8 @@@ DPkg::Pre-Install-Pkgs {"/usr/sbin/dpkg
     <para>Two specials are allowed, <literal>#include</literal> and <literal>#clear</literal> 
     <literal>#include</literal> will include the given file, unless the filename
     ends in a slash, then the whole directory is included.  
 -   <literal>#clear</literal> is used to erase a list of names.</para>
 +   <literal>#clear</literal> is used to erase a part of the configuration tree. The
 +   specified element and all its descendents are erased.</para>
  
     <para>All of the APT tools take a -o option which allows an arbitrary configuration 
     directive to be specified on the command line. The syntax is a full option
       
       <varlistentry><term>Default-Release</term>
         <listitem><para>Default release to install packages from if more than one
 -       version available. Contains release name or release version. Examples: 'stable', 'testing', 'unstable', '4.0', '5.0*'. Release codenames ('etch', 'lenny' etc.) are not allowed now. See also &apt-preferences;.</para></listitem>
 +       version available. Contains release name, codename or release version. Examples: 'stable', 'testing', 'unstable', 'lenny', 'squeeze', '4.0', '5.0*'. See also &apt-preferences;.</para></listitem>
       </varlistentry>
       
       <varlistentry><term>Ignore-Hold</term>
  
     <variablelist>
       <varlistentry><term>PDiffs</term>
 -       <listitem><para>Try do download deltas called <literal>PDiffs</literal> for
 +       <listitem><para>Try to download deltas called <literal>PDiffs</literal> for
         Packages or Sources files instead of downloading whole ones. True
         by default.</para></listitem>
       </varlistentry>
       standard form of <literal>http://[[user][:pass]@]host[:port]/</literal>. Per 
       host proxies can also be specified by using the form 
       <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 
       proxy caches. <literal>No-Cache</literal> tells the proxy to not use its cached 
         </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::&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 
       configuration file. This entry specifies the commands to send to tell 
       the proxy server what to connect to. Please see 
         </listitem>
       </varlistentry>
  
 +     <varlistentry>
 +       <term><literal>Debug::pkgDepCache::Marker</literal></term>
 +       <listitem>
 +        <para>
 +           Generate debug messages describing which package is marked
 +          as keep/install/remove while the ProblemResolver does his work.
 +          Each addition or deletion may trigger additional actions;
 +          they are shown indented two additional space under the original entry.
 +          The format for each line is <literal>MarkKeep</literal>,
 +          <literal>MarkDelete</literal> or <literal>MarkInstall</literal> followed by
 +          <literal>package-name &lt;a.b.c -&gt; d.e.f | x.y.z&gt; (section)</literal>
 +          where <literal>a.b.c</literal> is the current version of the package,
 +          <literal>d.e.f</literal> is the version considered for installation and
 +          <literal>x.y.z</literal> is a newer version, but not considered for installation
 +          (because of a low pin score). The later two can be omitted if there is none or if
 +          it is the same version as the installed.
 +          <literal>section</literal> is the name of the section the package appears in.
 +        </para>
 +       </listitem>
 +     </varlistentry>
 +
       <!-- Question: why doesn't this do anything?  The code says it should. -->
       <varlistentry>
         <term><literal>Debug::pkgInitConfig</literal></term>
         <listitem>
         <para>
 -         Dump the default configuration to standard output on
 +         Dump the default configuration to standard error on
           startup.
         </para>
         </listitem>
         </listitem>
       </varlistentry>
  
 +     <varlistentry>
 +       <term><literal>Debug::pkgProblemResolver::ShowScores</literal></term>
 +       <listitem>
 +        <para>
 +          Display a list of all installed packages with their calculated score
 +          used by the pkgProblemResolver. The description of the package
 +          is the same as described in <literal>Debug::pkgDepCache::Marker</literal>
 +        </para>
 +       </listitem>
 +     </varlistentry>
 +
       <varlistentry>
         <term><literal>Debug::sourceList</literal></term>
  
         </listitem>
       </varlistentry>
  
 +<!-- 2009/07/11 Currently used nowhere. The corresponding code
 +is commented.
       <varlistentry>
         <term><literal>Debug::Vendor</literal></term>
  
         </para>
         </listitem>
       </varlistentry>
 +-->
     </variablelist>
   </refsect1>
   
diff --combined methods/http.cc
index 006e89394a5282e7bc7c0125a638030fe41a5627,5d18b3adca3e2b586a6f366f5f598175da8df851..1eba0f279694119a8823405962963d3c3b81c279
@@@ -39,7 -39,6 +39,7 @@@
  #include <errno.h>
  #include <string.h>
  #include <iostream>
 +#include <map>
  #include <apti18n.h>
  
  // Internet stuff
@@@ -58,7 -57,6 +58,7 @@@ int HttpMethod::FailFd = -1
  time_t HttpMethod::FailTime = 0;
  unsigned long PipelineDepth = 10;
  unsigned long TimeOut = 120;
 +bool AllowRedirect = false;
  bool Debug = false;
  URI Proxy;
  
@@@ -311,22 -309,27 +311,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)
@@@ -630,12 -633,6 +635,12 @@@ bool ServerState::HeaderLine(string Lin
        return true;
     }
  
 +   if (stringcasecmp(Tag,"Location:") == 0)
 +   {
 +      Location = Val;
 +      return true;
 +   }
 +
     return true;
  }
                                                                        /*}}}*/
@@@ -908,9 -905,7 +913,9 @@@ bool HttpMethod::ServerDie(ServerState 
       1 - IMS hit
       3 - Unrecoverable error 
       4 - Error with error content page
 -     5 - Unrecoverable non-server error (close the connection) */
 +     5 - Unrecoverable non-server error (close the connection) 
 +     6 - Try again with a new or changed URI
 + */
  int HttpMethod::DealWithHeaders(FetchResult &Res,ServerState *Srv)
  {
     // Not Modified
        return 1;
     }
     
 +   /* Redirect
 +    *
 +    * Note that it is only OK for us to treat all redirection the same
 +    * because we *always* use GET, not other HTTP methods.  There are
 +    * three redirection codes for which it is not appropriate that we
 +    * redirect.  Pass on those codes so the error handling kicks in.
 +    */
 +   if (AllowRedirect
 +       && (Srv->Result > 300 && Srv->Result < 400)
 +       && (Srv->Result != 300       // Multiple Choices
 +           && Srv->Result != 304    // Not Modified
 +           && Srv->Result != 306))  // (Not part of HTTP/1.1, reserved)
 +   {
 +      if (!Srv->Location.empty())
 +      {
 +         NextURI = Srv->Location;
 +         return 6;
 +      }
 +      /* else pass through for error message */
 +   }
 + 
     /* We have a reply we dont handle. This should indicate a perm server
        failure */
     if (Srv->Result < 200 || Srv->Result >= 300)
@@@ -1057,7 -1031,6 +1062,7 @@@ bool HttpMethod::Configuration(string M
     if (pkgAcqMethod::Configuration(Message) == false)
        return false;
     
 +   AllowRedirect = _config->FindB("Acquire::http::AllowRedirect",true);
     TimeOut = _config->FindI("Acquire::http::Timeout",TimeOut);
     PipelineDepth = _config->FindI("Acquire::http::Pipeline-Depth",
                                  PipelineDepth);
  /* */
  int HttpMethod::Loop()
  {
 +   typedef vector<string> StringVector;
 +   typedef vector<string>::iterator StringVectorIterator;
 +   map<string, StringVector> Redirected;
 +
     signal(SIGTERM,SigTerm);
     signal(SIGINT,SigTerm);
     
            break;
         }
         
 +         // Try again with a new URL
 +         case 6:
 +         {
 +            // Clear rest of response if there is content
 +            if (Server->HaveContent)
 +            {
 +               File = new FileFd("/dev/null",FileFd::WriteExists);
 +               Server->RunData();
 +               delete File;
 +               File = 0;
 +            }
 +
 +            /* Detect redirect loops.  No more redirects are allowed
 +               after the same URI is seen twice in a queue item. */
 +            StringVector &R = Redirected[Queue->DestFile];
 +            bool StopRedirects = false;
 +            if (R.size() == 0)
 +               R.push_back(Queue->Uri);
 +            else if (R[0] == "STOP" || R.size() > 10)
 +               StopRedirects = true;
 +            else
 +            {
 +               for (StringVectorIterator I = R.begin(); I != R.end(); I++)
 +                  if (Queue->Uri == *I)
 +                  {
 +                     R[0] = "STOP";
 +                     break;
 +                  }
 + 
 +               R.push_back(Queue->Uri);
 +            }
 + 
 +            if (StopRedirects == false)
 +               Redirect(NextURI);
 +            else
 +               Fail();
 + 
 +            break;
 +         }
 +
         default:
         Fail(_("Internal error"));
         break;
  int main()
  {
     setlocale(LC_ALL, "");
 +   // ignore SIGPIPE, this can happen on write() if the socket
 +   // closes the connection (this is dealt with via ServerDie())
 +   signal(SIGPIPE, SIG_IGN);
  
     HttpMethod Mth;
 -   
     return Mth.Loop();
  }
  
diff --combined methods/https.cc
index 8bf44b52a995b994f6ba252aa386d1d39d171859,728869fa255797d54a650f9b7c9e09be53956910..37d93e308dcf11452b0685432317d2d2699c5287
@@@ -61,19 -61,26 +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
@@@ -208,11 -215,6 +215,11 @@@ bool HttpsMethod::Fetch(FetchItem *Itm
     curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeout);
     curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, timeout);
  
 +   // set redirect options and default to 10 redirects
 +   bool AllowRedirect = _config->FindI("Acquire::https::AllowRedirect", true);
 +   curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, AllowRedirect);
 +   curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 10);
 +
     // debug
     if(_config->FindB("Debug::Acquire::https", false))
        curl_easy_setopt(curl, CURLOPT_VERBOSE, true);
     // cleanup
     if(success != 0) 
     {
 -      unlink(File->Name().c_str());
        _error->Error("%s", curl_errorstr);
        Fail();
        return true;