From: Dmitry V. Levin Date: Tue, 28 Feb 2023 08:00:00 +0000 (+0000) Subject: udev_rules_parse_file: do not skip ENOENT X-Git-Tag: v254-rc1~1116 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=42a467b55219384c7c3b137ab3cc8b6a309a8a14;p=thirdparty%2Fsystemd.git udev_rules_parse_file: do not skip ENOENT Starting with commit ed88bcfb7c15029f9fc95ee2380759a9eb782d46, udev_rules_parse_file() silently skips files it fails to open with ENOENT error, e.g. when they are broken symlinks. As this behavior is undocumented and it seems to be unintended, let's treat ENOENT like any other error. This change would also simplify the implementation of the udev rules syntax checker mentioned in #26606. udev_rules_load(), the only user of udev_rules_parse_file(), is not affected by this change because it essentially ignores the value returned by the latter, the only visible difference would be a log message issued for every udev rules file that couldn't be open because of ENOENT. Fixes: ed88bcfb7c15 ("Be more careful when checking for empty files") --- diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c index 5bd09a64d1d..68c4bc903ce 100644 --- a/src/udev/udev-rules.c +++ b/src/udev/udev-rules.c @@ -1178,12 +1178,8 @@ int udev_rules_parse_file(UdevRules *rules, const char *filename) { int r; f = fopen(filename, "re"); - if (!f) { - if (errno == ENOENT) - return 0; - + if (!f) return log_warning_errno(errno, "Failed to open %s, ignoring: %m", filename); - } if (fstat(fileno(f), &st) < 0) return log_warning_errno(errno, "Failed to stat %s, ignoring: %m", filename);