Bug#437150: doesn't reset curl options between files or timestamp downloaded files
Package: apt-transport-https
Version: 0.7.6
Severity: normal
The following patch address two problems in the apt https method:
1. the curl options aren't reset between files, causing the previous files
settings to be used for the next, which can be a problem if the setting was
a lastmodified or range request.
2. Downloaded files aren't set to the time of the remote server (if available).
This breaks 304 support compared to the http method, as the files always have
the last downloaded time, rather than the last time from the web server.
This patch is against bzr revno 1517 of methods/https.cc
--- /home/rmurray/aptbzr/methods/https.cc 2007-08-09 20:32:36.707623733 -0700
+++ /home/rmurray/https.cc 2007-08-10 10:51:54.015466148 -0700
@@ -115,6 +115,7 @@
// - error checking/reporting
// - more debug options? (CURLOPT_DEBUGFUNCTION?)
+ curl_easy_reset(curl);
SetupProxy();
// callbacks
@@ -125,6 +126,7 @@
curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, this);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, false);
curl_easy_setopt(curl, CURLOPT_FAILONERROR, true);
+ curl_easy_setopt(curl, CURLOPT_FILETIME, true);
// FIXME: https: offer various options of verification
bool peer_verify = _config->FindB("Acquire::https::Verify-Peer", false);
@@ -202,6 +204,9 @@
CURLcode success = curl_easy_perform(curl);
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &curl_responsecode);
+ long curl_servdate;
+ curl_easy_getinfo(curl, CURLINFO_FILETIME, &curl_servdate);
+
// cleanup
if(success != 0)
{
@@ -215,6 +220,14 @@
if (Res.Size == 0)
Res.Size = File->Size();
+ // Timestamp
+ struct utimbuf UBuf;
+ if (curl_servdate != -1) {
+ UBuf.actime = curl_servdate;
+ UBuf.modtime = curl_servdate;
+ utime(File->Name().c_str(),&UBuf);
+ }
+
// check the downloaded result
struct stat Buf;
if (stat(File->Name().c_str(),&Buf) == 0)
-- System Information:
Debian Release: lenny/sid
APT prefers unstable
APT policy: (500, 'unstable')
Architecture: i386 (x86_64)
Kernel: Linux 2.6.20.15 (SMP w/4 CPU cores; PREEMPT)
Locale: LANG=en_CA, LC_CTYPE=en_CA (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash
Versions of packages apt-transport-https depends on:
ii apt [libapt-pkg-libc6.6-6-4.4 0.7.6 Advanced front-end for dpkg
ii libc6 2.6.1-1 GNU C Library: Shared libraries
ii libcurl3-gnutls 7.16.4-2 Multi-protocol file transfer libra
ii libgcc1 1:4.2.1-2 GCC support library
ii libstdc++6 4.2.1-2 The GNU Standard C++ Library v3
apt-transport-https recommends no packages.
-- no debconf information
Reply to: