Bladeren bron

* be more clever about I-M-S hits for the Release file and gpg-failures with it, requeue it without i-m-s then

Michael Vogt 20 jaren geleden
bovenliggende
commit
f381d68d3c
3 gewijzigde bestanden met toevoegingen van 27 en 2 verwijderingen
  1. 25 2
      apt-pkg/acquire-item.cc
  2. 1 0
      apt-pkg/acquire-item.h
  3. 1 0
      debian/changelog

+ 25 - 2
apt-pkg/acquire-item.cc

@@ -430,7 +430,7 @@ pkgAcqMetaIndex::pkgAcqMetaIndex(pkgAcquire *Owner,
 				 const vector<struct IndexTarget*>* IndexTargets,
 				 indexRecords* MetaIndexParser) :
    Item(Owner), RealURI(URI), SigFile(SigFile), AuthPass(false),
-   MetaIndexParser(MetaIndexParser), IndexTargets(IndexTargets)
+   MetaIndexParser(MetaIndexParser), IndexTargets(IndexTargets), IMSHit(false)
 {
    DestFile = _config->FindDir("Dir::State::lists") + "partial/";
    DestFile += URItoFileName(URI);
@@ -523,6 +523,9 @@ void pkgAcqMetaIndex::RetrievalDone(string Message)
       return;
    }
 
+   // see if the download was a IMSHit
+   IMSHit = StringToBool(LookupTag(Message,"IMS-Hit"),false);
+
    Complete = true;
 
    string FinalFile = _config->FindDir("Dir::State::lists");
@@ -688,10 +691,30 @@ void pkgAcqMetaIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf)
 {
    if (AuthPass == true)
    {
-      // gpgv method failed
+      // if we fail the authentication but got the file via a IMS-Hit 
+      // this means that the file wasn't downloaded and that it might be
+      // just stale (server problem, proxy etc). we delete what we have
+      // queue it again without i-m-s 
+      // alternatively we could just unlink the file and let the user try again
+      if (IMSHit)
+      {
+	 Complete = false;
+	 Local = false;
+	 AuthPass = false;
+	 unlink(DestFile.c_str());
+
+	 DestFile = _config->FindDir("Dir::State::lists") + "partial/";
+	 DestFile += URItoFileName(RealURI);
+	 Desc.URI = RealURI;
+	 QueueURI(Desc);
+	 return;
+      }
+
+      // gpgv method failed 
       _error->Warning("GPG error: %s: %s",
                       Desc.Description.c_str(),
                       LookupTag(Message,"Message").c_str());
+
    }
 
    // No Release file was present, or verification failed, so fall

+ 1 - 0
apt-pkg/acquire-item.h

@@ -151,6 +151,7 @@ class pkgAcqMetaIndex : public pkgAcquire::Item
    const vector<struct IndexTarget*>* IndexTargets;
    indexRecords* MetaIndexParser;
    bool AuthPass;
+   bool IMSHit; // required to fail gracefully on failures
 
    bool VerifyVendor();
    void RetrievalDone(string Message);

+ 1 - 0
debian/changelog

@@ -15,6 +15,7 @@ apt (0.6.43.1) unstable; urgency=low
   * apt-get source won't download already downloaded files again
     (closes: #79277)
   * share/debian-archive.gpg: new 2006 ftp-archive signing key added
+  * redownload the Release file if IMS-Hit and gpg failure
 
  --