summaryrefslogtreecommitdiff
path: root/apt-pkg
diff options
context:
space:
mode:
Diffstat (limited to 'apt-pkg')
-rw-r--r--apt-pkg/deb/debsystem.cc7
-rw-r--r--apt-pkg/policy.cc14
2 files changed, 15 insertions, 6 deletions
diff --git a/apt-pkg/deb/debsystem.cc b/apt-pkg/deb/debsystem.cc
index 65a27f72f..9c55e0a6e 100644
--- a/apt-pkg/deb/debsystem.cc
+++ b/apt-pkg/deb/debsystem.cc
@@ -338,6 +338,13 @@ bool debSystem::AddStatusFiles(std::vector<pkgIndexFile *> &List)
if (d->StatusFile == nullptr)
{
auto dpkgstatus = _config->FindFile("Dir::State::status");
+ if (dpkgstatus.empty())
+ return true;
+ // we ignore only if the file doesn't exist, not if it is inaccessible
+ // e.g. due to permissions on parent directories as FileExists would do
+ errno = 0;
+ if (access(dpkgstatus.c_str(), R_OK) != 0 && errno == ENOENT)
+ return true;
_error->PushToStack();
d->StatusFile = new debStatusIndex(std::move(dpkgstatus));
bool const errored = _error->PendingError();
diff --git a/apt-pkg/policy.cc b/apt-pkg/policy.cc
index 5fcc11b66..68b3f5e5f 100644
--- a/apt-pkg/policy.cc
+++ b/apt-pkg/policy.cc
@@ -70,17 +70,19 @@ pkgPolicy::pkgPolicy(pkgCache *Owner) : VerPins(nullptr),
if (DefRel.empty() == false)
{
bool found = false;
- // FIXME: make ExpressionMatches static to use it here easily
- pkgVersionMatch vm("", pkgVersionMatch::None);
for (pkgCache::PkgFileIterator F = Cache->FileBegin(); F != Cache->FileEnd(); ++F)
{
- if (vm.ExpressionMatches(DefRel, F.Archive()) ||
- vm.ExpressionMatches(DefRel, F.Codename()) ||
- vm.ExpressionMatches(DefRel, F.Version()) ||
+ if (pkgVersionMatch::ExpressionMatches(DefRel, F.Archive()) ||
+ pkgVersionMatch::ExpressionMatches(DefRel, F.Codename()) ||
+ pkgVersionMatch::ExpressionMatches(DefRel, F.Version()) ||
(DefRel.length() > 2 && DefRel[1] == '='))
found = true;
}
- if (found == false)
+ // "now" is our internal archive name for the status file,
+ // which we should accept even if we have no status file at the moment
+ if (not found && pkgVersionMatch::ExpressionMatches(DefRel, "now"))
+ found = true;
+ if (not found)
_error->Error(_("The value '%s' is invalid for APT::Default-Release as such a release is not available in the sources"), DefRel.c_str());
else
CreatePin(pkgVersionMatch::Release,"",DefRel,990);