chiark / gitweb /
60ea3cb25cfb4b794c1444829395ae9e4b893acf
[elogind.git] / src / core / socket.c
1 /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
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
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
22 #include <sys/types.h>
23 #include <sys/stat.h>
24 #include <unistd.h>
25 #include <errno.h>
26 #include <fcntl.h>
27 #include <sys/epoll.h>
28 #include <signal.h>
29 #include <arpa/inet.h>
30 #include <mqueue.h>
31
32 #include "unit.h"
33 #include "socket.h"
34 #include "netinet/tcp.h"
35 #include "log.h"
36 #include "load-dropin.h"
37 #include "load-fragment.h"
38 #include "strv.h"
39 #include "mkdir.h"
40 #include "unit-name.h"
41 #include "dbus-socket.h"
42 #include "missing.h"
43 #include "special.h"
44 #include "bus-errors.h"
45 #include "label.h"
46 #include "exit-status.h"
47 #include "def.h"
48
49 static const UnitActiveState state_translation_table[_SOCKET_STATE_MAX] = {
50         [SOCKET_DEAD] = UNIT_INACTIVE,
51         [SOCKET_START_PRE] = UNIT_ACTIVATING,
52         [SOCKET_START_POST] = UNIT_ACTIVATING,
53         [SOCKET_LISTENING] = UNIT_ACTIVE,
54         [SOCKET_RUNNING] = UNIT_ACTIVE,
55         [SOCKET_STOP_PRE] = UNIT_DEACTIVATING,
56         [SOCKET_STOP_PRE_SIGTERM] = UNIT_DEACTIVATING,
57         [SOCKET_STOP_PRE_SIGKILL] = UNIT_DEACTIVATING,
58         [SOCKET_STOP_POST] = UNIT_DEACTIVATING,
59         [SOCKET_FINAL_SIGTERM] = UNIT_DEACTIVATING,
60         [SOCKET_FINAL_SIGKILL] = UNIT_DEACTIVATING,
61         [SOCKET_FAILED] = UNIT_FAILED
62 };
63
64 static void socket_init(Unit *u) {
65         Socket *s = SOCKET(u);
66
67         assert(u);
68         assert(u->load_state == UNIT_STUB);
69
70         s->backlog = SOMAXCONN;
71         s->timeout_usec = DEFAULT_TIMEOUT_USEC;
72         s->directory_mode = 0755;
73         s->socket_mode = 0666;
74
75         s->max_connections = 64;
76
77         s->priority = -1;
78         s->ip_tos = -1;
79         s->ip_ttl = -1;
80         s->mark = -1;
81
82         exec_context_init(&s->exec_context);
83         s->exec_context.std_output = u->manager->default_std_output;
84         s->exec_context.std_error = u->manager->default_std_error;
85
86         s->control_command_id = _SOCKET_EXEC_COMMAND_INVALID;
87 }
88
89 static void socket_unwatch_control_pid(Socket *s) {
90         assert(s);
91
92         if (s->control_pid <= 0)
93                 return;
94
95         unit_unwatch_pid(UNIT(s), s->control_pid);
96         s->control_pid = 0;
97 }
98
99 static void socket_done(Unit *u) {
100         Socket *s = SOCKET(u);
101         SocketPort *p;
102
103         assert(s);
104
105         while ((p = s->ports)) {
106                 LIST_REMOVE(SocketPort, port, s->ports, p);
107
108                 if (p->fd >= 0) {
109                         unit_unwatch_fd(UNIT(s), &p->fd_watch);
110                         close_nointr_nofail(p->fd);
111                 }
112
113                 free(p->path);
114                 free(p);
115         }
116
117         exec_context_done(&s->exec_context);
118         exec_command_free_array(s->exec_command, _SOCKET_EXEC_COMMAND_MAX);
119         s->control_command = NULL;
120
121         socket_unwatch_control_pid(s);
122
123         unit_ref_unset(&s->service);
124
125         free(s->tcp_congestion);
126         s->tcp_congestion = NULL;
127
128         free(s->bind_to_device);
129         s->bind_to_device = NULL;
130
131         unit_unwatch_timer(u, &s->timer_watch);
132 }
133
134 static int socket_instantiate_service(Socket *s) {
135         char *prefix, *name;
136         int r;
137         Unit *u;
138
139         assert(s);
140
141         /* This fills in s->service if it isn't filled in yet. For
142          * Accept=yes sockets we create the next connection service
143          * here. For Accept=no this is mostly a NOP since the service
144          * is figured out at load time anyway. */
145
146         if (UNIT_DEREF(s->service))
147                 return 0;
148
149         assert(s->accept);
150
151         if (!(prefix = unit_name_to_prefix(UNIT(s)->id)))
152                 return -ENOMEM;
153
154         r = asprintf(&name, "%s@%u.service", prefix, s->n_accepted);
155         free(prefix);
156
157         if (r < 0)
158                 return -ENOMEM;
159
160         r = manager_load_unit(UNIT(s)->manager, name, NULL, NULL, &u);
161         free(name);
162
163         if (r < 0)
164                 return r;
165
166 #ifdef HAVE_SYSV_COMPAT
167         if (SERVICE(u)->sysv_path) {
168                 log_error("Using SysV services for socket activation is not supported. Refusing.");
169                 return -ENOENT;
170         }
171 #endif
172
173         u->no_gc = true;
174         unit_ref_set(&s->service, u);
175
176         return unit_add_two_dependencies(UNIT(s), UNIT_BEFORE, UNIT_TRIGGERS, u, false);
177 }
178
179 static bool have_non_accept_socket(Socket *s) {
180         SocketPort *p;
181
182         assert(s);
183
184         if (!s->accept)
185                 return true;
186
187         LIST_FOREACH(port, p, s->ports) {
188
189                 if (p->type != SOCKET_SOCKET)
190                         return true;
191
192                 if (!socket_address_can_accept(&p->address))
193                         return true;
194         }
195
196         return false;
197 }
198
199 static int socket_verify(Socket *s) {
200         assert(s);
201
202         if (UNIT(s)->load_state != UNIT_LOADED)
203                 return 0;
204
205         if (!s->ports) {
206                 log_error("%s lacks Listen setting. Refusing.", UNIT(s)->id);
207                 return -EINVAL;
208         }
209
210         if (s->accept && have_non_accept_socket(s)) {
211                 log_error("%s configured for accepting sockets, but sockets are non-accepting. Refusing.", UNIT(s)->id);
212                 return -EINVAL;
213         }
214
215         if (s->accept && s->max_connections <= 0) {
216                 log_error("%s's MaxConnection setting too small. Refusing.", UNIT(s)->id);
217                 return -EINVAL;
218         }
219
220         if (s->accept && UNIT_DEREF(s->service)) {
221                 log_error("Explicit service configuration for accepting sockets not supported on %s. Refusing.", UNIT(s)->id);
222                 return -EINVAL;
223         }
224
225         if (s->exec_context.pam_name && s->exec_context.kill_mode != KILL_CONTROL_GROUP) {
226                 log_error("%s has PAM enabled. Kill mode must be set to 'control-group'. Refusing.", UNIT(s)->id);
227                 return -EINVAL;
228         }
229
230         return 0;
231 }
232
233 static bool socket_needs_mount(Socket *s, const char *prefix) {
234         SocketPort *p;
235
236         assert(s);
237
238         LIST_FOREACH(port, p, s->ports) {
239
240                 if (p->type == SOCKET_SOCKET) {
241                         if (socket_address_needs_mount(&p->address, prefix))
242                                 return true;
243                 } else if (p->type == SOCKET_FIFO || p->type == SOCKET_SPECIAL) {
244                         if (path_startswith(p->path, prefix))
245                                 return true;
246                 }
247         }
248
249         return false;
250 }
251
252 int socket_add_one_mount_link(Socket *s, Mount *m) {
253         int r;
254
255         assert(s);
256         assert(m);
257
258         if (UNIT(s)->load_state != UNIT_LOADED ||
259             UNIT(m)->load_state != UNIT_LOADED)
260                 return 0;
261
262         if (!socket_needs_mount(s, m->where))
263                 return 0;
264
265         if ((r = unit_add_two_dependencies(UNIT(s), UNIT_AFTER, UNIT_REQUIRES, UNIT(m), true)) < 0)
266                 return r;
267
268         return 0;
269 }
270
271 static int socket_add_mount_links(Socket *s) {
272         Unit *other;
273         int r;
274
275         assert(s);
276
277         LIST_FOREACH(units_by_type, other, UNIT(s)->manager->units_by_type[UNIT_MOUNT])
278                 if ((r = socket_add_one_mount_link(s, MOUNT(other))) < 0)
279                         return r;
280
281         return 0;
282 }
283
284 static int socket_add_device_link(Socket *s) {
285         char *t;
286         int r;
287
288         assert(s);
289
290         if (!s->bind_to_device)
291                 return 0;
292
293         if (asprintf(&t, "/sys/subsystem/net/devices/%s", s->bind_to_device) < 0)
294                 return -ENOMEM;
295
296         r = unit_add_node_link(UNIT(s), t, false);
297         free(t);
298
299         return r;
300 }
301
302 static int socket_add_default_dependencies(Socket *s) {
303         int r;
304         assert(s);
305
306         if (UNIT(s)->manager->running_as == MANAGER_SYSTEM) {
307                 if ((r = unit_add_dependency_by_name(UNIT(s), UNIT_BEFORE, SPECIAL_SOCKETS_TARGET, NULL, true)) < 0)
308                         return r;
309
310                 if ((r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_AFTER, UNIT_REQUIRES, SPECIAL_SYSINIT_TARGET, NULL, true)) < 0)
311                         return r;
312         }
313
314         return unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_SHUTDOWN_TARGET, NULL, true);
315 }
316
317 static bool socket_has_exec(Socket *s) {
318         unsigned i;
319         assert(s);
320
321         for (i = 0; i < _SOCKET_EXEC_COMMAND_MAX; i++)
322                 if (s->exec_command[i])
323                         return true;
324
325         return false;
326 }
327
328 static int socket_load(Unit *u) {
329         Socket *s = SOCKET(u);
330         int r;
331
332         assert(u);
333         assert(u->load_state == UNIT_STUB);
334
335         if ((r = unit_load_fragment_and_dropin(u)) < 0)
336                 return r;
337
338         /* This is a new unit? Then let's add in some extras */
339         if (u->load_state == UNIT_LOADED) {
340
341                 if (have_non_accept_socket(s)) {
342
343                         if (!UNIT_DEREF(s->service)) {
344                                 Unit *x;
345
346                                 r = unit_load_related_unit(u, ".service", &x);
347                                 if (r < 0)
348                                         return r;
349
350                                 unit_ref_set(&s->service, x);
351                         }
352
353                         r = unit_add_two_dependencies(u, UNIT_BEFORE, UNIT_TRIGGERS, UNIT_DEREF(s->service), true);
354                         if (r < 0)
355                                 return r;
356                 }
357
358                 if ((r = socket_add_mount_links(s)) < 0)
359                         return r;
360
361                 if ((r = socket_add_device_link(s)) < 0)
362                         return r;
363
364                 if (socket_has_exec(s))
365                         if ((r = unit_add_exec_dependencies(u, &s->exec_context)) < 0)
366                                 return r;
367
368                 if ((r = unit_add_default_cgroups(u)) < 0)
369                         return r;
370
371                 if (UNIT(s)->default_dependencies)
372                         if ((r = socket_add_default_dependencies(s)) < 0)
373                                 return r;
374         }
375
376         return socket_verify(s);
377 }
378
379 static const char* listen_lookup(int family, int type) {
380
381         if (family == AF_NETLINK)
382                 return "ListenNetlink";
383
384         if (type == SOCK_STREAM)
385                 return "ListenStream";
386         else if (type == SOCK_DGRAM)
387                 return "ListenDatagram";
388         else if (type == SOCK_SEQPACKET)
389                 return "ListenSequentialPacket";
390
391         assert_not_reached("Unknown socket type");
392         return NULL;
393 }
394
395 static void socket_dump(Unit *u, FILE *f, const char *prefix) {
396
397         SocketExecCommand c;
398         Socket *s = SOCKET(u);
399         SocketPort *p;
400         const char *prefix2;
401         char *p2;
402
403         assert(s);
404         assert(f);
405
406         p2 = strappend(prefix, "\t");
407         prefix2 = p2 ? p2 : prefix;
408
409         fprintf(f,
410                 "%sSocket State: %s\n"
411                 "%sResult: %s\n"
412                 "%sBindIPv6Only: %s\n"
413                 "%sBacklog: %u\n"
414                 "%sSocketMode: %04o\n"
415                 "%sDirectoryMode: %04o\n"
416                 "%sKeepAlive: %s\n"
417                 "%sFreeBind: %s\n"
418                 "%sTransparent: %s\n"
419                 "%sBroadcast: %s\n"
420                 "%sPassCredentials: %s\n"
421                 "%sPassSecurity: %s\n"
422                 "%sTCPCongestion: %s\n",
423                 prefix, socket_state_to_string(s->state),
424                 prefix, socket_result_to_string(s->result),
425                 prefix, socket_address_bind_ipv6_only_to_string(s->bind_ipv6_only),
426                 prefix, s->backlog,
427                 prefix, s->socket_mode,
428                 prefix, s->directory_mode,
429                 prefix, yes_no(s->keep_alive),
430                 prefix, yes_no(s->free_bind),
431                 prefix, yes_no(s->transparent),
432                 prefix, yes_no(s->broadcast),
433                 prefix, yes_no(s->pass_cred),
434                 prefix, yes_no(s->pass_sec),
435                 prefix, strna(s->tcp_congestion));
436
437         if (s->control_pid > 0)
438                 fprintf(f,
439                         "%sControl PID: %lu\n",
440                         prefix, (unsigned long) s->control_pid);
441
442         if (s->bind_to_device)
443                 fprintf(f,
444                         "%sBindToDevice: %s\n",
445                         prefix, s->bind_to_device);
446
447         if (s->accept)
448                 fprintf(f,
449                         "%sAccepted: %u\n"
450                         "%sNConnections: %u\n"
451                         "%sMaxConnections: %u\n",
452                         prefix, s->n_accepted,
453                         prefix, s->n_connections,
454                         prefix, s->max_connections);
455
456         if (s->priority >= 0)
457                 fprintf(f,
458                         "%sPriority: %i\n",
459                         prefix, s->priority);
460
461         if (s->receive_buffer > 0)
462                 fprintf(f,
463                         "%sReceiveBuffer: %zu\n",
464                         prefix, s->receive_buffer);
465
466         if (s->send_buffer > 0)
467                 fprintf(f,
468                         "%sSendBuffer: %zu\n",
469                         prefix, s->send_buffer);
470
471         if (s->ip_tos >= 0)
472                 fprintf(f,
473                         "%sIPTOS: %i\n",
474                         prefix, s->ip_tos);
475
476         if (s->ip_ttl >= 0)
477                 fprintf(f,
478                         "%sIPTTL: %i\n",
479                         prefix, s->ip_ttl);
480
481         if (s->pipe_size > 0)
482                 fprintf(f,
483                         "%sPipeSize: %zu\n",
484                         prefix, s->pipe_size);
485
486         if (s->mark >= 0)
487                 fprintf(f,
488                         "%sMark: %i\n",
489                         prefix, s->mark);
490
491         if (s->mq_maxmsg > 0)
492                 fprintf(f,
493                         "%sMessageQueueMaxMessages: %li\n",
494                         prefix, s->mq_maxmsg);
495
496         if (s->mq_msgsize > 0)
497                 fprintf(f,
498                         "%sMessageQueueMessageSize: %li\n",
499                         prefix, s->mq_msgsize);
500
501         LIST_FOREACH(port, p, s->ports) {
502
503                 if (p->type == SOCKET_SOCKET) {
504                         const char *t;
505                         int r;
506                         char *k = NULL;
507
508                         if ((r = socket_address_print(&p->address, &k)) < 0)
509                                 t = strerror(-r);
510                         else
511                                 t = k;
512
513                         fprintf(f, "%s%s: %s\n", prefix, listen_lookup(socket_address_family(&p->address), p->address.type), t);
514                         free(k);
515                 } else if (p->type == SOCKET_SPECIAL)
516                         fprintf(f, "%sListenSpecial: %s\n", prefix, p->path);
517                 else if (p->type == SOCKET_MQUEUE)
518                         fprintf(f, "%sListenMessageQueue: %s\n", prefix, p->path);
519                 else
520                         fprintf(f, "%sListenFIFO: %s\n", prefix, p->path);
521         }
522
523         exec_context_dump(&s->exec_context, f, prefix);
524
525         for (c = 0; c < _SOCKET_EXEC_COMMAND_MAX; c++) {
526                 if (!s->exec_command[c])
527                         continue;
528
529                 fprintf(f, "%s-> %s:\n",
530                         prefix, socket_exec_command_to_string(c));
531
532                 exec_command_dump_list(s->exec_command[c], f, prefix2);
533         }
534
535         free(p2);
536 }
537
538 static int instance_from_socket(int fd, unsigned nr, char **instance) {
539         socklen_t l;
540         char *r;
541         union {
542                 struct sockaddr sa;
543                 struct sockaddr_un un;
544                 struct sockaddr_in in;
545                 struct sockaddr_in6 in6;
546                 struct sockaddr_storage storage;
547         } local, remote;
548
549         assert(fd >= 0);
550         assert(instance);
551
552         l = sizeof(local);
553         if (getsockname(fd, &local.sa, &l) < 0)
554                 return -errno;
555
556         l = sizeof(remote);
557         if (getpeername(fd, &remote.sa, &l) < 0)
558                 return -errno;
559
560         switch (local.sa.sa_family) {
561
562         case AF_INET: {
563                 uint32_t
564                         a = ntohl(local.in.sin_addr.s_addr),
565                         b = ntohl(remote.in.sin_addr.s_addr);
566
567                 if (asprintf(&r,
568                              "%u-%u.%u.%u.%u:%u-%u.%u.%u.%u:%u",
569                              nr,
570                              a >> 24, (a >> 16) & 0xFF, (a >> 8) & 0xFF, a & 0xFF,
571                              ntohs(local.in.sin_port),
572                              b >> 24, (b >> 16) & 0xFF, (b >> 8) & 0xFF, b & 0xFF,
573                              ntohs(remote.in.sin_port)) < 0)
574                         return -ENOMEM;
575
576                 break;
577         }
578
579         case AF_INET6: {
580                 static const char ipv4_prefix[] = {
581                         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF
582                 };
583
584                 if (memcmp(&local.in6.sin6_addr, ipv4_prefix, sizeof(ipv4_prefix)) == 0 &&
585                     memcmp(&remote.in6.sin6_addr, ipv4_prefix, sizeof(ipv4_prefix)) == 0) {
586                         const uint8_t
587                                 *a = local.in6.sin6_addr.s6_addr+12,
588                                 *b = remote.in6.sin6_addr.s6_addr+12;
589
590                         if (asprintf(&r,
591                                      "%u-%u.%u.%u.%u:%u-%u.%u.%u.%u:%u",
592                                      nr,
593                                      a[0], a[1], a[2], a[3],
594                                      ntohs(local.in6.sin6_port),
595                                      b[0], b[1], b[2], b[3],
596                                      ntohs(remote.in6.sin6_port)) < 0)
597                                 return -ENOMEM;
598                 } else {
599                         char a[INET6_ADDRSTRLEN], b[INET6_ADDRSTRLEN];
600
601                         if (asprintf(&r,
602                                      "%u-%s:%u-%s:%u",
603                                      nr,
604                                      inet_ntop(AF_INET6, &local.in6.sin6_addr, a, sizeof(a)),
605                                      ntohs(local.in6.sin6_port),
606                                      inet_ntop(AF_INET6, &remote.in6.sin6_addr, b, sizeof(b)),
607                                      ntohs(remote.in6.sin6_port)) < 0)
608                                 return -ENOMEM;
609                 }
610
611                 break;
612         }
613
614         case AF_UNIX: {
615                 struct ucred ucred;
616
617                 l = sizeof(ucred);
618                 if (getsockopt(fd, SOL_SOCKET, SO_PEERCRED, &ucred, &l) < 0)
619                         return -errno;
620
621                 if (asprintf(&r,
622                              "%u-%lu-%lu",
623                              nr,
624                              (unsigned long) ucred.pid,
625                              (unsigned long) ucred.uid) < 0)
626                         return -ENOMEM;
627
628                 break;
629         }
630
631         default:
632                 assert_not_reached("Unhandled socket type.");
633         }
634
635         *instance = r;
636         return 0;
637 }
638
639 static void socket_close_fds(Socket *s) {
640         SocketPort *p;
641
642         assert(s);
643
644         LIST_FOREACH(port, p, s->ports) {
645                 if (p->fd < 0)
646                         continue;
647
648                 unit_unwatch_fd(UNIT(s), &p->fd_watch);
649                 close_nointr_nofail(p->fd);
650
651                 /* One little note: we should never delete any sockets
652                  * in the file system here! After all some other
653                  * process we spawned might still have a reference of
654                  * this fd and wants to continue to use it. Therefore
655                  * we delete sockets in the file system before we
656                  * create a new one, not after we stopped using
657                  * one! */
658
659                 p->fd = -1;
660         }
661 }
662
663 static void socket_apply_socket_options(Socket *s, int fd) {
664         assert(s);
665         assert(fd >= 0);
666
667         if (s->keep_alive) {
668                 int b = s->keep_alive;
669                 if (setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &b, sizeof(b)) < 0)
670                         log_warning("SO_KEEPALIVE failed: %m");
671         }
672
673         if (s->broadcast) {
674                 int one = 1;
675                 if (setsockopt(fd, SOL_SOCKET, SO_BROADCAST, &one, sizeof(one)) < 0)
676                         log_warning("SO_BROADCAST failed: %m");
677         }
678
679         if (s->pass_cred) {
680                 int one = 1;
681                 if (setsockopt(fd, SOL_SOCKET, SO_PASSCRED, &one, sizeof(one)) < 0)
682                         log_warning("SO_PASSCRED failed: %m");
683         }
684
685         if (s->pass_sec) {
686                 int one = 1;
687                 if (setsockopt(fd, SOL_SOCKET, SO_PASSSEC, &one, sizeof(one)) < 0)
688                         log_warning("SO_PASSSEC failed: %m");
689         }
690
691         if (s->priority >= 0)
692                 if (setsockopt(fd, SOL_SOCKET, SO_PRIORITY, &s->priority, sizeof(s->priority)) < 0)
693                         log_warning("SO_PRIORITY failed: %m");
694
695         if (s->receive_buffer > 0) {
696                 int value = (int) s->receive_buffer;
697
698                 /* We first try with SO_RCVBUFFORCE, in case we have the perms for that */
699
700                 if (setsockopt(fd, SOL_SOCKET, SO_RCVBUFFORCE, &value, sizeof(value)) < 0)
701                         if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &value, sizeof(value)) < 0)
702                                 log_warning("SO_RCVBUF failed: %m");
703         }
704
705         if (s->send_buffer > 0) {
706                 int value = (int) s->send_buffer;
707                 if (setsockopt(fd, SOL_SOCKET, SO_SNDBUFFORCE, &value, sizeof(value)) < 0)
708                         if (setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &value, sizeof(value)) < 0)
709                                 log_warning("SO_SNDBUF failed: %m");
710         }
711
712         if (s->mark >= 0)
713                 if (setsockopt(fd, SOL_SOCKET, SO_MARK, &s->mark, sizeof(s->mark)) < 0)
714                         log_warning("SO_MARK failed: %m");
715
716         if (s->ip_tos >= 0)
717                 if (setsockopt(fd, IPPROTO_IP, IP_TOS, &s->ip_tos, sizeof(s->ip_tos)) < 0)
718                         log_warning("IP_TOS failed: %m");
719
720         if (s->ip_ttl >= 0) {
721                 int r, x;
722
723                 r = setsockopt(fd, IPPROTO_IP, IP_TTL, &s->ip_ttl, sizeof(s->ip_ttl));
724
725                 if (socket_ipv6_is_supported())
726                         x = setsockopt(fd, IPPROTO_IPV6, IPV6_UNICAST_HOPS, &s->ip_ttl, sizeof(s->ip_ttl));
727                 else {
728                         x = -1;
729                         errno = EAFNOSUPPORT;
730                 }
731
732                 if (r < 0 && x < 0)
733                         log_warning("IP_TTL/IPV6_UNICAST_HOPS failed: %m");
734         }
735
736         if (s->tcp_congestion)
737                 if (setsockopt(fd, SOL_TCP, TCP_CONGESTION, s->tcp_congestion, strlen(s->tcp_congestion)+1) < 0)
738                         log_warning("TCP_CONGESTION failed: %m");
739 }
740
741 static void socket_apply_fifo_options(Socket *s, int fd) {
742         assert(s);
743         assert(fd >= 0);
744
745         if (s->pipe_size > 0)
746                 if (fcntl(fd, F_SETPIPE_SZ, s->pipe_size) < 0)
747                         log_warning("F_SETPIPE_SZ: %m");
748 }
749
750 static int fifo_address_create(
751                 const char *path,
752                 mode_t directory_mode,
753                 mode_t socket_mode,
754                 int *_fd) {
755
756         int fd = -1, r = 0;
757         struct stat st;
758         mode_t old_mask;
759
760         assert(path);
761         assert(_fd);
762
763         mkdir_parents(path, directory_mode);
764
765         r = label_context_set(path, S_IFIFO);
766         if (r < 0)
767                 goto fail;
768
769         /* Enforce the right access mode for the fifo */
770         old_mask = umask(~ socket_mode);
771
772         /* Include the original umask in our mask */
773         umask(~socket_mode | old_mask);
774
775         r = mkfifo(path, socket_mode);
776         umask(old_mask);
777
778         if (r < 0 && errno != EEXIST) {
779                 r = -errno;
780                 goto fail;
781         }
782
783         if ((fd = open(path, O_RDWR|O_CLOEXEC|O_NOCTTY|O_NONBLOCK|O_NOFOLLOW)) < 0) {
784                 r = -errno;
785                 goto fail;
786         }
787
788         label_context_clear();
789
790         if (fstat(fd, &st) < 0) {
791                 r = -errno;
792                 goto fail;
793         }
794
795         if (!S_ISFIFO(st.st_mode) ||
796             (st.st_mode & 0777) != (socket_mode & ~old_mask) ||
797             st.st_uid != getuid() ||
798             st.st_gid != getgid()) {
799
800                 r = -EEXIST;
801                 goto fail;
802         }
803
804         *_fd = fd;
805         return 0;
806
807 fail:
808         label_context_clear();
809
810         if (fd >= 0)
811                 close_nointr_nofail(fd);
812
813         return r;
814 }
815
816 static int special_address_create(
817                 const char *path,
818                 int *_fd) {
819
820         int fd = -1, r = 0;
821         struct stat st;
822
823         assert(path);
824         assert(_fd);
825
826         if ((fd = open(path, O_RDONLY|O_CLOEXEC|O_NOCTTY|O_NONBLOCK|O_NOFOLLOW)) < 0) {
827                 r = -errno;
828                 goto fail;
829         }
830
831         if (fstat(fd, &st) < 0) {
832                 r = -errno;
833                 goto fail;
834         }
835
836         /* Check whether this is a /proc, /sys or /dev file or char device */
837         if (!S_ISREG(st.st_mode) && !S_ISCHR(st.st_mode)) {
838                 r = -EEXIST;
839                 goto fail;
840         }
841
842         *_fd = fd;
843         return 0;
844
845 fail:
846         if (fd >= 0)
847                 close_nointr_nofail(fd);
848
849         return r;
850 }
851
852 static int mq_address_create(
853                 const char *path,
854                 mode_t mq_mode,
855                 long maxmsg,
856                 long msgsize,
857                 int *_fd) {
858
859         int fd = -1, r = 0;
860         struct stat st;
861         mode_t old_mask;
862         struct mq_attr _attr, *attr = NULL;
863
864         assert(path);
865         assert(_fd);
866
867         if (maxmsg > 0 && msgsize > 0) {
868                 zero(_attr);
869                 _attr.mq_flags = O_NONBLOCK;
870                 _attr.mq_maxmsg = maxmsg;
871                 _attr.mq_msgsize = msgsize;
872                 attr = &_attr;
873         }
874
875         /* Enforce the right access mode for the mq */
876         old_mask = umask(~ mq_mode);
877
878         /* Include the original umask in our mask */
879         umask(~mq_mode | old_mask);
880
881         fd = mq_open(path, O_RDONLY|O_CLOEXEC|O_NONBLOCK|O_CREAT, mq_mode, attr);
882         umask(old_mask);
883
884         if (fd < 0) {
885                 r = -errno;
886                 goto fail;
887         }
888
889         if (fstat(fd, &st) < 0) {
890                 r = -errno;
891                 goto fail;
892         }
893
894         if ((st.st_mode & 0777) != (mq_mode & ~old_mask) ||
895             st.st_uid != getuid() ||
896             st.st_gid != getgid()) {
897
898                 r = -EEXIST;
899                 goto fail;
900         }
901
902         *_fd = fd;
903         return 0;
904
905 fail:
906         if (fd >= 0)
907                 close_nointr_nofail(fd);
908
909         return r;
910 }
911
912 static int socket_open_fds(Socket *s) {
913         SocketPort *p;
914         int r;
915         char *label = NULL;
916         bool know_label = false;
917
918         assert(s);
919
920         LIST_FOREACH(port, p, s->ports) {
921
922                 if (p->fd >= 0)
923                         continue;
924
925                 if (p->type == SOCKET_SOCKET) {
926
927                         if (!know_label) {
928
929                                 if ((r = socket_instantiate_service(s)) < 0)
930                                         return r;
931
932                                 if (UNIT_DEREF(s->service) &&
933                                     SERVICE(UNIT_DEREF(s->service))->exec_command[SERVICE_EXEC_START]) {
934                                         r = label_get_create_label_from_exe(SERVICE(UNIT_DEREF(s->service))->exec_command[SERVICE_EXEC_START]->path, &label);
935
936                                         if (r < 0) {
937                                                 if (r != -EPERM)
938                                                         return r;
939                                         }
940                                 }
941
942                                 know_label = true;
943                         }
944
945                         if ((r = socket_address_listen(
946                                              &p->address,
947                                              s->backlog,
948                                              s->bind_ipv6_only,
949                                              s->bind_to_device,
950                                              s->free_bind,
951                                              s->transparent,
952                                              s->directory_mode,
953                                              s->socket_mode,
954                                              label,
955                                              &p->fd)) < 0)
956                                 goto rollback;
957
958                         socket_apply_socket_options(s, p->fd);
959
960                 } else  if (p->type == SOCKET_SPECIAL) {
961
962                         if ((r = special_address_create(
963                                              p->path,
964                                              &p->fd)) < 0)
965                                 goto rollback;
966
967                 } else  if (p->type == SOCKET_FIFO) {
968
969                         if ((r = fifo_address_create(
970                                              p->path,
971                                              s->directory_mode,
972                                              s->socket_mode,
973                                              &p->fd)) < 0)
974                                 goto rollback;
975
976                         socket_apply_fifo_options(s, p->fd);
977                 } else if (p->type == SOCKET_MQUEUE) {
978
979                         if ((r = mq_address_create(
980                                              p->path,
981                                              s->socket_mode,
982                                              s->mq_maxmsg,
983                                              s->mq_msgsize,
984                                              &p->fd)) < 0)
985                                 goto rollback;
986                 } else
987                         assert_not_reached("Unknown port type");
988         }
989
990         label_free(label);
991         return 0;
992
993 rollback:
994         socket_close_fds(s);
995         label_free(label);
996         return r;
997 }
998
999 static void socket_unwatch_fds(Socket *s) {
1000         SocketPort *p;
1001
1002         assert(s);
1003
1004         LIST_FOREACH(port, p, s->ports) {
1005                 if (p->fd < 0)
1006                         continue;
1007
1008                 unit_unwatch_fd(UNIT(s), &p->fd_watch);
1009         }
1010 }
1011
1012 static int socket_watch_fds(Socket *s) {
1013         SocketPort *p;
1014         int r;
1015
1016         assert(s);
1017
1018         LIST_FOREACH(port, p, s->ports) {
1019                 if (p->fd < 0)
1020                         continue;
1021
1022                 p->fd_watch.socket_accept =
1023                         s->accept &&
1024                         p->type == SOCKET_SOCKET &&
1025                         socket_address_can_accept(&p->address);
1026
1027                 if ((r = unit_watch_fd(UNIT(s), p->fd, EPOLLIN, &p->fd_watch)) < 0)
1028                         goto fail;
1029         }
1030
1031         return 0;
1032
1033 fail:
1034         socket_unwatch_fds(s);
1035         return r;
1036 }
1037
1038 static void socket_set_state(Socket *s, SocketState state) {
1039         SocketState old_state;
1040         assert(s);
1041
1042         old_state = s->state;
1043         s->state = state;
1044
1045         if (state != SOCKET_START_PRE &&
1046             state != SOCKET_START_POST &&
1047             state != SOCKET_STOP_PRE &&
1048             state != SOCKET_STOP_PRE_SIGTERM &&
1049             state != SOCKET_STOP_PRE_SIGKILL &&
1050             state != SOCKET_STOP_POST &&
1051             state != SOCKET_FINAL_SIGTERM &&
1052             state != SOCKET_FINAL_SIGKILL) {
1053                 unit_unwatch_timer(UNIT(s), &s->timer_watch);
1054                 socket_unwatch_control_pid(s);
1055                 s->control_command = NULL;
1056                 s->control_command_id = _SOCKET_EXEC_COMMAND_INVALID;
1057         }
1058
1059         if (state != SOCKET_LISTENING)
1060                 socket_unwatch_fds(s);
1061
1062         if (state != SOCKET_START_POST &&
1063             state != SOCKET_LISTENING &&
1064             state != SOCKET_RUNNING &&
1065             state != SOCKET_STOP_PRE &&
1066             state != SOCKET_STOP_PRE_SIGTERM &&
1067             state != SOCKET_STOP_PRE_SIGKILL)
1068                 socket_close_fds(s);
1069
1070         if (state != old_state)
1071                 log_debug("%s changed %s -> %s",
1072                           UNIT(s)->id,
1073                           socket_state_to_string(old_state),
1074                           socket_state_to_string(state));
1075
1076         unit_notify(UNIT(s), state_translation_table[old_state], state_translation_table[state], true);
1077 }
1078
1079 static int socket_coldplug(Unit *u) {
1080         Socket *s = SOCKET(u);
1081         int r;
1082
1083         assert(s);
1084         assert(s->state == SOCKET_DEAD);
1085
1086         if (s->deserialized_state != s->state) {
1087
1088                 if (s->deserialized_state == SOCKET_START_PRE ||
1089                     s->deserialized_state == SOCKET_START_POST ||
1090                     s->deserialized_state == SOCKET_STOP_PRE ||
1091                     s->deserialized_state == SOCKET_STOP_PRE_SIGTERM ||
1092                     s->deserialized_state == SOCKET_STOP_PRE_SIGKILL ||
1093                     s->deserialized_state == SOCKET_STOP_POST ||
1094                     s->deserialized_state == SOCKET_FINAL_SIGTERM ||
1095                     s->deserialized_state == SOCKET_FINAL_SIGKILL) {
1096
1097                         if (s->control_pid <= 0)
1098                                 return -EBADMSG;
1099
1100                         if ((r = unit_watch_pid(UNIT(s), s->control_pid)) < 0)
1101                                 return r;
1102
1103                         if ((r = unit_watch_timer(UNIT(s), s->timeout_usec, &s->timer_watch)) < 0)
1104                                 return r;
1105                 }
1106
1107                 if (s->deserialized_state == SOCKET_START_POST ||
1108                     s->deserialized_state == SOCKET_LISTENING ||
1109                     s->deserialized_state == SOCKET_RUNNING ||
1110                     s->deserialized_state == SOCKET_STOP_PRE ||
1111                     s->deserialized_state == SOCKET_STOP_PRE_SIGTERM ||
1112                     s->deserialized_state == SOCKET_STOP_PRE_SIGKILL)
1113                         if ((r = socket_open_fds(s)) < 0)
1114                                 return r;
1115
1116                 if (s->deserialized_state == SOCKET_LISTENING)
1117                         if ((r = socket_watch_fds(s)) < 0)
1118                                 return r;
1119
1120                 socket_set_state(s, s->deserialized_state);
1121         }
1122
1123         return 0;
1124 }
1125
1126 static int socket_spawn(Socket *s, ExecCommand *c, pid_t *_pid) {
1127         pid_t pid;
1128         int r;
1129         char **argv;
1130
1131         assert(s);
1132         assert(c);
1133         assert(_pid);
1134
1135         if ((r = unit_watch_timer(UNIT(s), s->timeout_usec, &s->timer_watch)) < 0)
1136                 goto fail;
1137
1138         if (!(argv = unit_full_printf_strv(UNIT(s), c->argv))) {
1139                 r = -ENOMEM;
1140                 goto fail;
1141         }
1142
1143         r = exec_spawn(c,
1144                        argv,
1145                        &s->exec_context,
1146                        NULL, 0,
1147                        UNIT(s)->manager->environment,
1148                        true,
1149                        true,
1150                        true,
1151                        UNIT(s)->manager->confirm_spawn,
1152                        UNIT(s)->cgroup_bondings,
1153                        UNIT(s)->cgroup_attributes,
1154                        NULL,
1155                        NULL,
1156                        &pid);
1157
1158         strv_free(argv);
1159         if (r < 0)
1160                 goto fail;
1161
1162         if ((r = unit_watch_pid(UNIT(s), pid)) < 0)
1163                 /* FIXME: we need to do something here */
1164                 goto fail;
1165
1166         *_pid = pid;
1167
1168         return 0;
1169
1170 fail:
1171         unit_unwatch_timer(UNIT(s), &s->timer_watch);
1172
1173         return r;
1174 }
1175
1176 static void socket_enter_dead(Socket *s, SocketResult f) {
1177         assert(s);
1178
1179         if (f != SOCKET_SUCCESS)
1180                 s->result = f;
1181
1182         socket_set_state(s, s->result != SOCKET_SUCCESS ? SOCKET_FAILED : SOCKET_DEAD);
1183 }
1184
1185 static void socket_enter_signal(Socket *s, SocketState state, SocketResult f);
1186
1187 static void socket_enter_stop_post(Socket *s, SocketResult f) {
1188         int r;
1189         assert(s);
1190
1191         if (f != SOCKET_SUCCESS)
1192                 s->result = f;
1193
1194         socket_unwatch_control_pid(s);
1195
1196         s->control_command_id = SOCKET_EXEC_STOP_POST;
1197
1198         if ((s->control_command = s->exec_command[SOCKET_EXEC_STOP_POST])) {
1199                 if ((r = socket_spawn(s, s->control_command, &s->control_pid)) < 0)
1200                         goto fail;
1201
1202                 socket_set_state(s, SOCKET_STOP_POST);
1203         } else
1204                 socket_enter_signal(s, SOCKET_FINAL_SIGTERM, SOCKET_SUCCESS);
1205
1206         return;
1207
1208 fail:
1209         log_warning("%s failed to run 'stop-post' task: %s", UNIT(s)->id, strerror(-r));
1210         socket_enter_signal(s, SOCKET_FINAL_SIGTERM, SOCKET_FAILURE_RESOURCES);
1211 }
1212
1213 static void socket_enter_signal(Socket *s, SocketState state, SocketResult f) {
1214         int r;
1215         Set *pid_set = NULL;
1216         bool wait_for_exit = false;
1217
1218         assert(s);
1219
1220         if (f != SOCKET_SUCCESS)
1221                 s->result = f;
1222
1223         if (s->exec_context.kill_mode != KILL_NONE) {
1224                 int sig = (state == SOCKET_STOP_PRE_SIGTERM || state == SOCKET_FINAL_SIGTERM) ? s->exec_context.kill_signal : SIGKILL;
1225
1226                 if (s->control_pid > 0) {
1227                         if (kill_and_sigcont(s->control_pid, sig) < 0 && errno != ESRCH)
1228
1229                                 log_warning("Failed to kill control process %li: %m", (long) s->control_pid);
1230                         else
1231                                 wait_for_exit = true;
1232                 }
1233
1234                 if (s->exec_context.kill_mode == KILL_CONTROL_GROUP) {
1235
1236                         if (!(pid_set = set_new(trivial_hash_func, trivial_compare_func))) {
1237                                 r = -ENOMEM;
1238                                 goto fail;
1239                         }
1240
1241                         /* Exclude the control pid from being killed via the cgroup */
1242                         if (s->control_pid > 0)
1243                                 if ((r = set_put(pid_set, LONG_TO_PTR(s->control_pid))) < 0)
1244                                         goto fail;
1245
1246                         r = cgroup_bonding_kill_list(UNIT(s)->cgroup_bondings, sig, true, false, pid_set, NULL);
1247                         if (r < 0) {
1248                                 if (r != -EAGAIN && r != -ESRCH && r != -ENOENT)
1249                                         log_warning("Failed to kill control group: %s", strerror(-r));
1250                         } else if (r > 0)
1251                                 wait_for_exit = true;
1252
1253                         set_free(pid_set);
1254                         pid_set = NULL;
1255                 }
1256         }
1257
1258         if (wait_for_exit) {
1259                 if ((r = unit_watch_timer(UNIT(s), s->timeout_usec, &s->timer_watch)) < 0)
1260                         goto fail;
1261
1262                 socket_set_state(s, state);
1263         } else if (state == SOCKET_STOP_PRE_SIGTERM || state == SOCKET_STOP_PRE_SIGKILL)
1264                 socket_enter_stop_post(s, SOCKET_SUCCESS);
1265         else
1266                 socket_enter_dead(s, SOCKET_SUCCESS);
1267
1268         return;
1269
1270 fail:
1271         log_warning("%s failed to kill processes: %s", UNIT(s)->id, strerror(-r));
1272
1273         if (state == SOCKET_STOP_PRE_SIGTERM || state == SOCKET_STOP_PRE_SIGKILL)
1274                 socket_enter_stop_post(s, SOCKET_FAILURE_RESOURCES);
1275         else
1276                 socket_enter_dead(s, SOCKET_FAILURE_RESOURCES);
1277
1278         if (pid_set)
1279                 set_free(pid_set);
1280 }
1281
1282 static void socket_enter_stop_pre(Socket *s, SocketResult f) {
1283         int r;
1284         assert(s);
1285
1286         if (f != SOCKET_SUCCESS)
1287                 s->result = f;
1288
1289         socket_unwatch_control_pid(s);
1290
1291         s->control_command_id = SOCKET_EXEC_STOP_PRE;
1292
1293         if ((s->control_command = s->exec_command[SOCKET_EXEC_STOP_PRE])) {
1294                 if ((r = socket_spawn(s, s->control_command, &s->control_pid)) < 0)
1295                         goto fail;
1296
1297                 socket_set_state(s, SOCKET_STOP_PRE);
1298         } else
1299                 socket_enter_stop_post(s, SOCKET_SUCCESS);
1300
1301         return;
1302
1303 fail:
1304         log_warning("%s failed to run 'stop-pre' task: %s", UNIT(s)->id, strerror(-r));
1305         socket_enter_stop_post(s, SOCKET_FAILURE_RESOURCES);
1306 }
1307
1308 static void socket_enter_listening(Socket *s) {
1309         int r;
1310         assert(s);
1311
1312         r = socket_watch_fds(s);
1313         if (r < 0) {
1314                 log_warning("%s failed to watch sockets: %s", UNIT(s)->id, strerror(-r));
1315                 goto fail;
1316         }
1317
1318         socket_set_state(s, SOCKET_LISTENING);
1319         return;
1320
1321 fail:
1322         socket_enter_stop_pre(s, SOCKET_FAILURE_RESOURCES);
1323 }
1324
1325 static void socket_enter_start_post(Socket *s) {
1326         int r;
1327         assert(s);
1328
1329         r = socket_open_fds(s);
1330         if (r < 0) {
1331                 log_warning("%s failed to listen on sockets: %s", UNIT(s)->id, strerror(-r));
1332                 goto fail;
1333         }
1334
1335         socket_unwatch_control_pid(s);
1336
1337         s->control_command_id = SOCKET_EXEC_START_POST;
1338
1339         if ((s->control_command = s->exec_command[SOCKET_EXEC_START_POST])) {
1340                 r = socket_spawn(s, s->control_command, &s->control_pid);
1341                 if (r < 0) {
1342                         log_warning("%s failed to run 'start-post' task: %s", UNIT(s)->id, strerror(-r));
1343                         goto fail;
1344                 }
1345
1346                 socket_set_state(s, SOCKET_START_POST);
1347         } else
1348                 socket_enter_listening(s);
1349
1350         return;
1351
1352 fail:
1353         socket_enter_stop_pre(s, SOCKET_FAILURE_RESOURCES);
1354 }
1355
1356 static void socket_enter_start_pre(Socket *s) {
1357         int r;
1358         assert(s);
1359
1360         socket_unwatch_control_pid(s);
1361
1362         s->control_command_id = SOCKET_EXEC_START_PRE;
1363
1364         if ((s->control_command = s->exec_command[SOCKET_EXEC_START_PRE])) {
1365                 if ((r = socket_spawn(s, s->control_command, &s->control_pid)) < 0)
1366                         goto fail;
1367
1368                 socket_set_state(s, SOCKET_START_PRE);
1369         } else
1370                 socket_enter_start_post(s);
1371
1372         return;
1373
1374 fail:
1375         log_warning("%s failed to run 'start-pre' task: %s", UNIT(s)->id, strerror(-r));
1376         socket_enter_dead(s, SOCKET_FAILURE_RESOURCES);
1377 }
1378
1379 static void socket_enter_running(Socket *s, int cfd) {
1380         int r;
1381         DBusError error;
1382
1383         assert(s);
1384         dbus_error_init(&error);
1385
1386         /* We don't take connections anymore if we are supposed to
1387          * shut down anyway */
1388         if (unit_pending_inactive(UNIT(s))) {
1389                 log_debug("Suppressing connection request on %s since unit stop is scheduled.", UNIT(s)->id);
1390
1391                 if (cfd >= 0)
1392                         close_nointr_nofail(cfd);
1393                 else  {
1394                         /* Flush all sockets by closing and reopening them */
1395                         socket_close_fds(s);
1396
1397                         r = socket_watch_fds(s);
1398                         if (r < 0) {
1399                                 log_warning("%s failed to watch sockets: %s", UNIT(s)->id, strerror(-r));
1400                                 socket_enter_stop_pre(s, SOCKET_FAILURE_RESOURCES);
1401                         }
1402                 }
1403
1404                 return;
1405         }
1406
1407         if (cfd < 0) {
1408                 Iterator i;
1409                 Unit *u;
1410                 bool pending = false;
1411
1412                 /* If there's already a start pending don't bother to
1413                  * do anything */
1414                 SET_FOREACH(u, UNIT(s)->dependencies[UNIT_TRIGGERS], i)
1415                         if (unit_pending_active(u)) {
1416                                 pending = true;
1417                                 break;
1418                         }
1419
1420                 if (!pending) {
1421                         r = manager_add_job(UNIT(s)->manager, JOB_START, UNIT_DEREF(s->service), JOB_REPLACE, true, &error, NULL);
1422                         if (r < 0)
1423                                 goto fail;
1424                 }
1425
1426                 socket_set_state(s, SOCKET_RUNNING);
1427         } else {
1428                 char *prefix, *instance = NULL, *name;
1429                 Service *service;
1430
1431                 if (s->n_connections >= s->max_connections) {
1432                         log_warning("Too many incoming connections (%u)", s->n_connections);
1433                         close_nointr_nofail(cfd);
1434                         return;
1435                 }
1436
1437                 r = socket_instantiate_service(s);
1438                 if (r < 0)
1439                         goto fail;
1440
1441                 r = instance_from_socket(cfd, s->n_accepted, &instance);
1442                 if (r < 0) {
1443                         if (r != -ENOTCONN)
1444                                 goto fail;
1445
1446                         /* ENOTCONN is legitimate if TCP RST was received.
1447                          * This connection is over, but the socket unit lives on. */
1448                         close_nointr_nofail(cfd);
1449                         return;
1450                 }
1451
1452                 prefix = unit_name_to_prefix(UNIT(s)->id);
1453                 if (!prefix) {
1454                         free(instance);
1455                         r = -ENOMEM;
1456                         goto fail;
1457                 }
1458
1459                 name = unit_name_build(prefix, instance, ".service");
1460                 free(prefix);
1461                 free(instance);
1462
1463                 if (!name) {
1464                         r = -ENOMEM;
1465                         goto fail;
1466                 }
1467
1468                 r = unit_add_name(UNIT_DEREF(s->service), name);
1469                 if (r < 0) {
1470                         free(name);
1471                         goto fail;
1472                 }
1473
1474                 service = SERVICE(UNIT_DEREF(s->service));
1475                 unit_ref_unset(&s->service);
1476                 s->n_accepted ++;
1477
1478                 UNIT(service)->no_gc = false;
1479
1480                 unit_choose_id(UNIT(service), name);
1481                 free(name);
1482
1483                 r = service_set_socket_fd(service, cfd, s);
1484                 if (r < 0)
1485                         goto fail;
1486
1487                 cfd = -1;
1488                 s->n_connections ++;
1489
1490                 r = manager_add_job(UNIT(s)->manager, JOB_START, UNIT(service), JOB_REPLACE, true, &error, NULL);
1491                 if (r < 0)
1492                         goto fail;
1493
1494                 /* Notify clients about changed counters */
1495                 unit_add_to_dbus_queue(UNIT(s));
1496         }
1497
1498         return;
1499
1500 fail:
1501         log_warning("%s failed to queue socket startup job: %s", UNIT(s)->id, bus_error(&error, r));
1502         socket_enter_stop_pre(s, SOCKET_FAILURE_RESOURCES);
1503
1504         if (cfd >= 0)
1505                 close_nointr_nofail(cfd);
1506
1507         dbus_error_free(&error);
1508 }
1509
1510 static void socket_run_next(Socket *s) {
1511         int r;
1512
1513         assert(s);
1514         assert(s->control_command);
1515         assert(s->control_command->command_next);
1516
1517         socket_unwatch_control_pid(s);
1518
1519         s->control_command = s->control_command->command_next;
1520
1521         if ((r = socket_spawn(s, s->control_command, &s->control_pid)) < 0)
1522                 goto fail;
1523
1524         return;
1525
1526 fail:
1527         log_warning("%s failed to run next task: %s", UNIT(s)->id, strerror(-r));
1528
1529         if (s->state == SOCKET_START_POST)
1530                 socket_enter_stop_pre(s, SOCKET_FAILURE_RESOURCES);
1531         else if (s->state == SOCKET_STOP_POST)
1532                 socket_enter_dead(s, SOCKET_FAILURE_RESOURCES);
1533         else
1534                 socket_enter_signal(s, SOCKET_FINAL_SIGTERM, SOCKET_FAILURE_RESOURCES);
1535 }
1536
1537 static int socket_start(Unit *u) {
1538         Socket *s = SOCKET(u);
1539
1540         assert(s);
1541
1542         /* We cannot fulfill this request right now, try again later
1543          * please! */
1544         if (s->state == SOCKET_STOP_PRE ||
1545             s->state == SOCKET_STOP_PRE_SIGKILL ||
1546             s->state == SOCKET_STOP_PRE_SIGTERM ||
1547             s->state == SOCKET_STOP_POST ||
1548             s->state == SOCKET_FINAL_SIGTERM ||
1549             s->state == SOCKET_FINAL_SIGKILL)
1550                 return -EAGAIN;
1551
1552         if (s->state == SOCKET_START_PRE ||
1553             s->state == SOCKET_START_POST)
1554                 return 0;
1555
1556         /* Cannot run this without the service being around */
1557         if (UNIT_DEREF(s->service)) {
1558                 Service *service;
1559
1560                 service = SERVICE(UNIT_DEREF(s->service));
1561
1562                 if (UNIT(service)->load_state != UNIT_LOADED) {
1563                         log_error("Socket service %s not loaded, refusing.", UNIT(service)->id);
1564                         return -ENOENT;
1565                 }
1566
1567                 /* If the service is already active we cannot start the
1568                  * socket */
1569                 if (service->state != SERVICE_DEAD &&
1570                     service->state != SERVICE_FAILED &&
1571                     service->state != SERVICE_AUTO_RESTART) {
1572                         log_error("Socket service %s already active, refusing.", UNIT(service)->id);
1573                         return -EBUSY;
1574                 }
1575
1576 #ifdef HAVE_SYSV_COMPAT
1577                 if (service->sysv_path) {
1578                         log_error("Using SysV services for socket activation is not supported. Refusing.");
1579                         return -ENOENT;
1580                 }
1581 #endif
1582         }
1583
1584         assert(s->state == SOCKET_DEAD || s->state == SOCKET_FAILED);
1585
1586         s->result = SOCKET_SUCCESS;
1587         socket_enter_start_pre(s);
1588         return 0;
1589 }
1590
1591 static int socket_stop(Unit *u) {
1592         Socket *s = SOCKET(u);
1593
1594         assert(s);
1595
1596         /* Already on it */
1597         if (s->state == SOCKET_STOP_PRE ||
1598             s->state == SOCKET_STOP_PRE_SIGTERM ||
1599             s->state == SOCKET_STOP_PRE_SIGKILL ||
1600             s->state == SOCKET_STOP_POST ||
1601             s->state == SOCKET_FINAL_SIGTERM ||
1602             s->state == SOCKET_FINAL_SIGKILL)
1603                 return 0;
1604
1605         /* If there's already something running we go directly into
1606          * kill mode. */
1607         if (s->state == SOCKET_START_PRE ||
1608             s->state == SOCKET_START_POST) {
1609                 socket_enter_signal(s, SOCKET_STOP_PRE_SIGTERM, SOCKET_SUCCESS);
1610                 return -EAGAIN;
1611         }
1612
1613         assert(s->state == SOCKET_LISTENING || s->state == SOCKET_RUNNING);
1614
1615         socket_enter_stop_pre(s, SOCKET_SUCCESS);
1616         return 0;
1617 }
1618
1619 static int socket_serialize(Unit *u, FILE *f, FDSet *fds) {
1620         Socket *s = SOCKET(u);
1621         SocketPort *p;
1622         int r;
1623
1624         assert(u);
1625         assert(f);
1626         assert(fds);
1627
1628         unit_serialize_item(u, f, "state", socket_state_to_string(s->state));
1629         unit_serialize_item(u, f, "result", socket_result_to_string(s->result));
1630         unit_serialize_item_format(u, f, "n-accepted", "%u", s->n_accepted);
1631
1632         if (s->control_pid > 0)
1633                 unit_serialize_item_format(u, f, "control-pid", "%lu", (unsigned long) s->control_pid);
1634
1635         if (s->control_command_id >= 0)
1636                 unit_serialize_item(u, f, "control-command", socket_exec_command_to_string(s->control_command_id));
1637
1638         LIST_FOREACH(port, p, s->ports) {
1639                 int copy;
1640
1641                 if (p->fd < 0)
1642                         continue;
1643
1644                 if ((copy = fdset_put_dup(fds, p->fd)) < 0)
1645                         return copy;
1646
1647                 if (p->type == SOCKET_SOCKET) {
1648                         char *t;
1649
1650                         if ((r = socket_address_print(&p->address, &t)) < 0)
1651                                 return r;
1652
1653                         if (socket_address_family(&p->address) == AF_NETLINK)
1654                                 unit_serialize_item_format(u, f, "netlink", "%i %s", copy, t);
1655                         else
1656                                 unit_serialize_item_format(u, f, "socket", "%i %i %s", copy, p->address.type, t);
1657                         free(t);
1658                 } else if (p->type == SOCKET_SPECIAL)
1659                         unit_serialize_item_format(u, f, "special", "%i %s", copy, p->path);
1660                 else {
1661                         assert(p->type == SOCKET_FIFO);
1662                         unit_serialize_item_format(u, f, "fifo", "%i %s", copy, p->path);
1663                 }
1664         }
1665
1666         return 0;
1667 }
1668
1669 static int socket_deserialize_item(Unit *u, const char *key, const char *value, FDSet *fds) {
1670         Socket *s = SOCKET(u);
1671
1672         assert(u);
1673         assert(key);
1674         assert(value);
1675         assert(fds);
1676
1677         if (streq(key, "state")) {
1678                 SocketState state;
1679
1680                 if ((state = socket_state_from_string(value)) < 0)
1681                         log_debug("Failed to parse state value %s", value);
1682                 else
1683                         s->deserialized_state = state;
1684         } else if (streq(key, "result")) {
1685                 SocketResult f;
1686
1687                 f = socket_result_from_string(value);
1688                 if (f < 0)
1689                         log_debug("Failed to parse result value %s", value);
1690                 else if (f != SOCKET_SUCCESS)
1691                         s->result = f;
1692
1693         } else if (streq(key, "n-accepted")) {
1694                 unsigned k;
1695
1696                 if (safe_atou(value, &k) < 0)
1697                         log_debug("Failed to parse n-accepted value %s", value);
1698                 else
1699                         s->n_accepted += k;
1700         } else if (streq(key, "control-pid")) {
1701                 pid_t pid;
1702
1703                 if (parse_pid(value, &pid) < 0)
1704                         log_debug("Failed to parse control-pid value %s", value);
1705                 else
1706                         s->control_pid = pid;
1707         } else if (streq(key, "control-command")) {
1708                 SocketExecCommand id;
1709
1710                 if ((id = socket_exec_command_from_string(value)) < 0)
1711                         log_debug("Failed to parse exec-command value %s", value);
1712                 else {
1713                         s->control_command_id = id;
1714                         s->control_command = s->exec_command[id];
1715                 }
1716         } else if (streq(key, "fifo")) {
1717                 int fd, skip = 0;
1718                 SocketPort *p;
1719
1720                 if (sscanf(value, "%i %n", &fd, &skip) < 1 || fd < 0 || !fdset_contains(fds, fd))
1721                         log_debug("Failed to parse fifo value %s", value);
1722                 else {
1723
1724                         LIST_FOREACH(port, p, s->ports)
1725                                 if (p->type == SOCKET_FIFO &&
1726                                     streq_ptr(p->path, value+skip))
1727                                         break;
1728
1729                         if (p) {
1730                                 if (p->fd >= 0)
1731                                         close_nointr_nofail(p->fd);
1732                                 p->fd = fdset_remove(fds, fd);
1733                         }
1734                 }
1735
1736         } else if (streq(key, "special")) {
1737                 int fd, skip = 0;
1738                 SocketPort *p;
1739
1740                 if (sscanf(value, "%i %n", &fd, &skip) < 1 || fd < 0 || !fdset_contains(fds, fd))
1741                         log_debug("Failed to parse special value %s", value);
1742                 else {
1743
1744                         LIST_FOREACH(port, p, s->ports)
1745                                 if (p->type == SOCKET_SPECIAL &&
1746                                     streq_ptr(p->path, value+skip))
1747                                         break;
1748
1749                         if (p) {
1750                                 if (p->fd >= 0)
1751                                         close_nointr_nofail(p->fd);
1752                                 p->fd = fdset_remove(fds, fd);
1753                         }
1754                 }
1755
1756         } else if (streq(key, "socket")) {
1757                 int fd, type, skip = 0;
1758                 SocketPort *p;
1759
1760                 if (sscanf(value, "%i %i %n", &fd, &type, &skip) < 2 || fd < 0 || type < 0 || !fdset_contains(fds, fd))
1761                         log_debug("Failed to parse socket value %s", value);
1762                 else {
1763
1764                         LIST_FOREACH(port, p, s->ports)
1765                                 if (socket_address_is(&p->address, value+skip, type))
1766                                         break;
1767
1768                         if (p) {
1769                                 if (p->fd >= 0)
1770                                         close_nointr_nofail(p->fd);
1771                                 p->fd = fdset_remove(fds, fd);
1772                         }
1773                 }
1774
1775         } else if (streq(key, "netlink")) {
1776                 int fd, skip = 0;
1777                 SocketPort *p;
1778
1779                 if (sscanf(value, "%i %n", &fd, &skip) < 1 || fd < 0 || !fdset_contains(fds, fd))
1780                         log_debug("Failed to parse socket value %s", value);
1781                 else {
1782
1783                         LIST_FOREACH(port, p, s->ports)
1784                                 if (socket_address_is_netlink(&p->address, value+skip))
1785                                         break;
1786
1787                         if (p) {
1788                                 if (p->fd >= 0)
1789                                         close_nointr_nofail(p->fd);
1790                                 p->fd = fdset_remove(fds, fd);
1791                         }
1792                 }
1793
1794         } else
1795                 log_debug("Unknown serialization key '%s'", key);
1796
1797         return 0;
1798 }
1799
1800 static UnitActiveState socket_active_state(Unit *u) {
1801         assert(u);
1802
1803         return state_translation_table[SOCKET(u)->state];
1804 }
1805
1806 static const char *socket_sub_state_to_string(Unit *u) {
1807         assert(u);
1808
1809         return socket_state_to_string(SOCKET(u)->state);
1810 }
1811
1812 static bool socket_check_gc(Unit *u) {
1813         Socket *s = SOCKET(u);
1814
1815         assert(u);
1816
1817         return s->n_connections > 0;
1818 }
1819
1820 static void socket_fd_event(Unit *u, int fd, uint32_t events, Watch *w) {
1821         Socket *s = SOCKET(u);
1822         int cfd = -1;
1823
1824         assert(s);
1825         assert(fd >= 0);
1826
1827         if (s->state != SOCKET_LISTENING)
1828                 return;
1829
1830         log_debug("Incoming traffic on %s", u->id);
1831
1832         if (events != EPOLLIN) {
1833
1834                 if (events & EPOLLHUP)
1835                         log_error("%s: Got POLLHUP on a listening socket. The service probably invoked shutdown() on it, and should better not do that.", u->id);
1836                 else
1837                         log_error("%s: Got unexpected poll event (0x%x) on socket.", u->id, events);
1838
1839                 goto fail;
1840         }
1841
1842         if (w->socket_accept) {
1843                 for (;;) {
1844
1845                         if ((cfd = accept4(fd, NULL, NULL, SOCK_NONBLOCK)) < 0) {
1846
1847                                 if (errno == EINTR)
1848                                         continue;
1849
1850                                 log_error("Failed to accept socket: %m");
1851                                 goto fail;
1852                         }
1853
1854                         break;
1855                 }
1856
1857                 socket_apply_socket_options(s, cfd);
1858         }
1859
1860         socket_enter_running(s, cfd);
1861         return;
1862
1863 fail:
1864         socket_enter_stop_pre(s, SOCKET_FAILURE_RESOURCES);
1865 }
1866
1867 static void socket_sigchld_event(Unit *u, pid_t pid, int code, int status) {
1868         Socket *s = SOCKET(u);
1869         SocketResult f;
1870
1871         assert(s);
1872         assert(pid >= 0);
1873
1874         if (pid != s->control_pid)
1875                 return;
1876
1877         s->control_pid = 0;
1878
1879         if (is_clean_exit(code, status))
1880                 f = SOCKET_SUCCESS;
1881         else if (code == CLD_EXITED)
1882                 f = SOCKET_FAILURE_EXIT_CODE;
1883         else if (code == CLD_KILLED)
1884                 f = SOCKET_FAILURE_SIGNAL;
1885         else if (code == CLD_DUMPED)
1886                 f = SOCKET_FAILURE_CORE_DUMP;
1887         else
1888                 assert_not_reached("Unknown code");
1889
1890         if (s->control_command) {
1891                 exec_status_exit(&s->control_command->exec_status, &s->exec_context, pid, code, status);
1892
1893                 if (s->control_command->ignore)
1894                         f = SOCKET_SUCCESS;
1895         }
1896
1897         log_full(f == SOCKET_SUCCESS ? LOG_DEBUG : LOG_NOTICE,
1898                  "%s control process exited, code=%s status=%i", u->id, sigchld_code_to_string(code), status);
1899
1900         if (f != SOCKET_SUCCESS)
1901                 s->result = f;
1902
1903         if (s->control_command &&
1904             s->control_command->command_next &&
1905             f == SOCKET_SUCCESS) {
1906
1907                 log_debug("%s running next command for state %s", u->id, socket_state_to_string(s->state));
1908                 socket_run_next(s);
1909         } else {
1910                 s->control_command = NULL;
1911                 s->control_command_id = _SOCKET_EXEC_COMMAND_INVALID;
1912
1913                 /* No further commands for this step, so let's figure
1914                  * out what to do next */
1915
1916                 log_debug("%s got final SIGCHLD for state %s", u->id, socket_state_to_string(s->state));
1917
1918                 switch (s->state) {
1919
1920                 case SOCKET_START_PRE:
1921                         if (f == SOCKET_SUCCESS)
1922                                 socket_enter_start_post(s);
1923                         else
1924                                 socket_enter_signal(s, SOCKET_FINAL_SIGTERM, f);
1925                         break;
1926
1927                 case SOCKET_START_POST:
1928                         if (f == SOCKET_SUCCESS)
1929                                 socket_enter_listening(s);
1930                         else
1931                                 socket_enter_stop_pre(s, f);
1932                         break;
1933
1934                 case SOCKET_STOP_PRE:
1935                 case SOCKET_STOP_PRE_SIGTERM:
1936                 case SOCKET_STOP_PRE_SIGKILL:
1937                         socket_enter_stop_post(s, f);
1938                         break;
1939
1940                 case SOCKET_STOP_POST:
1941                 case SOCKET_FINAL_SIGTERM:
1942                 case SOCKET_FINAL_SIGKILL:
1943                         socket_enter_dead(s, f);
1944                         break;
1945
1946                 default:
1947                         assert_not_reached("Uh, control process died at wrong time.");
1948                 }
1949         }
1950
1951         /* Notify clients about changed exit status */
1952         unit_add_to_dbus_queue(u);
1953 }
1954
1955 static void socket_timer_event(Unit *u, uint64_t elapsed, Watch *w) {
1956         Socket *s = SOCKET(u);
1957
1958         assert(s);
1959         assert(elapsed == 1);
1960         assert(w == &s->timer_watch);
1961
1962         switch (s->state) {
1963
1964         case SOCKET_START_PRE:
1965                 log_warning("%s starting timed out. Terminating.", u->id);
1966                 socket_enter_signal(s, SOCKET_FINAL_SIGTERM, SOCKET_FAILURE_TIMEOUT);
1967                 break;
1968
1969         case SOCKET_START_POST:
1970                 log_warning("%s starting timed out. Stopping.", u->id);
1971                 socket_enter_stop_pre(s, SOCKET_FAILURE_TIMEOUT);
1972                 break;
1973
1974         case SOCKET_STOP_PRE:
1975                 log_warning("%s stopping timed out. Terminating.", u->id);
1976                 socket_enter_signal(s, SOCKET_STOP_PRE_SIGTERM, SOCKET_FAILURE_TIMEOUT);
1977                 break;
1978
1979         case SOCKET_STOP_PRE_SIGTERM:
1980                 if (s->exec_context.send_sigkill) {
1981                         log_warning("%s stopping timed out. Killing.", u->id);
1982                         socket_enter_signal(s, SOCKET_STOP_PRE_SIGKILL, SOCKET_FAILURE_TIMEOUT);
1983                 } else {
1984                         log_warning("%s stopping timed out. Skipping SIGKILL. Ignoring.", u->id);
1985                         socket_enter_stop_post(s, SOCKET_FAILURE_TIMEOUT);
1986                 }
1987                 break;
1988
1989         case SOCKET_STOP_PRE_SIGKILL:
1990                 log_warning("%s still around after SIGKILL. Ignoring.", u->id);
1991                 socket_enter_stop_post(s, SOCKET_FAILURE_TIMEOUT);
1992                 break;
1993
1994         case SOCKET_STOP_POST:
1995                 log_warning("%s stopping timed out (2). Terminating.", u->id);
1996                 socket_enter_signal(s, SOCKET_FINAL_SIGTERM, SOCKET_FAILURE_TIMEOUT);
1997                 break;
1998
1999         case SOCKET_FINAL_SIGTERM:
2000                 if (s->exec_context.send_sigkill) {
2001                         log_warning("%s stopping timed out (2). Killing.", u->id);
2002                         socket_enter_signal(s, SOCKET_FINAL_SIGKILL, SOCKET_FAILURE_TIMEOUT);
2003                 } else {
2004                         log_warning("%s stopping timed out (2). Skipping SIGKILL. Ignoring.", u->id);
2005                         socket_enter_dead(s, SOCKET_FAILURE_TIMEOUT);
2006                 }
2007                 break;
2008
2009         case SOCKET_FINAL_SIGKILL:
2010                 log_warning("%s still around after SIGKILL (2). Entering failed mode.", u->id);
2011                 socket_enter_dead(s, SOCKET_FAILURE_TIMEOUT);
2012                 break;
2013
2014         default:
2015                 assert_not_reached("Timeout at wrong time.");
2016         }
2017 }
2018
2019 int socket_collect_fds(Socket *s, int **fds, unsigned *n_fds) {
2020         int *rfds;
2021         unsigned rn_fds, k;
2022         SocketPort *p;
2023
2024         assert(s);
2025         assert(fds);
2026         assert(n_fds);
2027
2028         /* Called from the service code for requesting our fds */
2029
2030         rn_fds = 0;
2031         LIST_FOREACH(port, p, s->ports)
2032                 if (p->fd >= 0)
2033                         rn_fds++;
2034
2035         if (rn_fds <= 0) {
2036                 *fds = NULL;
2037                 *n_fds = 0;
2038                 return 0;
2039         }
2040
2041         if (!(rfds = new(int, rn_fds)))
2042                 return -ENOMEM;
2043
2044         k = 0;
2045         LIST_FOREACH(port, p, s->ports)
2046                 if (p->fd >= 0)
2047                         rfds[k++] = p->fd;
2048
2049         assert(k == rn_fds);
2050
2051         *fds = rfds;
2052         *n_fds = rn_fds;
2053
2054         return 0;
2055 }
2056
2057 void socket_notify_service_dead(Socket *s, bool failed_permanent) {
2058         assert(s);
2059
2060         /* The service is dead. Dang!
2061          *
2062          * This is strictly for one-instance-for-all-connections
2063          * services. */
2064
2065         if (s->state == SOCKET_RUNNING) {
2066                 log_debug("%s got notified about service death (failed permanently: %s)", UNIT(s)->id, yes_no(failed_permanent));
2067                 if (failed_permanent)
2068                         socket_enter_stop_pre(s, SOCKET_FAILURE_SERVICE_FAILED_PERMANENT);
2069                 else
2070                         socket_enter_listening(s);
2071         }
2072 }
2073
2074 void socket_connection_unref(Socket *s) {
2075         assert(s);
2076
2077         /* The service is dead. Yay!
2078          *
2079          * This is strictly for one-instance-per-connection
2080          * services. */
2081
2082         assert(s->n_connections > 0);
2083         s->n_connections--;
2084
2085         log_debug("%s: One connection closed, %u left.", UNIT(s)->id, s->n_connections);
2086 }
2087
2088 static void socket_reset_failed(Unit *u) {
2089         Socket *s = SOCKET(u);
2090
2091         assert(s);
2092
2093         if (s->state == SOCKET_FAILED)
2094                 socket_set_state(s, SOCKET_DEAD);
2095
2096         s->result = SOCKET_SUCCESS;
2097 }
2098
2099 static int socket_kill(Unit *u, KillWho who, KillMode mode, int signo, DBusError *error) {
2100         Socket *s = SOCKET(u);
2101         int r = 0;
2102         Set *pid_set = NULL;
2103
2104         assert(s);
2105
2106         if (who == KILL_MAIN) {
2107                 dbus_set_error(error, BUS_ERROR_NO_SUCH_PROCESS, "Socket units have no main processes");
2108                 return -ESRCH;
2109         }
2110
2111         if (s->control_pid <= 0 && who == KILL_CONTROL) {
2112                 dbus_set_error(error, BUS_ERROR_NO_SUCH_PROCESS, "No control process to kill");
2113                 return -ESRCH;
2114         }
2115
2116         if (who == KILL_CONTROL || who == KILL_ALL)
2117                 if (s->control_pid > 0)
2118                         if (kill(s->control_pid, signo) < 0)
2119                                 r = -errno;
2120
2121         if (who == KILL_ALL && mode == KILL_CONTROL_GROUP) {
2122                 int q;
2123
2124                 if (!(pid_set = set_new(trivial_hash_func, trivial_compare_func)))
2125                         return -ENOMEM;
2126
2127                 /* Exclude the control pid from being killed via the cgroup */
2128                 if (s->control_pid > 0)
2129                         if ((q = set_put(pid_set, LONG_TO_PTR(s->control_pid))) < 0) {
2130                                 r = q;
2131                                 goto finish;
2132                         }
2133
2134                 q = cgroup_bonding_kill_list(UNIT(s)->cgroup_bondings, signo, false, false, pid_set, NULL);
2135                 if (q < 0)
2136                         if (q != -EAGAIN && q != -ESRCH && q != -ENOENT)
2137                                 r = q;
2138         }
2139
2140 finish:
2141         if (pid_set)
2142                 set_free(pid_set);
2143
2144         return r;
2145 }
2146
2147 static const char* const socket_state_table[_SOCKET_STATE_MAX] = {
2148         [SOCKET_DEAD] = "dead",
2149         [SOCKET_START_PRE] = "start-pre",
2150         [SOCKET_START_POST] = "start-post",
2151         [SOCKET_LISTENING] = "listening",
2152         [SOCKET_RUNNING] = "running",
2153         [SOCKET_STOP_PRE] = "stop-pre",
2154         [SOCKET_STOP_PRE_SIGTERM] = "stop-pre-sigterm",
2155         [SOCKET_STOP_PRE_SIGKILL] = "stop-pre-sigkill",
2156         [SOCKET_STOP_POST] = "stop-post",
2157         [SOCKET_FINAL_SIGTERM] = "final-sigterm",
2158         [SOCKET_FINAL_SIGKILL] = "final-sigkill",
2159         [SOCKET_FAILED] = "failed"
2160 };
2161
2162 DEFINE_STRING_TABLE_LOOKUP(socket_state, SocketState);
2163
2164 static const char* const socket_exec_command_table[_SOCKET_EXEC_COMMAND_MAX] = {
2165         [SOCKET_EXEC_START_PRE] = "StartPre",
2166         [SOCKET_EXEC_START_POST] = "StartPost",
2167         [SOCKET_EXEC_STOP_PRE] = "StopPre",
2168         [SOCKET_EXEC_STOP_POST] = "StopPost"
2169 };
2170
2171 DEFINE_STRING_TABLE_LOOKUP(socket_exec_command, SocketExecCommand);
2172
2173 static const char* const socket_result_table[_SOCKET_RESULT_MAX] = {
2174         [SOCKET_SUCCESS] = "success",
2175         [SOCKET_FAILURE_RESOURCES] = "resources",
2176         [SOCKET_FAILURE_TIMEOUT] = "timeout",
2177         [SOCKET_FAILURE_EXIT_CODE] = "exit-code",
2178         [SOCKET_FAILURE_SIGNAL] = "signal",
2179         [SOCKET_FAILURE_CORE_DUMP] = "core-dump",
2180         [SOCKET_FAILURE_SERVICE_FAILED_PERMANENT] = "service-failed-permanent"
2181 };
2182
2183 DEFINE_STRING_TABLE_LOOKUP(socket_result, SocketResult);
2184
2185 const UnitVTable socket_vtable = {
2186         .suffix = ".socket",
2187         .object_size = sizeof(Socket),
2188         .sections =
2189                 "Unit\0"
2190                 "Socket\0"
2191                 "Install\0",
2192
2193         .init = socket_init,
2194         .done = socket_done,
2195         .load = socket_load,
2196
2197         .kill = socket_kill,
2198
2199         .coldplug = socket_coldplug,
2200
2201         .dump = socket_dump,
2202
2203         .start = socket_start,
2204         .stop = socket_stop,
2205
2206         .serialize = socket_serialize,
2207         .deserialize_item = socket_deserialize_item,
2208
2209         .active_state = socket_active_state,
2210         .sub_state_to_string = socket_sub_state_to_string,
2211
2212         .check_gc = socket_check_gc,
2213
2214         .fd_event = socket_fd_event,
2215         .sigchld_event = socket_sigchld_event,
2216         .timer_event = socket_timer_event,
2217
2218         .reset_failed = socket_reset_failed,
2219
2220         .bus_interface = "org.freedesktop.systemd1.Socket",
2221         .bus_message_handler = bus_socket_message_handler,
2222         .bus_invalidating_properties =  bus_socket_invalidating_properties
2223 };