bool apply_permissions,
bool apply_chroot,
bool apply_tty_stdin,
- bool set_notify_socket,
bool is_control,
pid_t *_pid) {
.apply_chroot = apply_chroot,
.apply_tty_stdin = apply_tty_stdin,
.bus_endpoint_fd = -1,
+ .selinux_context_net = s->socket_fd_selinux_context_net
};
assert(s);
goto fail;
}
- if (set_notify_socket)
+ if (is_control ? s->notify_access == NOTIFY_ALL : s->notify_access != NOTIFY_NONE)
if (asprintf(our_env + n_env++, "NOTIFY_SOCKET=%s", UNIT(s)->manager->notify_socket) < 0) {
r = -ENOMEM;
goto fail;
!s->permissions_start_only,
!s->root_directory_start_only,
true,
- false,
true,
&s->control_pid);
if (r < 0)
if (s->timeout_stop_usec > 0)
service_arm_timer(s, s->timeout_stop_usec);
- service_set_state(s, SERVICE_STOP);
+ /* The service told us it's stopping, so it's as if we SIGTERM'd it. */
+ service_set_state(s, SERVICE_STOP_SIGTERM);
}
static void service_enter_stop(Service *s, ServiceResult f) {
!s->permissions_start_only,
!s->root_directory_start_only,
false,
- false,
true,
&s->control_pid);
if (r < 0)
!s->permissions_start_only,
!s->root_directory_start_only,
false,
- false,
true,
&s->control_pid);
if (r < 0)
true,
true,
true,
- s->notify_access != NOTIFY_NONE,
false,
&pid);
if (r < 0)
!s->permissions_start_only,
!s->root_directory_start_only,
true,
- false,
true,
&s->control_pid);
if (r < 0)
!s->permissions_start_only,
!s->root_directory_start_only,
false,
- false,
true,
&s->control_pid);
if (r < 0)
!s->root_directory_start_only,
s->control_command_id == SERVICE_EXEC_START_PRE ||
s->control_command_id == SERVICE_EXEC_STOP_POST,
- false,
true,
&s->control_pid);
if (r < 0)
true,
true,
true,
- s->notify_access != NOTIFY_NONE,
false,
&pid);
if (r < 0)
/* Try to acquire PID from bus service */
- r = sd_bus_get_owner(u->manager->api_bus, name, SD_BUS_CREDS_PID, &creds);
+ r = sd_bus_get_name_creds(u->manager->api_bus, name, SD_BUS_CREDS_PID, &creds);
if (r >= 0)
r = sd_bus_creds_get_pid(creds, &pid);
if (r >= 0) {
}
}
-int service_set_socket_fd(Service *s, int fd, Socket *sock) {
+int service_set_socket_fd(Service *s, int fd, Socket *sock, bool selinux_context_net) {
_cleanup_free_ char *peer = NULL;
int r;
}
s->socket_fd = fd;
+ s->socket_fd_selinux_context_net = selinux_context_net;
unit_ref_set(&s->accept_socket, UNIT(sock));