]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/acquire-item.cc
merged fixes from lp:~mvo/apt/mvo
[apt.git] / apt-pkg / acquire-item.cc
index 6df915d8eeea893e4ee5df6464bf83fb6e2ed822..566f5160616ff0aa7c02ab599d5a7092816fcf89 100644 (file)
@@ -271,7 +271,7 @@ void pkgAcqSubIndex::Done(string Message,unsigned long Size,string Md5Hash, /*{{
 
    string FinalFile = _config->FindDir("Dir::State::lists")+URItoFileName(Desc.URI);
 
-   /* Downloaded invalid transindex => Error (LP: #346386) (Closes: #195301) */
+   /* Downloaded invalid transindex => Error (LP: #346386) (Closes: #627642) */
    indexRecords SubIndexParser;
    if (FileExists(DestFile) == true && !SubIndexParser.Load(DestFile)) {
       Status = StatError;
@@ -681,17 +681,17 @@ bool pkgAcqIndexDiffs::QueueNextDiff()                                    /*{{{*/
    // remove all patches until the next matching patch is found
    // this requires the Index file to be ordered
    for(vector<DiffInfo>::iterator I=available_patches.begin();
-       available_patches.size() > 0 && 
+       available_patches.empty() == false &&
          I != available_patches.end() &&
-         (*I).sha1 != local_sha1; 
-       I++) 
+         I->sha1 != local_sha1;
+       ++I)
    {
       available_patches.erase(I);
    }
 
    // error checking and falling back if no patch was found
-   if(available_patches.size() == 0) 
-   { 
+   if(available_patches.empty() == true)
+   {
       Failed("", NULL);
       return false;
    }
@@ -756,7 +756,7 @@ void pkgAcqIndexDiffs::Done(string Message,unsigned long Size,string Md5Hash,       /*
       chmod(FinalFile.c_str(),0644);
 
       // see if there is more to download
-      if(available_patches.size() > 0) {
+      if(available_patches.empty() == false) {
         new pkgAcqIndexDiffs(Owner, RealURI, Description, Desc.ShortDesc,
                              ExpectedHash, ServerSha1, available_patches);
         return Finish();
@@ -904,23 +904,26 @@ void pkgAcqIndex::Done(string Message,unsigned long Size,string Hash,
       }
 
       /* Verify the index file for correctness (all indexes must
-       * have a Package field) (LP: #346386) (Closes: #195301) */
+       * have a Package field) (LP: #346386) (Closes: #627642) */
       {
         FileFd fd(DestFile, FileFd::ReadOnly);
         pkgTagSection sec;
         pkgTagFile tag(&fd);
 
-        if (_error->PendingError() || !tag.Step(sec)) {
-           Status = StatError;
-           _error->DumpErrors();
-           Rename(DestFile,DestFile + ".FAILED");
-           return;
-        } else if (!sec.Exists("Package")) {
-           Status = StatError;
-           ErrorText = ("Encountered a section with no Package: header");
-           Rename(DestFile,DestFile + ".FAILED");
-           return;
-        }
+         // Only test for correctness if the file is not empty (empty is ok)
+         if (fd.Size() > 0) {
+            if (_error->PendingError() || !tag.Step(sec)) {
+               Status = StatError;
+               _error->DumpErrors();
+               Rename(DestFile,DestFile + ".FAILED");
+               return;
+            } else if (!sec.Exists("Package")) {
+               Status = StatError;
+               ErrorText = ("Encountered a section with no Package: header");
+               Rename(DestFile,DestFile + ".FAILED");
+               return;
+            }
+         }
       }
        
       // Done, move it into position
@@ -1255,8 +1258,9 @@ void pkgAcqMetaIndex::Done(string Message,unsigned long Size,string Hash, /*{{{*
       if (SigFile == "")
       {
          // There was no signature file, so we are finished.  Download
-         // the indexes without verification.
-         QueueIndexes(false);
+         // the indexes and do only hashsum verification
+         MetaIndexParser->Load(DestFile);
+         QueueIndexes(true);
       }
       else
       {
@@ -1360,7 +1364,7 @@ void pkgAcqMetaIndex::AuthDone(string Message)                            /*{{{*/
 void pkgAcqMetaIndex::QueueIndexes(bool verify)                                /*{{{*/
 {
 #if 0
-   /* Reject invalid, existing Release files (LP: #346386) (Closes: #195301)
+   /* Reject invalid, existing Release files (LP: #346386) (Closes: #627642)
     * FIXME: Disabled; it breaks unsigned repositories without hashes */
    if (!verify && FileExists(DestFile) && !MetaIndexParser->Load(DestFile))
    {
@@ -1371,7 +1375,7 @@ void pkgAcqMetaIndex::QueueIndexes(bool verify)                           /*{{{*/
 #endif
    for (vector <struct IndexTarget*>::const_iterator Target = IndexTargets->begin();
         Target != IndexTargets->end();
-        Target++)
+        ++Target)
    {
       HashString ExpectedIndexHash;
       if (verify)
@@ -1393,6 +1397,7 @@ void pkgAcqMetaIndex::QueueIndexes(bool verify)                           /*{{{*/
            {
               std::cerr << "Queueing: " << (*Target)->URI << std::endl;
               std::cerr << "Expected Hash: " << ExpectedIndexHash.toStr() << std::endl;
+              std::cerr << "For: " << Record->MetaKeyFilename << std::endl;
            }
            if (ExpectedIndexHash.empty() == true && (*Target)->IsOptional() == false)
            {
@@ -1470,8 +1475,10 @@ bool pkgAcqMetaIndex::VerifyVendor(string Message)                       /*{{{*/
         // TRANSLATOR: The first %s is the URL of the bad Release file, the second is
         // the time since then the file is invalid - formated in the same way as in
         // the download progress display (e.g. 7d 3h 42min 1s)
-        return _error->Error(_("Release file expired, ignoring %s (invalid since %s)"),
-                             RealURI.c_str(), TimeToStr(invalid_since).c_str());
+        return _error->Error(
+            _("Release file for %s is expired (invalid since %s). "
+              "Updates for this repository will not be applied."),
+            RealURI.c_str(), TimeToStr(invalid_since).c_str());
    }
 
    if (_config->FindB("Debug::pkgAcquire::Auth", false)) 
@@ -1533,7 +1540,7 @@ void pkgAcqMetaIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf)
         RunScripts("APT::Update::Auth-Failure");
         return;
       } else if (LookupTag(Message,"Message").find("NODATA") != string::npos) {
-        /* Invalid signature file, reject (LP: #346386) (Closes: #195301) */
+        /* Invalid signature file, reject (LP: #346386) (Closes: #627642) */
         _error->Error(_("GPG error: %s: %s"),
                         Desc.Description.c_str(),
                         LookupTag(Message,"Message").c_str());
@@ -1666,7 +1673,7 @@ pkgAcqArchive::pkgAcqArchive(pkgAcquire *Owner,pkgSourceList *Sources,
 
    // check if we have one trusted source for the package. if so, switch
    // to "TrustedOnly" mode
-   for (pkgCache::VerFileIterator i = Version.FileList(); i.end() == false; i++)
+   for (pkgCache::VerFileIterator i = Version.FileList(); i.end() == false; ++i)
    {
       pkgIndexFile *Index;
       if (Sources->FindIndex(i.File(),Index) == false)
@@ -1703,7 +1710,7 @@ pkgAcqArchive::pkgAcqArchive(pkgAcquire *Owner,pkgSourceList *Sources,
 bool pkgAcqArchive::QueueNext()
 {
    string const ForceHash = _config->Find("Acquire::ForceHash");
-   for (; Vf.end() == false; Vf++)
+   for (; Vf.end() == false; ++Vf)
    {
       // Ignore not source sources
       if ((Vf.File()->Flags & pkgCache::Flag::NotSource) != 0)
@@ -1814,7 +1821,7 @@ bool pkgAcqArchive::QueueNext()
       Desc.ShortDesc = Version.ParentPkg().Name();
       QueueURI(Desc);
 
-      Vf++;
+      ++Vf;
       return true;
    }
    return false;
@@ -1888,7 +1895,7 @@ void pkgAcqArchive::Failed(string Message,pkgAcquire::MethodConfig *Cnf)
        StringToBool(LookupTag(Message,"Transient-Failure"),false) == true)
    {
       // Vf = Version.FileList();
-      while (Vf.end() == false) Vf++;
+      while (Vf.end() == false) ++Vf;
       StoreFilename = string();
       Item::Failed(Message,Cnf);
       return;