]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/core/dbus-socket.c
core: make sure we properly parse ProtectHome= and ProtectSystem=
[thirdparty/systemd.git] / src / core / dbus-socket.c
CommitLineData
d6c9574f 1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
4139c1b2
LP
2
3/***
4 This file is part of systemd.
5
6 Copyright 2010 Lennart Poettering
7
8 systemd is free software; you can redistribute it and/or modify it
5430f7f2
LP
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
4139c1b2
LP
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
5430f7f2 16 Lesser General Public License for more details.
4139c1b2 17
5430f7f2 18 You should have received a copy of the GNU Lesser General Public License
4139c1b2
LP
19 along with systemd; If not, see <http://www.gnu.org/licenses/>.
20***/
21
718db961
LP
22#include "unit.h"
23#include "socket.h"
4139c1b2 24#include "dbus-unit.h"
4139c1b2 25#include "dbus-execute.h"
4819ff03 26#include "dbus-kill.h"
4ad49000 27#include "dbus-cgroup.h"
4ad49000 28#include "dbus-socket.h"
718db961
LP
29#include "bus-util.h"
30
31static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_result, socket_result, SocketResult);
32static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_bind_ipv6_only, socket_address_bind_ipv6_only, SocketAddressBindIPv6Only);
33
34static int property_get_listen(
35 sd_bus *bus,
36 const char *path,
37 const char *interface,
38 const char *property,
39 sd_bus_message *reply,
ebcf1f97
LP
40 void *userdata,
41 sd_bus_error *error) {
4139c1b2 42
718db961
LP
43
44 Socket *s = SOCKET(userdata);
67419600 45 SocketPort *p;
718db961 46 int r;
67419600 47
718db961
LP
48 assert(bus);
49 assert(reply);
67419600
OS
50 assert(s);
51
718db961
LP
52 r = sd_bus_message_open_container(reply, 'a', "(ss)");
53 if (r < 0)
54 return r;
67419600
OS
55
56 LIST_FOREACH(port, p, s->ports) {
7fd1b19b 57 _cleanup_free_ char *address = NULL;
67419600
OS
58 const char *a;
59
67419600
OS
60 switch (p->type) {
61 case SOCKET_SOCKET: {
67419600 62 r = socket_address_print(&p->address, &address);
718db961 63 if (r)
67419600 64 return r;
718db961 65
67419600
OS
66 a = address;
67 break;
68 }
69
70 case SOCKET_SPECIAL:
71 case SOCKET_MQUEUE:
72 case SOCKET_FIFO:
73 a = p->path;
74 break;
75
76 default:
718db961 77 assert_not_reached("Unknown socket type");
67419600
OS
78 }
79
718db961
LP
80 r = sd_bus_message_append(reply, "(ss)", socket_port_type_to_string(p), a);
81 if (r < 0)
82 return r;
67419600
OS
83 }
84
718db961 85 return sd_bus_message_close_container(reply);
67419600
OS
86}
87
718db961
LP
88const sd_bus_vtable bus_socket_vtable[] = {
89 SD_BUS_VTABLE_START(0),
556089dc
LP
90 SD_BUS_PROPERTY("BindIPv6Only", "s", property_get_bind_ipv6_only, offsetof(Socket, bind_ipv6_only), SD_BUS_VTABLE_PROPERTY_CONST),
91 SD_BUS_PROPERTY("Backlog", "u", bus_property_get_unsigned, offsetof(Socket, backlog), SD_BUS_VTABLE_PROPERTY_CONST),
92 SD_BUS_PROPERTY("TimeoutUSec", "t", bus_property_get_usec, offsetof(Socket, timeout_usec), SD_BUS_VTABLE_PROPERTY_CONST),
556089dc
LP
93 SD_BUS_PROPERTY("BindToDevice", "s", NULL, offsetof(Socket, bind_to_device), SD_BUS_VTABLE_PROPERTY_CONST),
94 SD_BUS_PROPERTY("DirectoryMode", "u", bus_property_get_mode, offsetof(Socket, directory_mode), SD_BUS_VTABLE_PROPERTY_CONST),
95 SD_BUS_PROPERTY("SocketMode", "u", bus_property_get_mode, offsetof(Socket, socket_mode), SD_BUS_VTABLE_PROPERTY_CONST),
96 SD_BUS_PROPERTY("Accept", "b", bus_property_get_bool, offsetof(Socket, accept), SD_BUS_VTABLE_PROPERTY_CONST),
97 SD_BUS_PROPERTY("KeepAlive", "b", bus_property_get_bool, offsetof(Socket, keep_alive), SD_BUS_VTABLE_PROPERTY_CONST),
98 SD_BUS_PROPERTY("Priority", "i", bus_property_get_int, offsetof(Socket, priority), SD_BUS_VTABLE_PROPERTY_CONST),
99 SD_BUS_PROPERTY("ReceiveBuffer", "t", bus_property_get_size, offsetof(Socket, receive_buffer), SD_BUS_VTABLE_PROPERTY_CONST),
100 SD_BUS_PROPERTY("SendBuffer", "t", bus_property_get_size, offsetof(Socket, send_buffer), SD_BUS_VTABLE_PROPERTY_CONST),
101 SD_BUS_PROPERTY("IPTOS", "i", bus_property_get_int, offsetof(Socket, ip_tos), SD_BUS_VTABLE_PROPERTY_CONST),
102 SD_BUS_PROPERTY("IPTTL", "i", bus_property_get_int, offsetof(Socket, ip_ttl), SD_BUS_VTABLE_PROPERTY_CONST),
103 SD_BUS_PROPERTY("PipeSize", "t", bus_property_get_size, offsetof(Socket, pipe_size), SD_BUS_VTABLE_PROPERTY_CONST),
104 SD_BUS_PROPERTY("FreeBind", "b", bus_property_get_bool, offsetof(Socket, free_bind), SD_BUS_VTABLE_PROPERTY_CONST),
105 SD_BUS_PROPERTY("Transparent", "b", bus_property_get_bool, offsetof(Socket, transparent), SD_BUS_VTABLE_PROPERTY_CONST),
106 SD_BUS_PROPERTY("Broadcast", "b", bus_property_get_bool, offsetof(Socket, broadcast), SD_BUS_VTABLE_PROPERTY_CONST),
107 SD_BUS_PROPERTY("PassCredentials", "b", bus_property_get_bool, offsetof(Socket, pass_cred), SD_BUS_VTABLE_PROPERTY_CONST),
108 SD_BUS_PROPERTY("PassSecurity", "b", bus_property_get_bool, offsetof(Socket, pass_sec), SD_BUS_VTABLE_PROPERTY_CONST),
bd1fe7c7 109 SD_BUS_PROPERTY("RemoveOnStop", "b", bus_property_get_bool, offsetof(Socket, remove_on_stop), SD_BUS_VTABLE_PROPERTY_CONST),
556089dc 110 SD_BUS_PROPERTY("Listen", "a(ss)", property_get_listen, 0, SD_BUS_VTABLE_PROPERTY_CONST),
811ba7a0 111 SD_BUS_PROPERTY("Symlinks", "as", NULL, offsetof(Socket, symlinks), SD_BUS_VTABLE_PROPERTY_CONST),
556089dc
LP
112 SD_BUS_PROPERTY("Mark", "i", bus_property_get_int, offsetof(Socket, mark), SD_BUS_VTABLE_PROPERTY_CONST),
113 SD_BUS_PROPERTY("MaxConnections", "u", bus_property_get_unsigned, offsetof(Socket, max_connections), SD_BUS_VTABLE_PROPERTY_CONST),
556089dc
LP
114 SD_BUS_PROPERTY("MessageQueueMaxMessages", "x", bus_property_get_long, offsetof(Socket, mq_maxmsg), SD_BUS_VTABLE_PROPERTY_CONST),
115 SD_BUS_PROPERTY("MessageQueueMessageSize", "x", bus_property_get_long, offsetof(Socket, mq_msgsize), SD_BUS_VTABLE_PROPERTY_CONST),
556089dc
LP
116 SD_BUS_PROPERTY("ReusePort", "b", bus_property_get_bool, offsetof(Socket, reuse_port), SD_BUS_VTABLE_PROPERTY_CONST),
117 SD_BUS_PROPERTY("SmackLabel", "s", NULL, offsetof(Socket, smack), SD_BUS_VTABLE_PROPERTY_CONST),
118 SD_BUS_PROPERTY("SmackLabelIPIn", "s", NULL, offsetof(Socket, smack_ip_in), SD_BUS_VTABLE_PROPERTY_CONST),
119 SD_BUS_PROPERTY("SmackLabelIPOut", "s", NULL, offsetof(Socket, smack_ip_out), SD_BUS_VTABLE_PROPERTY_CONST),
aec8de63
LP
120 SD_BUS_PROPERTY("ControlPID", "u", bus_property_get_pid, offsetof(Socket, control_pid), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
121 SD_BUS_PROPERTY("Result", "s", property_get_result, offsetof(Socket, result), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
122 SD_BUS_PROPERTY("NConnections", "u", bus_property_get_unsigned, offsetof(Socket, n_connections), 0),
123 SD_BUS_PROPERTY("NAccepted", "u", bus_property_get_unsigned, offsetof(Socket, n_accepted), 0),
556089dc
LP
124 BUS_EXEC_COMMAND_LIST_VTABLE("ExecStartPre", offsetof(Socket, exec_command[SOCKET_EXEC_START_PRE]), SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION),
125 BUS_EXEC_COMMAND_LIST_VTABLE("ExecStartPost", offsetof(Socket, exec_command[SOCKET_EXEC_START_POST]), SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION),
126 BUS_EXEC_COMMAND_LIST_VTABLE("ExecStopPre", offsetof(Socket, exec_command[SOCKET_EXEC_STOP_PRE]), SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION),
127 BUS_EXEC_COMMAND_LIST_VTABLE("ExecStopPost", offsetof(Socket, exec_command[SOCKET_EXEC_STOP_POST]), SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION),
718db961 128 SD_BUS_VTABLE_END
d200735e
MS
129};
130
74c964d3
LP
131int bus_socket_set_property(
132 Unit *u,
133 const char *name,
718db961 134 sd_bus_message *message,
74c964d3 135 UnitSetPropertiesMode mode,
718db961 136 sd_bus_error *error) {
74c964d3
LP
137
138 Socket *s = SOCKET(u);
74c964d3 139
718db961 140 assert(s);
74c964d3 141 assert(name);
718db961 142 assert(message);
74c964d3 143
718db961 144 return bus_cgroup_set_property(u, &s->cgroup_context, name, message, mode, error);
74c964d3
LP
145}
146
147int bus_socket_commit_properties(Unit *u) {
148 assert(u);
149
bc432dc7 150 unit_update_cgroup_members_masks(u);
74c964d3 151 unit_realize_cgroup(u);
bc432dc7 152
74c964d3
LP
153 return 0;
154}