Преглед изворни кода

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.
David Kalnischkies пре 10 година
родитељ
комит
42610b9d5a
3 измењених фајлова са 11 додато и 9 уклоњено
  1. 4 3
      apt-pkg/init.cc
  2. 2 2
      apt-pkg/policy.cc
  3. 5 4
      apt-pkg/sourcelist.cc

+ 4 - 3
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);
 

+ 2 - 2
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;
    }

+ 5 - 4
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());