diff --git a/src/basic/chase.c b/src/basic/chase.c index 3a929498bf..68bb9816ce 100644 --- a/src/basic/chase.c +++ b/src/basic/chase.c @@ -509,16 +509,18 @@ int chaseat(int dir_fd, const char *path, ChaseFlags flags, char **ret_path, int close_and_replace(fd, child); } - if (FLAGS_SET(flags, CHASE_MUST_BE_DIRECTORY)) { - r = stat_verify_directory(&st); - if (r < 0) - return r; - } + if (exists) { + if (FLAGS_SET(flags, CHASE_MUST_BE_DIRECTORY)) { + r = stat_verify_directory(&st); + if (r < 0) + return r; + } - if (FLAGS_SET(flags, CHASE_MUST_BE_REGULAR)) { - r = stat_verify_regular(&st); - if (r < 0) - return r; + if (FLAGS_SET(flags, CHASE_MUST_BE_REGULAR)) { + r = stat_verify_regular(&st); + if (r < 0) + return r; + } } if (ret_path) { diff --git a/src/basic/conf-files.c b/src/basic/conf-files.c index b1b0c74637..c00325f2e4 100644 --- a/src/basic/conf-files.c +++ b/src/basic/conf-files.c @@ -145,7 +145,9 @@ int conf_file_new_at(const char *path, int rfd, ChaseFlags chase_flags, ConfFile return log_debug_errno(r, "Failed to extract directory from '%s': %m", path); if (r >= 0) { r = chaseat(rfd, dirpath, - CHASE_AT_RESOLVE_IN_ROOT | (FLAGS_SET(chase_flags, CHASE_NONEXISTENT) ? CHASE_NONEXISTENT : CHASE_MUST_BE_DIRECTORY), + CHASE_AT_RESOLVE_IN_ROOT | + CHASE_MUST_BE_DIRECTORY | + (FLAGS_SET(chase_flags, CHASE_NONEXISTENT) ? CHASE_NONEXISTENT : 0), &resolved_dirpath, /* ret_fd = */ NULL); if (r < 0) return log_debug_errno(r, "Failed to chase '%s%s': %m", empty_to_root(root), skip_leading_slash(dirpath));