Revert "chase: invert CHASE_NO_AUTOFS and only set it where needed"
This reverts commit 490aa05ca1.
As commented https://github.com/systemd/systemd/pull/38569#discussion_r2284978273,
the commit makes autofs check bypassed. Before the commit, when
CHASE_NO_AUTOFS is set, we did not shortcut chasing paths, and refused
any autofs mount points in the path. However, with the commit, the flag
was swapped but even when CHASE_AUTOFS is unset, the autofs check may be
skipped.
To fix the issue, rather than swapping the flag, we should introduce
another flag, say CHASE_TRIGGER_AUTOFS. This revert the commit, and in a
later commit, the new flag will be introduced.
This commit is contained in:
@@ -3079,7 +3079,7 @@ static int setup_exec_directory(
|
||||
* since they all support the private/ symlink logic at least in some
|
||||
* configurations, see above. */
|
||||
|
||||
r = chase(target, NULL, CHASE_AUTOFS, &target_resolved, NULL);
|
||||
r = chase(target, NULL, 0, &target_resolved, NULL);
|
||||
if (r < 0)
|
||||
goto fail;
|
||||
|
||||
@@ -3090,7 +3090,7 @@ static int setup_exec_directory(
|
||||
}
|
||||
|
||||
/* /var/lib or friends may be symlinks. So, let's chase them also. */
|
||||
r = chase(q, NULL, CHASE_NONEXISTENT|CHASE_AUTOFS, &q_resolved, NULL);
|
||||
r = chase(q, NULL, CHASE_NONEXISTENT, &q_resolved, NULL);
|
||||
if (r < 0)
|
||||
goto fail;
|
||||
|
||||
@@ -3985,7 +3985,7 @@ static int apply_working_directory(
|
||||
|
||||
r = chase(wd,
|
||||
runtime->ephemeral_copy ?: context->root_directory,
|
||||
CHASE_PREFIX_ROOT|CHASE_AT_RESOLVE_IN_ROOT|CHASE_AUTOFS,
|
||||
CHASE_PREFIX_ROOT|CHASE_AT_RESOLVE_IN_ROOT,
|
||||
/* ret_path= */ NULL,
|
||||
&dfd);
|
||||
if (r >= 0)
|
||||
|
||||
+1
-1
@@ -1196,7 +1196,7 @@ static void mount_enter_mounting(Mount *m) {
|
||||
/* Validate that the path we are overmounting does not contain any symlinks, because if it does, we
|
||||
* couldn't support that reasonably: the mounts in /proc/self/mountinfo would not be recognizable to
|
||||
* us anymore. */
|
||||
fd = chase_and_open_parent(m->where, /* root= */ NULL, CHASE_PROHIBIT_SYMLINKS|CHASE_MKDIR_0755|CHASE_AUTOFS, &fn);
|
||||
fd = chase_and_open_parent(m->where, /* root= */ NULL, CHASE_PROHIBIT_SYMLINKS|CHASE_MKDIR_0755, &fn);
|
||||
if (fd == -EREMCHG) {
|
||||
r = unit_log_noncanonical_mount_path(UNIT(m), m->where);
|
||||
goto fail;
|
||||
|
||||
@@ -1793,7 +1793,7 @@ static int follow_symlink(
|
||||
* a time by specifying CHASE_STEP. This function returns 0 if we resolved one step, and > 0 if we reached the
|
||||
* end and already have a fully normalized name. */
|
||||
|
||||
r = chase(mount_entry_path(m), root_directory, CHASE_STEP|CHASE_NONEXISTENT|CHASE_AUTOFS, &target, NULL);
|
||||
r = chase(mount_entry_path(m), root_directory, CHASE_STEP|CHASE_NONEXISTENT, &target, NULL);
|
||||
if (r < 0)
|
||||
return log_debug_errno(r, "Failed to chase symlinks '%s': %m", mount_entry_path(m));
|
||||
if (r > 0) /* Reached the end, nothing more to resolve */
|
||||
@@ -1991,7 +1991,7 @@ static int apply_one_mount(
|
||||
return log_error_errno(r, "Failed to set label of the source directory %s: %m", mount_entry_source(m));
|
||||
}
|
||||
|
||||
r = chase(mount_entry_source(m), NULL, CHASE_TRAIL_SLASH|CHASE_AUTOFS, &chased, NULL);
|
||||
r = chase(mount_entry_source(m), NULL, CHASE_TRAIL_SLASH, &chased, NULL);
|
||||
if (r == -ENOENT && m->ignore) {
|
||||
log_debug_errno(r, "Path %s does not exist, ignoring.", mount_entry_source(m));
|
||||
return 0;
|
||||
@@ -3434,7 +3434,7 @@ static int is_extension_overlay(const char *path, int fd) {
|
||||
assert(path);
|
||||
|
||||
if (fd < 0) {
|
||||
r = chase(path, /* root= */ NULL, CHASE_TRAIL_SLASH|CHASE_MUST_BE_DIRECTORY|CHASE_AUTOFS, /* ret_path= */ NULL, &dfd);
|
||||
r = chase(path, /* root= */ NULL, CHASE_TRAIL_SLASH|CHASE_MUST_BE_DIRECTORY, /* ret_path= */ NULL, &dfd);
|
||||
if (r < 0)
|
||||
return r;
|
||||
fd = dfd;
|
||||
|
||||
+1
-1
@@ -5622,7 +5622,7 @@ int service_determine_exec_selinux_label(Service *s, char **ret) {
|
||||
return -ENODATA;
|
||||
|
||||
_cleanup_free_ char *path = NULL;
|
||||
r = chase(c->path, s->exec_context.root_directory, CHASE_PREFIX_ROOT|CHASE_AUTOFS, &path, NULL);
|
||||
r = chase(c->path, s->exec_context.root_directory, CHASE_PREFIX_ROOT, &path, NULL);
|
||||
if (r < 0) {
|
||||
log_unit_debug_errno(UNIT(s), r, "Failed to resolve service binary '%s', ignoring.", c->path);
|
||||
return -ENODATA;
|
||||
|
||||
Reference in New Issue
Block a user