#include "unit-name.h"
#include "dbus-service.h"
#include "special.h"
+#include "bus-errors.h"
#define COMMENTS "#;\n"
#define NEWLINES "\n\r"
bool pass_fds,
bool apply_permissions,
bool apply_chroot,
+ bool apply_tty_stdin,
bool set_notify_socket,
pid_t *_pid) {
final_env,
apply_permissions,
apply_chroot,
+ apply_tty_stdin,
s->meta.manager->confirm_spawn,
s->meta.cgroup_bondings,
&pid);
false,
!s->permissions_start_only,
!s->root_directory_start_only,
+ true,
false,
&s->control_pid)) < 0)
goto fail;
!s->permissions_start_only,
!s->root_directory_start_only,
false,
+ false,
&s->control_pid)) < 0)
goto fail;
!s->permissions_start_only,
!s->root_directory_start_only,
false,
+ false,
&s->control_pid)) < 0)
goto fail;
true,
true,
true,
+ true,
s->notify_access != NOTIFY_NONE,
&pid)) < 0)
goto fail;
false,
!s->permissions_start_only,
!s->root_directory_start_only,
+ true,
false,
&s->control_pid)) < 0)
goto fail;
static void service_enter_restart(Service *s) {
int r;
+ DBusError error;
+
assert(s);
+ dbus_error_init(&error);
service_enter_dead(s, true, false);
- if ((r = manager_add_job(s->meta.manager, JOB_START, UNIT(s), JOB_FAIL, false, NULL)) < 0)
+ if ((r = manager_add_job(s->meta.manager, JOB_START, UNIT(s), JOB_FAIL, false, NULL, NULL)) < 0)
goto fail;
log_debug("%s scheduled restart job.", s->meta.id);
return;
fail:
-
- log_warning("%s failed to schedule restart job: %s", s->meta.id, strerror(-r));
+ log_warning("%s failed to schedule restart job: %s", s->meta.id, bus_error(&error, -r));
service_enter_dead(s, false, false);
+
+ dbus_error_free(&error);
}
static void service_enter_reload(Service *s) {
!s->permissions_start_only,
!s->root_directory_start_only,
false,
+ false,
&s->control_pid)) < 0)
goto fail;
!s->permissions_start_only,
!s->root_directory_start_only,
false,
+ false,
&s->control_pid)) < 0)
goto fail;
goto finish;
}
- if ((r = manager_load_unit_prepare(m, name, NULL, &service)) < 0) {
+ if ((r = manager_load_unit_prepare(m, name, NULL, NULL, &service)) < 0) {
log_warning("Failed to prepare unit %s: %s", name, strerror(-r));
continue;
}
manager_dispatch_load_queue(m);
service = unit_follow_merge(service);
+ /* If this is a native service, rely
+ * on native ways to pull in a
+ * service, don't pull it in via sysv
+ * rcN.d links. */
+ if (service->meta.fragment_path)
+ continue;
+
if (de->d_name[0] == 'S') {
if ((r = unit_add_two_dependencies_by_name_inverse(service, UNIT_AFTER, UNIT_WANTS, rcnd_table[i].target, NULL, true)) < 0)