]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/core/dbus-kill.c
core: s/reexection/reexecution/ typo fix
[thirdparty/systemd.git] / src / core / dbus-kill.c
CommitLineData
4819ff03
LP
1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
3/***
4 This file is part of systemd.
5
6 Copyright 2012 Lennart Poettering
7
8 systemd is free software; you can redistribute it and/or modify it
9 under the terms of the GNU Lesser General Public License as published by
10 the Free Software Foundation; either version 2.1 of the License, or
11 (at your option) any later version.
12
13 systemd is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Lesser General Public License for more details.
17
18 You should have received a copy of the GNU Lesser General Public License
19 along with systemd; If not, see <http://www.gnu.org/licenses/>.
20***/
21
24882e06
LP
22#include "signal-util.h"
23#include "bus-util.h"
24
718db961 25#include "kill.h"
4819ff03 26#include "dbus-kill.h"
4819ff03 27
718db961 28static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_kill_mode, kill_mode, KillMode);
4819ff03 29
718db961
LP
30const sd_bus_vtable bus_kill_vtable[] = {
31 SD_BUS_VTABLE_START(0),
556089dc
LP
32 SD_BUS_PROPERTY("KillMode", "s", property_get_kill_mode, offsetof(KillContext, kill_mode), SD_BUS_VTABLE_PROPERTY_CONST),
33 SD_BUS_PROPERTY("KillSignal", "i", bus_property_get_int, offsetof(KillContext, kill_signal), SD_BUS_VTABLE_PROPERTY_CONST),
34 SD_BUS_PROPERTY("SendSIGKILL", "b", bus_property_get_bool, offsetof(KillContext, send_sigkill), SD_BUS_VTABLE_PROPERTY_CONST),
35 SD_BUS_PROPERTY("SendSIGHUP", "b", bus_property_get_bool, offsetof(KillContext, send_sighup), SD_BUS_VTABLE_PROPERTY_CONST),
718db961 36 SD_BUS_VTABLE_END
4819ff03 37};
a6c0353b
LP
38
39int bus_kill_context_set_transient_property(
40 Unit *u,
41 KillContext *c,
42 const char *name,
718db961 43 sd_bus_message *message,
a6c0353b 44 UnitSetPropertiesMode mode,
718db961
LP
45 sd_bus_error *error) {
46
47 int r;
a6c0353b
LP
48
49 assert(u);
50 assert(c);
51 assert(name);
718db961 52 assert(message);
a6c0353b 53
405e0255
LP
54 if (streq(name, "KillMode")) {
55 const char *m;
56 KillMode k;
57
718db961
LP
58 r = sd_bus_message_read(message, "s", &m);
59 if (r < 0)
60 return r;
405e0255
LP
61
62 k = kill_mode_from_string(m);
63 if (k < 0)
64 return -EINVAL;
65
66 if (mode != UNIT_CHECK) {
67 c->kill_mode = k;
68
69 unit_write_drop_in_private_format(u, mode, name, "KillMode=%s\n", kill_mode_to_string(k));
70 }
71
72 return 1;
73
c7040b5d
LP
74 } else if (streq(name, "KillSignal")) {
75 int sig;
76
77 r = sd_bus_message_read(message, "i", &sig);
78 if (r < 0)
79 return r;
80
81 if (sig <= 0 || sig >= _NSIG)
b4f052a0 82 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Signal %i out of range", sig);
c7040b5d
LP
83
84 if (mode != UNIT_CHECK) {
85 c->kill_signal = sig;
86
87 unit_write_drop_in_private_format(u, mode, name, "KillSignal=%s\n", signal_to_string(sig));
88 }
89
90 return 1;
91
405e0255 92 } else if (streq(name, "SendSIGHUP")) {
718db961 93 int b;
a6c0353b 94
718db961
LP
95 r = sd_bus_message_read(message, "b", &b);
96 if (r < 0)
97 return r;
a6c0353b
LP
98
99 if (mode != UNIT_CHECK) {
a6c0353b 100 c->send_sighup = b;
c3df8d3d 101
405e0255 102 unit_write_drop_in_private_format(u, mode, name, "SendSIGHUP=%s\n", yes_no(b));
a6c0353b
LP
103 }
104
105 return 1;
106
107 } else if (streq(name, "SendSIGKILL")) {
718db961 108 int b;
a6c0353b 109
718db961
LP
110 r = sd_bus_message_read(message, "b", &b);
111 if (r < 0)
112 return r;
a6c0353b
LP
113
114 if (mode != UNIT_CHECK) {
a6c0353b 115 c->send_sigkill = b;
c3df8d3d 116
405e0255 117 unit_write_drop_in_private_format(u, mode, name, "SendSIGKILL=%s\n", yes_no(b));
a6c0353b
LP
118 }
119
120 return 1;
121
122 }
123
124 return 0;
125}