]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/indexcopy.cc
merged -r1887..1901 from lp:~donkult/apt/sid
[apt.git] / apt-pkg / indexcopy.cc
index 22ee29697c88b9ded3a41c9eb5ec90116b1fc58c..57c9f95caa8991949530b6b9bfb7f75a3ca74802 100644 (file)
@@ -522,15 +522,24 @@ bool SigVerify::Verify(string prefix, string file, indexRecords *MetaIndex)
 {
    const indexRecords::checkSum *Record = MetaIndex->Lookup(file);
 
+   // we skip non-existing files in the verifcation to support a cdrom
+   // with no Packages file (just a Package.gz), see LP: #255545
+   // (non-existing files are not considered a error)
+   if(!FileExists(prefix+file))
+   {
+      _error->Warning(_("Skipping nonexistent file %s"), string(prefix+file).c_str());
+      return true;
+   }
+
    if (!Record) 
    {
-      _error->Warning("Can't find authentication record for: %s",file.c_str());
+      _error->Warning(_("Can't find authentication record for: %s"), file.c_str());
       return false;
    }
 
    if (!Record->Hash.VerifyFile(prefix+file))
    {
-      _error->Warning("Hash mismatch for: %s",file.c_str());
+      _error->Warning(_("Hash mismatch for: %s"),file.c_str());
       return false;
    }
 
@@ -583,7 +592,10 @@ bool SigVerify::CopyAndVerify(string CDROM,string Name,vector<string> &SigList,
 
       // a Release.gpg without a Release should never happen
       if(!FileExists(*I+"Release"))
+      {
+        delete MetaIndex;
         continue;
+      }
 
 
       // verify the gpg signature of "Release"
@@ -651,6 +663,7 @@ bool SigVerify::CopyAndVerify(string CDROM,string Name,vector<string> &SigList,
         if(!Verify(prefix,*I, MetaIndex)) {
            // something went wrong, don't copy the Release.gpg
            // FIXME: delete any existing gpg file?
+           _error->Discard();
            continue;    
         }
       }