diff options
-rw-r--r-- | apt-pkg/acquire-item.cc | 3 | ||||
-rw-r--r-- | apt-pkg/acquire-worker.cc | 19 |
2 files changed, 22 insertions, 0 deletions
diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index f13d2f6ae..623ea7518 100644 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@ -991,6 +991,9 @@ std::string pkgAcquire::Item::HashSum() const /*{{{*/ /*}}}*/ bool pkgAcquire::Item::IsRedirectionLoop(std::string const &NewURI) /*{{{*/ { + // store can fail due to permission errors and the item will "loop" then + if (APT::String::Startswith(NewURI, "store:")) + return false; if (d->PastRedirections.empty()) { d->PastRedirections.push_back(NewURI); diff --git a/apt-pkg/acquire-worker.cc b/apt-pkg/acquire-worker.cc index aa1a2654e..a4fbc7651 100644 --- a/apt-pkg/acquire-worker.cc +++ b/apt-pkg/acquire-worker.cc @@ -686,6 +686,25 @@ bool pkgAcquire::Worker::QueueItem(pkgAcquire::Queue::QItem *Item) return true; } + if (Item->Owner->IsRedirectionLoop(Item->URI)) + { + std::string const Message = "400 URI Failure" + "\nURI: " + Item->URI + + "\nFilename: " + Item->Owner->DestFile + + "\nFailReason: RedirectionLoop"; + + auto const ItmOwners = Item->Owners; + for (auto &O: ItmOwners) + { + O->Status = pkgAcquire::Item::StatError; + O->Failed(Message, Config); + if (Log != nullptr) + Log->Fail(O->GetItemDesc()); + } + // "queued" successfully, the item just instantly failed + return true; + } + string Message = "600 URI Acquire\n"; Message.reserve(300); Message += "URI: " + Item->URI; |