]> git.saurik.com Git - apt.git/commitdiff
if conf unset, don't read / as conf/pref/sources dir
authorDavid Kalnischkies <david@kalnischkies.de>
Wed, 29 Jun 2016 08:16:14 +0000 (10:16 +0200)
committerDavid Kalnischkies <david@kalnischkies.de>
Wed, 29 Jun 2016 10:22:33 +0000 (12:22 +0200)
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.

apt-pkg/init.cc
apt-pkg/policy.cc
apt-pkg/sourcelist.cc

index 9543ca7e8f29ac74c46a4a6eac949fb6f92de416..fa679e6c62f556c84a0af6cc5481d5f5abebc989 100644 (file)
@@ -15,6 +15,7 @@
 #include <apt-pkg/error.h>
 #include <apt-pkg/pkgsystem.h>
 #include <apt-pkg/configuration.h>
 #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>
 #include <apt-pkg/macros.h>
 
 #include <string.h>
@@ -134,14 +135,14 @@ bool pkgInitConfig(Configuration &Cnf)
    }
 
    // Read the configuration parts dir
    }
 
    // 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);
    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
       _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);
 
    if (RealFileExists(FName) == true)
       Res &= ReadConfigFile(Cnf,FName);
 
index 2bdd96d8c85ec552e113f019116abebb811b5a81..ff59fb0ac6605385e786c93166534fdc46ce8993 100644 (file)
@@ -307,11 +307,11 @@ APT_PURE signed short pkgPolicy::GetPriority(pkgCache::PkgFileIterator const &Fi
 bool ReadPinDir(pkgPolicy &Plcy,string Dir)
 {
    if (Dir.empty() == true)
 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 (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;
    }
         _error->WarningE("DirectoryExists",_("Unable to read %s"),Dir.c_str());
       return true;
    }
index afbf3e665f49aa616611dc5d6a2103b1291c6737..022aff2fe512d054238763bf9567a5bb02a84482 100644 (file)
@@ -311,18 +311,19 @@ bool pkgSourceList::ReadMainList()
    Reset();
    // CNC:2003-11-28 - Entries in sources.list have priority over
    //                  entries in sources.list.d.
    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);
    
    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);
       // 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());
 
       // Only warn if there is no sources.list file.
       _error->WarningE("RealFileExists", _("Unable to read %s"), Main.c_str());