summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apt-pkg/acquire-item.cc3
-rw-r--r--apt-pkg/acquire-worker.cc19
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;