]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/update.cc
close server if parsing of header field failed
[apt.git] / apt-pkg / update.cc
index 0d901eab1f3cca3ff2ca9b0ee96ba3dba64e50e2..f7075c446fa6b048686155327ab167fbcdfd4d81 100644 (file)
@@ -56,26 +56,38 @@ bool AcquireUpdate(pkgAcquire &Fetcher, int const PulseInterval,
    else
       res = Fetcher.Run();
 
    else
       res = Fetcher.Run();
 
-   if (res == pkgAcquire::Failed)
-      return false;
-
-   bool Failed = false;
+   bool const errorsWereReported = (res == pkgAcquire::Failed);
+   bool Failed = errorsWereReported;
    bool TransientNetworkFailure = false;
    bool AllFailed = true;
    for (pkgAcquire::ItemIterator I = Fetcher.ItemsBegin(); 
        I != Fetcher.ItemsEnd(); ++I)
    {
    bool TransientNetworkFailure = false;
    bool AllFailed = true;
    for (pkgAcquire::ItemIterator I = Fetcher.ItemsBegin(); 
        I != Fetcher.ItemsEnd(); ++I)
    {
-      if ((*I)->Status == pkgAcquire::Item::StatDone) {
-        AllFailed = false;
-        continue;
+      switch ((*I)->Status)
+      {
+        case pkgAcquire::Item::StatDone:
+           AllFailed = false;
+           continue;
+        case pkgAcquire::Item::StatTransientNetworkError:
+           TransientNetworkFailure = true;
+           break;
+        case pkgAcquire::Item::StatIdle:
+        case pkgAcquire::Item::StatFetching:
+        case pkgAcquire::Item::StatError:
+        case pkgAcquire::Item::StatAuthError:
+           Failed = true;
+           break;
       }
 
       (*I)->Finished();
 
       }
 
       (*I)->Finished();
 
+      if (errorsWereReported)
+        continue;
+
       ::URI uri((*I)->DescURI());
       uri.User.clear();
       uri.Password.clear();
       ::URI uri((*I)->DescURI());
       uri.User.clear();
       uri.Password.clear();
-      string descUri = string(uri);
+      std::string const descUri = std::string(uri);
       // Show an error for non-transient failures, otherwise only warn
       if ((*I)->Status == pkgAcquire::Item::StatTransientNetworkError)
         _error->Warning(_("Failed to fetch %s  %s"), descUri.c_str(),
       // Show an error for non-transient failures, otherwise only warn
       if ((*I)->Status == pkgAcquire::Item::StatTransientNetworkError)
         _error->Warning(_("Failed to fetch %s  %s"), descUri.c_str(),
@@ -83,15 +95,8 @@ bool AcquireUpdate(pkgAcquire &Fetcher, int const PulseInterval,
       else
         _error->Error(_("Failed to fetch %s  %s"), descUri.c_str(),
               (*I)->ErrorText.c_str());
       else
         _error->Error(_("Failed to fetch %s  %s"), descUri.c_str(),
               (*I)->ErrorText.c_str());
-      if ((*I)->Status == pkgAcquire::Item::StatTransientNetworkError) 
-      {
-        TransientNetworkFailure = true;
-        continue;
-      }
-
-      Failed = true;
    }
    }
-   
+
    // Clean out any old list files
    // Keep "APT::Get::List-Cleanup" name for compatibility, but
    // this is really a global option for the APT library now
    // Clean out any old list files
    // Keep "APT::Get::List-Cleanup" name for compatibility, but
    // this is really a global option for the APT library now
@@ -106,13 +111,14 @@ bool AcquireUpdate(pkgAcquire &Fetcher, int const PulseInterval,
    }
 
    bool Res = true;
    }
 
    bool Res = true;
-   
-   if (TransientNetworkFailure == true)
+
+   if (errorsWereReported == true)
+      Res = false;
+   else if (TransientNetworkFailure == true)
       Res = _error->Warning(_("Some index files failed to download. They have been ignored, or old ones used instead."));
    else if (Failed == true)
       Res = _error->Error(_("Some index files failed to download. They have been ignored, or old ones used instead."));
 
       Res = _error->Warning(_("Some index files failed to download. They have been ignored, or old ones used instead."));
    else if (Failed == true)
       Res = _error->Error(_("Some index files failed to download. They have been ignored, or old ones used instead."));
 
-
    // Run the success scripts if all was fine
    if (RunUpdateScripts == true)
    {
    // Run the success scripts if all was fine
    if (RunUpdateScripts == true)
    {