summaryrefslogtreecommitdiff
path: root/apt-pkg
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2015-12-01 14:09:23 +0100
committerDavid Kalnischkies <david@kalnischkies.de>2015-12-01 14:26:05 +0100
commitf359b7e8c03884cd9f097d4b3ff8b8b8be8053ba (patch)
treed51eb4a58ad3223325551b84b88e3e16779f7dba /apt-pkg
parent7d19ee92f2368a40e739cb27d22d6d28f37ebf45 (diff)
require explicit paths to dsc/control as we do for deb files
Otherwise a user is subject to unexpected content-injection depending on which directory she happens to start apt in. This also cleans up the code requiring less implementation details in build-dep which is always good. Technically, this is an ABI break as we override virtual methods, but that they weren't overridden was a mistake resulting in pure classes, which shouldn't be pure, so they were unusable – and as they are new in 1.1 nobody is using them yet (and hopefully ever as they are borderline implementation details). Closes: 806693
Diffstat (limited to 'apt-pkg')
-rw-r--r--apt-pkg/deb/debindexfile.cc18
-rw-r--r--apt-pkg/deb/debindexfile.h13
-rw-r--r--apt-pkg/sourcelist.cc8
3 files changed, 36 insertions, 3 deletions
diff --git a/apt-pkg/deb/debindexfile.cc b/apt-pkg/deb/debindexfile.cc
index 708b40a96..c11efd0ae 100644
--- a/apt-pkg/deb/debindexfile.cc
+++ b/apt-pkg/deb/debindexfile.cc
@@ -278,6 +278,24 @@ pkgSrcRecords::Parser *debDscFileIndex::CreateSrcParser() const
return NULL;
return new debDscRecordParser(File, this);
}
+std::string debDscFileIndex::GetComponent() const
+{
+ return "local-dsc";
+}
+std::string debDscFileIndex::GetArchitecture() const
+{
+ return "source";
+}
+uint8_t debDscFileIndex::GetIndexFlags() const
+{
+ return pkgCache::Flag::LocalSource;
+}
+ /*}}}*/
+// ControlFile Index - a directory with a debian/control file /*{{{*/
+std::string debDebianSourceDirIndex::GetComponent() const
+{
+ return "local-control";
+}
/*}}}*/
// Index File types for Debian /*{{{*/
diff --git a/apt-pkg/deb/debindexfile.h b/apt-pkg/deb/debindexfile.h
index e96a4761e..890141dff 100644
--- a/apt-pkg/deb/debindexfile.h
+++ b/apt-pkg/deb/debindexfile.h
@@ -152,7 +152,13 @@ public:
class debDscFileIndex : public pkgDebianIndexRealFile
{
void * const d;
- public:
+
+protected:
+ virtual std::string GetComponent() const APT_OVERRIDE;
+ virtual std::string GetArchitecture() const APT_OVERRIDE;
+ virtual uint8_t GetIndexFlags() const APT_OVERRIDE;
+
+public:
virtual const Type *GetType() const APT_OVERRIDE APT_CONST;
virtual pkgSrcRecords::Parser *CreateSrcParser() const APT_OVERRIDE;
virtual bool HasPackages() const APT_OVERRIDE {return false;};
@@ -163,7 +169,10 @@ class debDscFileIndex : public pkgDebianIndexRealFile
class debDebianSourceDirIndex : public debDscFileIndex
{
- public:
+protected:
+ virtual std::string GetComponent() const APT_OVERRIDE;
+
+public:
virtual const Type *GetType() const APT_OVERRIDE APT_CONST;
};
diff --git a/apt-pkg/sourcelist.cc b/apt-pkg/sourcelist.cc
index 1e6b831be..6773b069f 100644
--- a/apt-pkg/sourcelist.cc
+++ b/apt-pkg/sourcelist.cc
@@ -544,11 +544,17 @@ void pkgSourceList::AddVolatileFile(pkgIndexFile * const File) /*{{{*/
/*}}}*/
bool pkgSourceList::AddVolatileFile(std::string const &File) /*{{{*/
{
+ // Note: FileExists matches directories and links, too!
if (File.empty() || FileExists(File) == false)
return false;
- if (flExtension(File) == "deb")
+ std::string const ext = flExtension(File);
+ if (ext == "deb")
AddVolatileFile(new debDebPkgFileIndex(File));
+ else if (ext == "dsc")
+ AddVolatileFile(new debDscFileIndex(File));
+ else if (FileExists(flCombine(File, "debian/control")))
+ AddVolatileFile(new debDscFileIndex(flCombine(File, "debian/control")));
else
return false;