summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2016-06-29 10:16:14 +0200
committerDavid Kalnischkies <david@kalnischkies.de>2016-06-29 12:22:33 +0200
commit42610b9d5a95ec108b74ffbc6446542cf6b0176a (patch)
tree175d0ec6de097de5a2170ed4771bc2d6a3a53075
parent8e99b22c31eb47d0422e9a69e83dc99bb315ded8 (diff)
if conf unset, don't read / as conf/pref/sources dir
Usually these config options are set to sensible values, but if init isn't run or the user interferes with configuration clearing or similar the options could indeed carry an empty value, which will result in FindDir returning a '/'. That feels kinda wrong, but as a public interface there isn't much we can do about it and instead make it so that we get the special file /dev/null back we know how to deal with in such cases.
-rw-r--r--apt-pkg/init.cc7
-rw-r--r--apt-pkg/policy.cc4
-rw-r--r--apt-pkg/sourcelist.cc9
3 files changed, 11 insertions, 9 deletions
diff --git a/apt-pkg/init.cc b/apt-pkg/init.cc
index 9543ca7e8..fa679e6c6 100644
--- a/apt-pkg/init.cc
+++ b/apt-pkg/init.cc
@@ -15,6 +15,7 @@
#include <apt-pkg/error.h>
#include <apt-pkg/pkgsystem.h>
#include <apt-pkg/configuration.h>
+#include <apt-pkg/strutl.h>
#include <apt-pkg/macros.h>
#include <string.h>
@@ -134,14 +135,14 @@ bool pkgInitConfig(Configuration &Cnf)
}
// Read the configuration parts dir
- std::string Parts = Cnf.FindDir("Dir::Etc::parts");
+ std::string const Parts = Cnf.FindDir("Dir::Etc::parts", "/dev/null");
if (DirectoryExists(Parts) == true)
Res &= ReadConfigDir(Cnf,Parts);
- else
+ else if (APT::String::Endswith(Parts, "/dev/null") == false)
_error->WarningE("DirectoryExists",_("Unable to read %s"),Parts.c_str());
// Read the main config file
- std::string FName = Cnf.FindFile("Dir::Etc::main");
+ std::string const FName = Cnf.FindFile("Dir::Etc::main", "/dev/null");
if (RealFileExists(FName) == true)
Res &= ReadConfigFile(Cnf,FName);
diff --git a/apt-pkg/policy.cc b/apt-pkg/policy.cc
index 2bdd96d8c..ff59fb0ac 100644
--- a/apt-pkg/policy.cc
+++ b/apt-pkg/policy.cc
@@ -307,11 +307,11 @@ APT_PURE signed short pkgPolicy::GetPriority(pkgCache::PkgFileIterator const &Fi
bool ReadPinDir(pkgPolicy &Plcy,string Dir)
{
if (Dir.empty() == true)
- Dir = _config->FindDir("Dir::Etc::PreferencesParts");
+ Dir = _config->FindDir("Dir::Etc::PreferencesParts", "/dev/null");
if (DirectoryExists(Dir) == false)
{
- if (Dir != "/dev/null")
+ if (APT::String::Endswith(Dir, "/dev/null") == false)
_error->WarningE("DirectoryExists",_("Unable to read %s"),Dir.c_str());
return true;
}
diff --git a/apt-pkg/sourcelist.cc b/apt-pkg/sourcelist.cc
index afbf3e665..022aff2fe 100644
--- a/apt-pkg/sourcelist.cc
+++ b/apt-pkg/sourcelist.cc
@@ -311,18 +311,19 @@ bool pkgSourceList::ReadMainList()
Reset();
// CNC:2003-11-28 - Entries in sources.list have priority over
// entries in sources.list.d.
- string Main = _config->FindFile("Dir::Etc::sourcelist");
- string Parts = _config->FindDir("Dir::Etc::sourceparts");
+ string Main = _config->FindFile("Dir::Etc::sourcelist", "/dev/null");
+ string Parts = _config->FindDir("Dir::Etc::sourceparts", "/dev/null");
if (RealFileExists(Main) == true)
Res &= ReadAppend(Main);
- else if (DirectoryExists(Parts) == false)
+ else if (DirectoryExists(Parts) == false && APT::String::Endswith(Parts, "/dev/null") == false)
// Only warn if there are no sources.list.d.
_error->WarningE("DirectoryExists", _("Unable to read %s"), Parts.c_str());
if (DirectoryExists(Parts) == true)
Res &= ReadSourceDir(Parts);
- else if (RealFileExists(Main) == false)
+ else if (Main.empty() == false && RealFileExists(Main) == false &&
+ APT::String::Endswith(Parts, "/dev/null") == false)
// Only warn if there is no sources.list file.
_error->WarningE("RealFileExists", _("Unable to read %s"), Main.c_str());