diff options
author | Julian Andres Klode <julian.klode@canonical.com> | 2023-12-13 17:55:11 +0100 |
---|---|---|
committer | Julian Andres Klode <julian.klode@canonical.com> | 2023-12-13 17:59:34 +0100 |
commit | 7b41275b9da31d6c87bbaa0c9115e224e47b15e1 (patch) | |
tree | c74b4a6f6a280a1a0f00a5976284d523342b096f | |
parent | c555d8f1ae31d1f511bf811640423231b75a8e13 (diff) |
Do not silently ignore directories for reserved file names
Files with reserved extensions like .list, .sources, .conf,
and .pref should receive notices in their respective directories
even if they are directories.
-rw-r--r-- | apt-pkg/contrib/fileutl.cc | 8 | ||||
-rwxr-xr-x | test/integration/test-ignored-files | 43 |
2 files changed, 48 insertions, 3 deletions
diff --git a/apt-pkg/contrib/fileutl.cc b/apt-pkg/contrib/fileutl.cc index fad51ded1..99b1df3ff 100644 --- a/apt-pkg/contrib/fileutl.cc +++ b/apt-pkg/contrib/fileutl.cc @@ -486,12 +486,14 @@ std::vector<string> GetListOfFilesInDir(string const &Dir, std::vector<string> c { if (RealFileExists(File) == false) { + string d_ext = flExtension(Ent->d_name); // do not show ignoration warnings for directories - if ( + if (( #ifdef _DIRENT_HAVE_D_TYPE - Ent->d_type == DT_DIR || + Ent->d_type == DT_DIR || #endif - DirectoryExists(File) == true) + DirectoryExists(File) == true) && + (d_ext.empty() || std::find(Ext.begin(), Ext.end(), d_ext) == Ext.end())) continue; if (SilentIgnore.Match(Ent->d_name) == false) _error->Notice(_("Ignoring '%s' in directory '%s' as it is not a regular file"), Ent->d_name, Dir.c_str()); diff --git a/test/integration/test-ignored-files b/test/integration/test-ignored-files new file mode 100755 index 000000000..90defdcd4 --- /dev/null +++ b/test/integration/test-ignored-files @@ -0,0 +1,43 @@ +#!/bin/sh +set -e + +TESTDIR="$(readlink -f "$(dirname "$0")")" +. "$TESTDIR/framework" + +setupenvironment +configarchitecture 'amd64' + +setupaptarchive --no-update + +testsuccessequal "Reading package lists... +Building dependency tree... +All packages are up to date." apt update -q + + +msgtest "Check notices about .list and .sources directories in sources.list.d" +mkdir rootdir/etc/apt/sources.list.d/a-dir-that-will-be-ignored +mkdir rootdir/etc/apt/sources.list.d/a-dir-that-will-be-ignored.conf +mkdir rootdir/etc/apt/sources.list.d/a-dir-that-will-not-be-ignored.list +mkdir rootdir/etc/apt/sources.list.d/a-dir-that-will-not-be-ignored.sources +testsuccessequal "Reading package lists... +Building dependency tree... +All packages are up to date. +N: Ignoring 'a-dir-that-will-not-be-ignored.list' in directory '${TMPWORKINGDIRECTORY}/rootdir/etc/apt/sources.list.d/' as it is not a regular file +N: Ignoring 'a-dir-that-will-not-be-ignored.sources' in directory '${TMPWORKINGDIRECTORY}/rootdir/etc/apt/sources.list.d/' as it is not a regular file" apt update +rmdir rootdir/etc/apt/sources.list.d/a-dir-* + +msgtest "Check for notices about .conf directories in apt.conf.d" +mkdir -p rootdir/etc/apt/apt.conf.d/a-dir-that-will-be-ignored +mkdir -p rootdir/etc/apt/apt.conf.d/a-dir-that-will-be-ignored.list +mkdir -p rootdir/etc/apt/apt.conf.d/a-dir-that-will-not-be-ignored.conf +testsuccessequal "N: Ignoring 'a-dir-that-will-not-be-ignored.conf' in directory '${TMPWORKINGDIRECTORY}/rootdir/etc/apt/apt.conf.d/' as it is not a regular file" aptconfig shell +rmdir rootdir/etc/apt/apt.conf.d/a-dir-* + +msgtest "Check for directory notices in preferences.d" +mkdir -p rootdir/etc/apt/preferences.d/a-dir-that-will-be-ignored +mkdir -p rootdir/etc/apt/preferences.d/a-dir-that-will-be-ignored.conf +mkdir -p rootdir/etc/apt/preferences.d/a-dir-that-will-not-be-ignored.pref +testsuccessequal "Package files: +Pinned packages: +N: Ignoring 'a-dir-that-will-not-be-ignored.pref' in directory '${TMPWORKINGDIRECTORY}/rootdir/etc/apt/preferences.d/' as it is not a regular file" apt policy +rmdir rootdir/etc/apt/preferences.d/a-dir-* |