dbus-service.c revision 6ce270b10ad5538fb60dabcf409a49a9c5fd0e8d
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering This file is part of systemd.
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering Copyright 2010 Lennart Poettering
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering systemd is free software; you can redistribute it and/or modify it
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering under the terms of the GNU Lesser General Public License as published by
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering the Free Software Foundation; either version 2.1 of the License, or
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering (at your option) any later version.
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering systemd is distributed in the hope that it will be useful, but
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering WITHOUT ANY WARRANTY; without even the implied warranty of
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering Lesser General Public License for more details.
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering You should have received a copy of the GNU Lesser General Public License
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering along with systemd; If not, see <http://www.gnu.org/licenses/>.
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poetteringstatic BUS_DEFINE_PROPERTY_GET_ENUM(property_get_type, service_type, ServiceType);
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poetteringstatic BUS_DEFINE_PROPERTY_GET_ENUM(property_get_result, service_result, ServiceResult);
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poetteringstatic BUS_DEFINE_PROPERTY_GET_ENUM(property_get_restart, service_restart, ServiceRestart);
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poetteringstatic BUS_DEFINE_PROPERTY_GET_ENUM(property_get_notify_access, notify_access, NotifyAccess);
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poetteringstatic BUS_DEFINE_PROPERTY_GET_ENUM(property_get_start_limit_action, start_limit_action, StartLimitAction);
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poetteringconst sd_bus_vtable bus_service_vtable[] = {
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering SD_BUS_PROPERTY("Type", "s", property_get_type, offsetof(Service, type), 0),
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering SD_BUS_PROPERTY("Restart", "s", property_get_restart, offsetof(Service, restart), 0),
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering SD_BUS_PROPERTY("PIDFile", "s", NULL, offsetof(Service, pid_file), 0),
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering SD_BUS_PROPERTY("NotifyAccess", "s", property_get_notify_access, offsetof(Service, notify_access), 0),
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering SD_BUS_PROPERTY("RestartUSec", "t", bus_property_get_usec, offsetof(Service, restart_usec), 0),
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering SD_BUS_PROPERTY("TimeoutStartUSec", "t", bus_property_get_usec, offsetof(Service, timeout_start_usec), 0),
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering SD_BUS_PROPERTY("TimeoutStopUSec", "t", bus_property_get_usec, offsetof(Service, timeout_stop_usec), 0),
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering SD_BUS_PROPERTY("WatchdogUSec", "t", bus_property_get_usec, offsetof(Service, watchdog_usec), 0),
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering BUS_PROPERTY_DUAL_TIMESTAMP("WatchdogTimestamp", offsetof(Service, watchdog_timestamp), 0),
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering SD_BUS_PROPERTY("StartLimitInterval", "t", bus_property_get_usec, offsetof(Service, start_limit.interval), 0),
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering SD_BUS_PROPERTY("StartLimitBurst", "u", bus_property_get_unsigned, offsetof(Service, start_limit.burst), 0),
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering SD_BUS_PROPERTY("StartLimitAction", "s", property_get_start_limit_action, offsetof(Service, start_limit_action), 0),
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering SD_BUS_PROPERTY("PermissionsStartOnly", "b", bus_property_get_bool, offsetof(Service, permissions_start_only), 0),
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering SD_BUS_PROPERTY("RootDirectoryStartOnly", "b", bus_property_get_bool, offsetof(Service, root_directory_start_only), 0),
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering SD_BUS_PROPERTY("RemainAfterExit", "b", bus_property_get_bool, offsetof(Service, remain_after_exit), 0),
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering SD_BUS_PROPERTY("GuessMainPID", "b", bus_property_get_bool, offsetof(Service, guess_main_pid), 0),
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering SD_BUS_PROPERTY("MainPID", "u", bus_property_get_pid, offsetof(Service, main_pid), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering SD_BUS_PROPERTY("ControlPID", "u", bus_property_get_pid, offsetof(Service, control_pid), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering SD_BUS_PROPERTY("BusName", "s", NULL, offsetof(Service, bus_name), 0),
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering SD_BUS_PROPERTY("StatusText", "s", NULL, offsetof(Service, status_text), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering SD_BUS_PROPERTY("Result", "s", property_get_result, offsetof(Service, result), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering BUS_EXEC_STATUS_VTABLE("ExecMain", offsetof(Service, main_exec_status), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering BUS_EXEC_COMMAND_VTABLE("ExecStartPre", offsetof(Service, exec_command[SERVICE_EXEC_START_PRE]), 0),
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering BUS_EXEC_COMMAND_VTABLE("ExecStart", offsetof(Service, exec_command[SERVICE_EXEC_START]), 0),
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering BUS_EXEC_COMMAND_VTABLE("ExecStartPost", offsetof(Service, exec_command[SERVICE_EXEC_START_POST]), 0),
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering BUS_EXEC_COMMAND_VTABLE("ExecReload", offsetof(Service, exec_command[SERVICE_EXEC_RELOAD]), 0),
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering BUS_EXEC_COMMAND_VTABLE("ExecStop", offsetof(Service, exec_command[SERVICE_EXEC_STOP]), 0),
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering BUS_EXEC_COMMAND_VTABLE("ExecStopPost", offsetof(Service, exec_command[SERVICE_EXEC_STOP_POST]), 0),
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poetteringconst char* const bus_service_changing_properties[] = {
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering "ExecMainStartTimestamp",
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering "ExecMainStartTimestampMonotonic",
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering "ExecMainExitTimestamp",
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering "ExecMainExitTimestampMonotonic",
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering "ExecMainPID",
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering "ExecMainCode",
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poettering "ExecMainStatus",
8b43440b7ef4b81c69c31de7ff820dc07a780254Lennart Poetteringstatic int bus_service_set_transient_property(
assert(s);
s->remain_after_exit = b;
const char *path;
ExecCommand *c;
return -ENOMEM;
if (!c->path) {
free(c);
return -ENOMEM;
c->ignore = b;
ExecCommand *c;
return -ENOMEM;
_cleanup_free_ char *a;
return -ENOMEM;
c->path,
fflush(f);
Unit *u,
const char *name,
assert(s);
assert(u);