[PATCH] Warn for unknown info files in packages
Debian Policy forbids info files not mentioned in Policy, except if their
names start with an underscore to flag them as non-critical.
---
src/main/unpack.c | 29 +++++++++++++++++++++++++++++
tests/t-multiarch/Makefile | 24 ++++++++++++------------
2 files changed, 41 insertions(+), 12 deletions(-)
diff --git a/src/main/unpack.c b/src/main/unpack.c
index 9048f6fb0..446f8d4c5 100644
--- a/src/main/unpack.c
+++ b/src/main/unpack.c
@@ -496,9 +496,23 @@ pkg_infodb_update_file(const char *filename, const char *filetype)
static void
pkg_infodb_update(struct pkginfo *pkg, char *cidir, char *cidirrest)
{
+ char const *const known_info_names[] =
+ {
+ "conffiles",
+ "control",
+ "preinst",
+ "prerm",
+ "postinst",
+ "postrm",
+ "triggers"
+ };
+ size_t const num_known_info_names =
+ sizeof known_info_names / sizeof known_info_names[0];
+
struct match_node *match_node;
DIR *dsd;
struct dirent *de;
+ bool known;
/* Deallocate the match list in case we aborted previously. */
while ((match_node = match_head)) {
@@ -567,6 +581,21 @@ pkg_infodb_update(struct pkginfo *pkg, char *cidir, char *cidirrest)
continue;
}
+ /* if the info file name starts with an underscore, then it can be
+ * safely ignored */
+ known = (de->d_name[0] == '_');
+
+ /* compare against list of files we understand */
+ for (size_t i = 0; !known && (i < num_known_info_names); ++i)
+ if (strcmp(de->d_name, known_info_names[i]) == 0)
+ known = true;
+
+ /* TODO: error? force option? */
+ if (!known)
+ warning(_("package %s contains unknown info file '%s'"),
+ pkgbin_name(pkg, &pkg->available, pnaw_nonambig),
+ de->d_name);
+
/* Right, install it */
newinfofilename = pkg_infodb_get_file(pkg, &pkg->available, de->d_name);
if (rename(cidir, newinfofilename))
diff --git a/tests/t-multiarch/Makefile b/tests/t-multiarch/Makefile
index 31449437b..99e09c9e9 100644
--- a/tests/t-multiarch/Makefile
+++ b/tests/t-multiarch/Makefile
@@ -787,39 +787,39 @@ test-dpkg-output: ma-setup
$(DPKG_PURGE) pkg-ma-shared-files:$(NATIVE_ARCH) pkg-ma-shared-files:$(FOREIGN_ARCH)
pkg-ma-db-layout_1.0_$(NATIVE_ARCH):: pkg-template
- touch pkg-ma-db-layout_1.0_$(NATIVE_ARCH)/DEBIAN/foo-1
+ touch pkg-ma-db-layout_1.0_$(NATIVE_ARCH)/DEBIAN/_foo-1
pkg-ma-db-layout_2.0_$(NATIVE_ARCH):: pkg-template
- touch pkg-ma-db-layout_2.0_$(NATIVE_ARCH)/DEBIAN/foo-2
+ touch pkg-ma-db-layout_2.0_$(NATIVE_ARCH)/DEBIAN/_foo-2
test-db-layout: ma-setup
$(DPKG_INSTALL) pkg-ma-db-layout_1.0_$(NATIVE_ARCH).deb
test -e "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout.list"
- test -e "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout.foo-1"
+ test -e "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout._foo-1"
$(DPKG_INSTALL) pkg-ma-db-layout_2.0_$(NATIVE_ARCH).deb
! test -e "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout.list"
- ! test -e "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout.foo-1"
+ ! test -e "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout._foo-1"
test -e "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout:$(NATIVE_ARCH).list"
- test -e "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout:$(NATIVE_ARCH).foo-2"
+ test -e "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout:$(NATIVE_ARCH)._foo-2"
$(DPKG_INSTALL) pkg-ma-db-layout_1.0_$(NATIVE_ARCH).deb
test -e "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout.list"
- test -e "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout.foo-1"
+ test -e "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout._foo-1"
! test -e "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout:$(NATIVE_ARCH).list"
- ! test -e "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout:$(NATIVE_ARCH).foo-2"
+ ! test -e "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout:$(NATIVE_ARCH)._foo-2"
$(DPKG_PURGE) pkg-ma-db-layout
# Test the upgrade of the db layout
$(DPKG_INSTALL) pkg-ma-db-layout_2.0_$(NATIVE_ARCH).deb
rm -f "$(DPKG_ADMINDIR)/info/format"
mv "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout:$(NATIVE_ARCH).list" "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout.list"
- mv "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout:$(NATIVE_ARCH).foo-2" "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout.foo-2"
- $(call stdout_has,$(DPKG_QUERY) --control-path pkg-ma-db-layout foo-2,/pkg-ma-db-layout\.foo-2$$)
+ mv "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout:$(NATIVE_ARCH)._foo-2" "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout._foo-2"
+ $(call stdout_has,$(DPKG_QUERY) --control-path pkg-ma-db-layout _foo-2,/pkg-ma-db-layout\._foo-2$$)
$(DPKG_CONFIGURE) -a
grep -q "^1$$" "$(DPKG_ADMINDIR)/info/format"
test -e "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout:$(NATIVE_ARCH).list"
- test -e "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout:$(NATIVE_ARCH).foo-2"
+ test -e "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout:$(NATIVE_ARCH)._foo-2"
! test -e "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout.list"
- ! test -e "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout.foo-2"
- $(call stdout_has,$(DPKG_QUERY) --control-path pkg-ma-db-layout foo-2,/pkg-ma-db-layout:$(NATIVE_ARCH)\.foo-2$$)
+ ! test -e "$(DPKG_ADMINDIR)/info/pkg-ma-db-layout._foo-2"
+ $(call stdout_has,$(DPKG_QUERY) --control-path pkg-ma-db-layout _foo-2,/pkg-ma-db-layout:$(NATIVE_ARCH)\._foo-2$$)
$(DPKG_PURGE) pkg-ma-db-layout
test-clean:
--
2.39.2
Reply to: