EXEC_APPLY_CHROOT = 1U << 2,
EXEC_APPLY_TTY_STDIN = 1U << 3,
- /* The following are not usec by execute.c, but by consumers internally */
+ /* The following are not used by execute.c, but by consumers internally */
EXEC_PASS_FDS = 1U << 4,
EXEC_IS_CONTROL = 1U << 5,
} ExecFlags;
assert(c);
assert(_pid);
+ if (flags & EXEC_IS_CONTROL) {
+ /* If this is a control process, mask the permissions/chroot application if this is requested. */
+ if (s->permissions_start_only)
+ exec_params.flags &= ~EXEC_APPLY_PERMISSIONS;
+ if (s->root_directory_start_only)
+ exec_params.flags &= ~EXEC_APPLY_CHROOT;
+ }
+
(void) unit_realize_cgroup(UNIT(s));
if (s->reset_cpu_usage) {
(void) unit_reset_cpu_usage(UNIT(s));
r = service_spawn(s,
s->control_command,
s->timeout_stop_usec,
- (s->permissions_start_only ? 0 : EXEC_APPLY_PERMISSIONS) |
- (s->root_directory_start_only ? 0 : EXEC_APPLY_CHROOT) |
- EXEC_APPLY_TTY_STDIN | EXEC_IS_CONTROL,
+ EXEC_APPLY_PERMISSIONS|EXEC_APPLY_CHROOT|EXEC_APPLY_TTY_STDIN|EXEC_IS_CONTROL,
&s->control_pid);
if (r < 0)
goto fail;
r = service_spawn(s,
s->control_command,
s->timeout_stop_usec,
- (s->permissions_start_only ? 0 : EXEC_APPLY_PERMISSIONS) |
- (s->root_directory_start_only ? 0 : EXEC_APPLY_CHROOT) |
- EXEC_IS_CONTROL,
+ EXEC_APPLY_PERMISSIONS|EXEC_APPLY_CHROOT|EXEC_IS_CONTROL,
&s->control_pid);
if (r < 0)
goto fail;
r = service_spawn(s,
s->control_command,
s->timeout_start_usec,
- (s->permissions_start_only ? 0 : EXEC_APPLY_PERMISSIONS)|
- (s->root_directory_start_only ? 0 : EXEC_APPLY_CHROOT)|
- EXEC_IS_CONTROL,
+ EXEC_APPLY_PERMISSIONS|EXEC_APPLY_CHROOT|EXEC_IS_CONTROL,
&s->control_pid);
if (r < 0)
goto fail;
r = service_spawn(s,
s->control_command,
s->timeout_start_usec,
- (s->permissions_start_only ? 0 : EXEC_APPLY_PERMISSIONS) |
- (s->root_directory_start_only ? 0: EXEC_APPLY_CHROOT) |
- EXEC_IS_CONTROL|EXEC_APPLY_TTY_STDIN,
+ EXEC_APPLY_PERMISSIONS|EXEC_APPLY_CHROOT|EXEC_IS_CONTROL|EXEC_APPLY_TTY_STDIN,
&s->control_pid);
if (r < 0)
goto fail;
r = service_spawn(s,
s->control_command,
s->timeout_start_usec,
- (s->permissions_start_only ? 0 : EXEC_APPLY_PERMISSIONS) |
- (s->root_directory_start_only ? 0 : EXEC_APPLY_CHROOT) |
- EXEC_IS_CONTROL,
+ EXEC_APPLY_PERMISSIONS|EXEC_APPLY_CHROOT|EXEC_IS_CONTROL,
&s->control_pid);
if (r < 0)
goto fail;
r = service_spawn(s,
s->control_command,
timeout,
- (s->permissions_start_only ? 0 : EXEC_APPLY_PERMISSIONS) |
- (s->root_directory_start_only ? 0 : EXEC_APPLY_CHROOT) |
- (IN_SET(s->control_command_id, SERVICE_EXEC_START_PRE, SERVICE_EXEC_STOP_POST) ? EXEC_APPLY_TTY_STDIN : 0)|
- EXEC_IS_CONTROL,
+ EXEC_APPLY_PERMISSIONS|EXEC_APPLY_CHROOT|EXEC_IS_CONTROL|
+ (IN_SET(s->control_command_id, SERVICE_EXEC_START_PRE, SERVICE_EXEC_STOP_POST) ? EXEC_APPLY_TTY_STDIN : 0),
&s->control_pid);
if (r < 0)
goto fail;