X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/c3279b9d100fb62f412267512458b58dda40f95b..b8c42fc0632dbbe0edb0854cd941a8fc5340a94a:/apt-pkg/acquire-worker.cc?ds=sidebyside

diff --git a/apt-pkg/acquire-worker.cc b/apt-pkg/acquire-worker.cc
index 460f59961..4f0b52af9 100644
--- a/apt-pkg/acquire-worker.cc
+++ b/apt-pkg/acquire-worker.cc
@@ -220,6 +220,20 @@ bool pkgAcquire::Worker::RunMessages()
 	 Status = LookupTag(Message,"Message");
 	 break;
 	    
+         // 103 Redirect
+         case 103:
+         {
+            if (Itm == 0)
+            {
+               _error->Error("Method gave invalid 103 Redirect message");
+               break;
+            }
+ 
+            string NewURI = LookupTag(Message,"New-URI",URI.c_str());
+            Itm->URI = NewURI;
+            break;
+         }
+   
 	 // 200 URI Start
 	 case 200:
 	 {
@@ -273,7 +287,9 @@ bool pkgAcquire::Worker::RunMessages()
 	    if(!expectedHash.empty()) 
 	    {
 	       string hashTag = expectedHash.HashType()+"-Hash";
-	       RecivedHash = expectedHash.HashType() + ":" + LookupTag(Message, hashTag.c_str());
+	       string hashSum = LookupTag(Message, hashTag.c_str());
+	       if(!hashSum.empty())
+		  RecivedHash = expectedHash.HashType() + ":" + hashSum;
 	       if(_config->FindB("Debug::pkgAcquire::Auth", false) == true)
 	       {
 		  clog << "201 URI Done: " << Owner->DescURI() << endl
@@ -323,6 +339,7 @@ bool pkgAcquire::Worker::RunMessages()
 	    // set some status
 	    if(LookupTag(Message,"FailReason") == "Timeout" || 
 	       LookupTag(Message,"FailReason") == "TmpResolveFailure" ||
+	       LookupTag(Message,"FailReason") == "ResolveFailure" ||
 	       LookupTag(Message,"FailReason") == "ConnectionRefused") 
 	       Owner->Status = pkgAcquire::Item::StatTransientNetworkError;
 
@@ -510,10 +527,6 @@ bool pkgAcquire::Worker::OutFdReady()
    
    if (Res <= 0)
       return MethodFailure();
-
-   // Hmm.. this should never happen.
-   if (Res < 0)
-      return true;
    
    OutQueue.erase(0,Res);
    if (OutQueue.empty() == true)
@@ -541,7 +554,8 @@ bool pkgAcquire::Worker::MethodFailure()
 {
    _error->Error("Method %s has died unexpectedly!",Access.c_str());
    
-   ExecWait(Process,Access.c_str(),true);
+   // do not reap the child here to show meaningfull error to the user
+   ExecWait(Process,Access.c_str(),false);
    Process = -1;
    close(InFd);
    close(OutFd);