From 5586b8882fda5f099d65a91f362c14c9d7e1b4ac Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sat, 13 Aug 2016 15:55:52 +0200 Subject: default to Dir=/ in dpkg/status file finding magic Seen in cme #833656 if Dir isn't set (yet) we end up later absoluting a path which was supposed to be absolute already, so if Dir is empty we assume it to be '/' instead. In practice this is a bug in the software using libapt, but for maxium compatibility lets explicitly set the default value here to be safe. Reported-By: Paul Wise Inspired-By: Brendan O'Dea Fixes-Regression: 475f75506db48a7fa90711fce4ed129f6a14cc9a Shadows-Bug: #833656 --- apt-pkg/deb/debsystem.cc | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) (limited to 'apt-pkg/deb') diff --git a/apt-pkg/deb/debsystem.cc b/apt-pkg/deb/debsystem.cc index fd702b3c6..f7968ec47 100644 --- a/apt-pkg/deb/debsystem.cc +++ b/apt-pkg/deb/debsystem.cc @@ -184,26 +184,24 @@ pkgPackageManager *debSystem::CreatePM(pkgDepCache *Cache) const // System::Initialize - Setup the configuration space.. /*{{{*/ // --------------------------------------------------------------------- /* These are the Debian specific configuration variables.. */ -static std::string getDpkgStatusLocation(Configuration &Cnf) { +static std::string getDpkgStatusLocation(Configuration const &Cnf) { + Configuration PathCnf; + PathCnf.Set("Dir", Cnf.Find("Dir", "/")); + PathCnf.Set("Dir::State::status", "status"); auto const cnfstatedir = Cnf.Find("Dir::State", "var/lib/apt/"); + // if the state dir ends in apt, replace it with dpkg - + // for the default this gives us the same as the fallback below. + // This can't be a ../dpkg as that would play bad with symlinks std::string statedir; if (APT::String::Endswith(cnfstatedir, "/apt/")) statedir.assign(cnfstatedir, 0, cnfstatedir.length() - 5); else if (APT::String::Endswith(cnfstatedir, "/apt")) statedir.assign(cnfstatedir, 0, cnfstatedir.length() - 4); if (statedir.empty()) - Cnf.Set("Dir::State", "var/lib/dpkg"); + PathCnf.Set("Dir::State", "var/lib/dpkg"); else - Cnf.Set("Dir::State", flCombine(statedir, "dpkg")); - auto const cnfrootdir = Cnf.Find("RootDir"); - if (Cnf.Exists("RootDir") == true) - Cnf.Set("RootDir", ""); - Cnf.Set("Dir::State::status", "status"); - auto const statusfile = Cnf.FindFile("Dir::State::status"); - if (cnfrootdir.empty() == false) - Cnf.Set("RootDir", cnfrootdir); - Cnf.Set("Dir::State", cnfstatedir); - return statusfile; + PathCnf.Set("Dir::State", flCombine(statedir, "dpkg")); + return PathCnf.FindFile("Dir::State::status"); } bool debSystem::Initialize(Configuration &Cnf) { -- cgit v1.2.3 From 8bd823d0a1f7e08ad94a7110bb118f73348133a1 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 16 Aug 2016 20:08:29 +0200 Subject: add --with-source option and Packages/Sources support We support "./foobar.deb" as a way to install a deb file directly. Recently .changes files were added. This highlights a problem as you can't add the changes file without also trying to install all of them. Now, it could also be handy to add entire Packages/Sources files to perhaps get a bunch of packages in without installing them all implicitly. This commit introduces --with-source which allows to add *.deb, *.changes, *.dsc, source-dirs, Packages & Sources files (the later can also be compressed) without also installing them. --- apt-pkg/deb/debindexfile.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'apt-pkg/deb') diff --git a/apt-pkg/deb/debindexfile.cc b/apt-pkg/deb/debindexfile.cc index 6a23b2c00..65bd3e6ee 100644 --- a/apt-pkg/deb/debindexfile.cc +++ b/apt-pkg/deb/debindexfile.cc @@ -80,7 +80,11 @@ debPackagesIndex::debPackagesIndex(IndexTarget const &Target, bool const Trusted std::string debPackagesIndex::ArchiveInfo(pkgCache::VerIterator const &Ver) const { std::string Res = Target.Description; - Res.erase(Target.Description.rfind(' ')); + { + auto const space = Target.Description.rfind(' '); + if (space != std::string::npos) + Res.erase(space); + } Res += " "; Res += Ver.ParentPkg().Name(); -- cgit v1.2.3