From: Yu Watanabe Date: Tue, 13 Jan 2026 06:48:56 +0000 (+0900) Subject: udevadm: gracefully handle when a maked file is specified to udevadm verify/cat X-Git-Tag: v260-rc1~383^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=782569afd05b97143938ec294b5a28b4f2ffb75c;p=thirdparty%2Fsystemd.git udevadm: gracefully handle when a maked file is specified to udevadm verify/cat Previously, since 7cb4508c5af465ab1be1b103e6c2b613eb58e63c, if a masked file is specified, the commands failed. Let's warn that the file is masked and ignore the file. --- diff --git a/src/udev/udevadm-util.c b/src/udev/udevadm-util.c index 1ab9b0c8ca4..04005cc3666 100644 --- a/src/udev/udevadm-util.c +++ b/src/udev/udevadm-util.c @@ -248,7 +248,11 @@ static int search_rules_file_in_conf_dirs(const char *s, const char *root, ConfF return log_oom(); _cleanup_(conf_file_freep) ConfFile *c = NULL; - r = conf_file_new(path, root, CONF_FILES_REGULAR, &c); + r = conf_file_new(path, root, CONF_FILES_REGULAR | CONF_FILES_FILTER_MASKED, &c); + if (r == -ERFKILL) { + log_warning_errno(r, "File '%s%s' is a mask, ignoring.", empty_to_root(root), skip_leading_slash(path)); + return 1; /* Found masked file. */ + } if (r == -ENOENT) continue; if (r < 0) @@ -278,7 +282,11 @@ static int search_rules_file(const char *s, const char *root, ConfFile ***files, /* If not found, or if it is a path, then chase it. */ _cleanup_(conf_file_freep) ConfFile *c = NULL; - r = conf_file_new(s, root, CONF_FILES_REGULAR, &c); + r = conf_file_new(s, root, CONF_FILES_REGULAR | CONF_FILES_FILTER_MASKED, &c); + if (r == -ERFKILL) { + log_warning_errno(r, "File '%s%s' is a mask, ignoring.", empty_to_root(root), skip_leading_slash(s)); + return 0; /* Found masked file. */ + } if (r >= 0) { if (!GREEDY_REALLOC_APPEND(*files, *n_files, &c, 1)) return log_oom(); diff --git a/test/units/TEST-17-UDEV.sanity-check.sh b/test/units/TEST-17-UDEV.sanity-check.sh index 98a277a47eb..5f1a93e78f5 100755 --- a/test/units/TEST-17-UDEV.sanity-check.sh +++ b/test/units/TEST-17-UDEV.sanity-check.sh @@ -38,7 +38,7 @@ udevadm cat 99-systemd udevadm cat 99-systemd.rules udevadm cat /usr/lib/udev/rules.d/99-systemd.rules udevadm cat /usr/lib/udev/rules.d -(! udevadm cat /dev/null) +udevadm cat /dev/null udevadm cat --config udevadm cat -h diff --git a/test/units/TEST-17-UDEV.verify.sh b/test/units/TEST-17-UDEV.verify.sh index 5b6baa42802..66f34a3e36f 100755 --- a/test/units/TEST-17-UDEV.verify.sh +++ b/test/units/TEST-17-UDEV.verify.sh @@ -118,8 +118,7 @@ assert_1 --resolve-names=now assert_1 ./nosuchfile # Failed to parse rules file ./nosuchfile: No such file or directory assert_1 ./nosuchfile /dev/null -# '/dev/null' is neither a regular file nor a directory: File descriptor in bad state -assert_1 /dev/null +assert_0 /dev/null rules_dir='etc/udev/rules.d' mkdir -p "${rules_dir}"