chiark / gitweb /
README: document what to do with the NSS modules
[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 <netinet/tcp.h>
31 #include <mqueue.h>
32 #include <sys/xattr.h>
33
34 #include "sd-event.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 "path-util.h"
41 #include "unit-name.h"
42 #include "unit-printf.h"
43 #include "missing.h"
44 #include "special.h"
45 #include "label.h"
46 #include "exit-status.h"
47 #include "def.h"
48 #include "smack-util.h"
49 #include "bus-util.h"
50 #include "bus-error.h"
51 #include "dbus-socket.h"
52 #include "unit.h"
53 #include "socket.h"
54
55 static const UnitActiveState state_translation_table[_SOCKET_STATE_MAX] = {
56         [SOCKET_DEAD] = UNIT_INACTIVE,
57         [SOCKET_START_PRE] = UNIT_ACTIVATING,
58         [SOCKET_START_CHOWN] = UNIT_ACTIVATING,
59         [SOCKET_START_POST] = UNIT_ACTIVATING,
60         [SOCKET_LISTENING] = UNIT_ACTIVE,
61         [SOCKET_RUNNING] = UNIT_ACTIVE,
62         [SOCKET_STOP_PRE] = UNIT_DEACTIVATING,
63         [SOCKET_STOP_PRE_SIGTERM] = UNIT_DEACTIVATING,
64         [SOCKET_STOP_PRE_SIGKILL] = UNIT_DEACTIVATING,
65         [SOCKET_STOP_POST] = UNIT_DEACTIVATING,
66         [SOCKET_FINAL_SIGTERM] = UNIT_DEACTIVATING,
67         [SOCKET_FINAL_SIGKILL] = UNIT_DEACTIVATING,
68         [SOCKET_FAILED] = UNIT_FAILED
69 };
70
71 static int socket_dispatch_io(sd_event_source *source, int fd, uint32_t revents, void *userdata);
72 static int socket_dispatch_timer(sd_event_source *source, usec_t usec, void *userdata);
73
74 static void socket_init(Unit *u) {
75         Socket *s = SOCKET(u);
76
77         assert(u);
78         assert(u->load_state == UNIT_STUB);
79
80         s->backlog = SOMAXCONN;
81         s->timeout_usec = u->manager->default_timeout_start_usec;
82         s->directory_mode = 0755;
83         s->socket_mode = 0666;
84
85         s->max_connections = 64;
86
87         s->priority = -1;
88         s->ip_tos = -1;
89         s->ip_ttl = -1;
90         s->mark = -1;
91
92         s->exec_context.std_output = u->manager->default_std_output;
93         s->exec_context.std_error = u->manager->default_std_error;
94
95         s->control_command_id = _SOCKET_EXEC_COMMAND_INVALID;
96 }
97
98 static void socket_unwatch_control_pid(Socket *s) {
99         assert(s);
100
101         if (s->control_pid <= 0)
102                 return;
103
104         unit_unwatch_pid(UNIT(s), s->control_pid);
105         s->control_pid = 0;
106 }
107
108 void socket_free_ports(Socket *s) {
109         SocketPort *p;
110
111         assert(s);
112
113         while ((p = s->ports)) {
114                 LIST_REMOVE(port, s->ports, p);
115
116                 sd_event_source_unref(p->event_source);
117
118                 safe_close(p->fd);
119                 free(p->path);
120                 free(p);
121         }
122 }
123
124 static void socket_done(Unit *u) {
125         Socket *s = SOCKET(u);
126
127         assert(s);
128
129         socket_free_ports(s);
130
131         s->exec_runtime = exec_runtime_unref(s->exec_runtime);
132         exec_command_free_array(s->exec_command, _SOCKET_EXEC_COMMAND_MAX);
133         s->control_command = NULL;
134
135         socket_unwatch_control_pid(s);
136
137         unit_ref_unset(&s->service);
138
139         free(s->tcp_congestion);
140         s->tcp_congestion = NULL;
141
142         free(s->bind_to_device);
143         s->bind_to_device = NULL;
144
145         free(s->smack);
146         free(s->smack_ip_in);
147         free(s->smack_ip_out);
148
149         strv_free(s->symlinks);
150
151         free(s->user);
152         free(s->group);
153
154         s->timer_event_source = sd_event_source_unref(s->timer_event_source);
155 }
156
157 static int socket_arm_timer(Socket *s) {
158         int r;
159
160         assert(s);
161
162         if (s->timeout_usec <= 0) {
163                 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
164                 return 0;
165         }
166
167         if (s->timer_event_source) {
168                 r = sd_event_source_set_time(s->timer_event_source, now(CLOCK_MONOTONIC) + s->timeout_usec);
169                 if (r < 0)
170                         return r;
171
172                 return sd_event_source_set_enabled(s->timer_event_source, SD_EVENT_ONESHOT);
173         }
174
175         return sd_event_add_time(
176                         UNIT(s)->manager->event,
177                         &s->timer_event_source,
178                         CLOCK_MONOTONIC,
179                         now(CLOCK_MONOTONIC) + s->timeout_usec, 0,
180                         socket_dispatch_timer, s);
181 }
182
183 int socket_instantiate_service(Socket *s) {
184         _cleanup_free_ char *prefix = NULL, *name = NULL;
185         int r;
186         Unit *u;
187
188         assert(s);
189
190         /* This fills in s->service if it isn't filled in yet. For
191          * Accept=yes sockets we create the next connection service
192          * here. For Accept=no this is mostly a NOP since the service
193          * is figured out at load time anyway. */
194
195         if (UNIT_DEREF(s->service) || !s->accept)
196                 return 0;
197
198         prefix = unit_name_to_prefix(UNIT(s)->id);
199         if (!prefix)
200                 return -ENOMEM;
201
202         if (asprintf(&name, "%s@%u.service", prefix, s->n_accepted) < 0)
203                 return -ENOMEM;
204
205         r = manager_load_unit(UNIT(s)->manager, name, NULL, NULL, &u);
206         if (r < 0)
207                 return r;
208
209         u->no_gc = true;
210         unit_ref_set(&s->service, u);
211
212         return unit_add_two_dependencies(UNIT(s), UNIT_BEFORE, UNIT_TRIGGERS, u, false);
213 }
214
215 static bool have_non_accept_socket(Socket *s) {
216         SocketPort *p;
217
218         assert(s);
219
220         if (!s->accept)
221                 return true;
222
223         LIST_FOREACH(port, p, s->ports) {
224
225                 if (p->type != SOCKET_SOCKET)
226                         return true;
227
228                 if (!socket_address_can_accept(&p->address))
229                         return true;
230         }
231
232         return false;
233 }
234
235 static int socket_add_mount_links(Socket *s) {
236         SocketPort *p;
237         int r;
238
239         assert(s);
240
241         LIST_FOREACH(port, p, s->ports) {
242                 const char *path = NULL;
243
244                 if (p->type == SOCKET_SOCKET)
245                         path = socket_address_get_path(&p->address);
246                 else if (p->type == SOCKET_FIFO || p->type == SOCKET_SPECIAL)
247                         path = p->path;
248
249                 if (!path)
250                         continue;
251
252                 r = unit_require_mounts_for(UNIT(s), path);
253                 if (r < 0)
254                         return r;
255         }
256
257         return 0;
258 }
259
260 static int socket_add_device_link(Socket *s) {
261         char *t;
262
263         assert(s);
264
265         if (!s->bind_to_device || streq(s->bind_to_device, "lo"))
266                 return 0;
267
268         t = strappenda("/sys/subsystem/net/devices/", s->bind_to_device);
269         return unit_add_node_link(UNIT(s), t, false);
270 }
271
272 static int socket_add_default_dependencies(Socket *s) {
273         int r;
274         assert(s);
275
276         r = unit_add_dependency_by_name(UNIT(s), UNIT_BEFORE, SPECIAL_SOCKETS_TARGET, NULL, true);
277         if (r < 0)
278                 return r;
279
280         if (UNIT(s)->manager->running_as == SYSTEMD_SYSTEM) {
281                 r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_AFTER, UNIT_REQUIRES, SPECIAL_SYSINIT_TARGET, NULL, true);
282                 if (r < 0)
283                         return r;
284         }
285
286         return unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_SHUTDOWN_TARGET, NULL, true);
287 }
288
289 _pure_ static bool socket_has_exec(Socket *s) {
290         unsigned i;
291         assert(s);
292
293         for (i = 0; i < _SOCKET_EXEC_COMMAND_MAX; i++)
294                 if (s->exec_command[i])
295                         return true;
296
297         return false;
298 }
299
300 static int socket_add_extras(Socket *s) {
301         Unit *u = UNIT(s);
302         int r;
303
304         assert(s);
305
306         if (have_non_accept_socket(s)) {
307
308                 if (!UNIT_DEREF(s->service)) {
309                         Unit *x;
310
311                         r = unit_load_related_unit(u, ".service", &x);
312                         if (r < 0)
313                                 return r;
314
315                         unit_ref_set(&s->service, x);
316                 }
317
318                 r = unit_add_two_dependencies(u, UNIT_BEFORE, UNIT_TRIGGERS, UNIT_DEREF(s->service), true);
319                 if (r < 0)
320                         return r;
321         }
322
323         r = socket_add_mount_links(s);
324         if (r < 0)
325                 return r;
326
327         r = socket_add_device_link(s);
328         if (r < 0)
329                 return r;
330
331         r = unit_patch_contexts(u);
332         if (r < 0)
333                 return r;
334
335         if (socket_has_exec(s)) {
336                 r = unit_add_exec_dependencies(u, &s->exec_context);
337                 if (r < 0)
338                         return r;
339
340                 r = unit_add_default_slice(u, &s->cgroup_context);
341                 if (r < 0)
342                         return r;
343         }
344
345         if (u->default_dependencies) {
346                 r = socket_add_default_dependencies(s);
347                 if (r < 0)
348                         return r;
349         }
350
351         return 0;
352 }
353
354 static const char *socket_find_symlink_target(Socket *s) {
355         const char *found = NULL;
356         SocketPort *p;
357
358         LIST_FOREACH(port, p, s->ports) {
359                 const char *f = NULL;
360
361                 switch (p->type) {
362
363                 case SOCKET_FIFO:
364                         f = p->path;
365                         break;
366
367                 case SOCKET_SOCKET:
368                         if (p->address.sockaddr.un.sun_path[0] != 0)
369                                 f = p->address.sockaddr.un.sun_path;
370                         break;
371
372                 default:
373                         break;
374                 }
375
376                 if (f) {
377                         if (found)
378                                 return NULL;
379
380                         found = f;
381                 }
382         }
383
384         return found;
385 }
386
387 static int socket_verify(Socket *s) {
388         assert(s);
389
390         if (UNIT(s)->load_state != UNIT_LOADED)
391                 return 0;
392
393         if (!s->ports) {
394                 log_error_unit(UNIT(s)->id, "%s lacks Listen setting. Refusing.", UNIT(s)->id);
395                 return -EINVAL;
396         }
397
398         if (s->accept && have_non_accept_socket(s)) {
399                 log_error_unit(UNIT(s)->id, "%s configured for accepting sockets, but sockets are non-accepting. Refusing.",
400                                UNIT(s)->id);
401                 return -EINVAL;
402         }
403
404         if (s->accept && s->max_connections <= 0) {
405                 log_error_unit(UNIT(s)->id, "%s's MaxConnection setting too small. Refusing.", UNIT(s)->id);
406                 return -EINVAL;
407         }
408
409         if (s->accept && UNIT_DEREF(s->service)) {
410                 log_error_unit(UNIT(s)->id, "Explicit service configuration for accepting sockets not supported on %s. Refusing.", UNIT(s)->id);
411                 return -EINVAL;
412         }
413
414         if (s->exec_context.pam_name && s->kill_context.kill_mode != KILL_CONTROL_GROUP) {
415                 log_error_unit(UNIT(s)->id, "%s has PAM enabled. Kill mode must be set to 'control-group'. Refusing.", UNIT(s)->id);
416                 return -EINVAL;
417         }
418
419         if (!strv_isempty(s->symlinks) && !socket_find_symlink_target(s)) {
420                 log_error_unit(UNIT(s)->id, "%s has symlinks set but none or more than one node in the file system. Refusing.", UNIT(s)->id);
421                 return -EINVAL;
422         }
423
424         return 0;
425 }
426
427 static int socket_load(Unit *u) {
428         Socket *s = SOCKET(u);
429         int r;
430
431         assert(u);
432         assert(u->load_state == UNIT_STUB);
433
434         r = unit_load_fragment_and_dropin(u);
435         if (r < 0)
436                 return r;
437
438         if (u->load_state == UNIT_LOADED) {
439                 /* This is a new unit? Then let's add in some extras */
440                 r = socket_add_extras(s);
441                 if (r < 0)
442                         return r;
443         }
444
445         return socket_verify(s);
446 }
447
448 _const_ static const char* listen_lookup(int family, int type) {
449
450         if (family == AF_NETLINK)
451                 return "ListenNetlink";
452
453         if (type == SOCK_STREAM)
454                 return "ListenStream";
455         else if (type == SOCK_DGRAM)
456                 return "ListenDatagram";
457         else if (type == SOCK_SEQPACKET)
458                 return "ListenSequentialPacket";
459
460         assert_not_reached("Unknown socket type");
461         return NULL;
462 }
463
464 static void socket_dump(Unit *u, FILE *f, const char *prefix) {
465         char time_string[FORMAT_TIMESPAN_MAX];
466         SocketExecCommand c;
467         Socket *s = SOCKET(u);
468         SocketPort *p;
469         const char *prefix2;
470
471         assert(s);
472         assert(f);
473
474         prefix2 = strappenda(prefix, "\t");
475
476         fprintf(f,
477                 "%sSocket State: %s\n"
478                 "%sResult: %s\n"
479                 "%sBindIPv6Only: %s\n"
480                 "%sBacklog: %u\n"
481                 "%sSocketMode: %04o\n"
482                 "%sDirectoryMode: %04o\n"
483                 "%sKeepAlive: %s\n"
484                 "%sNoDelay: %s\n"
485                 "%sFreeBind: %s\n"
486                 "%sTransparent: %s\n"
487                 "%sBroadcast: %s\n"
488                 "%sPassCredentials: %s\n"
489                 "%sPassSecurity: %s\n"
490                 "%sTCPCongestion: %s\n"
491                 "%sRemoveOnStop: %s\n",
492                 prefix, socket_state_to_string(s->state),
493                 prefix, socket_result_to_string(s->result),
494                 prefix, socket_address_bind_ipv6_only_to_string(s->bind_ipv6_only),
495                 prefix, s->backlog,
496                 prefix, s->socket_mode,
497                 prefix, s->directory_mode,
498                 prefix, yes_no(s->keep_alive),
499                 prefix, yes_no(s->no_delay),
500                 prefix, yes_no(s->free_bind),
501                 prefix, yes_no(s->transparent),
502                 prefix, yes_no(s->broadcast),
503                 prefix, yes_no(s->pass_cred),
504                 prefix, yes_no(s->pass_sec),
505                 prefix, strna(s->tcp_congestion),
506                 prefix, yes_no(s->remove_on_stop));
507
508         if (s->control_pid > 0)
509                 fprintf(f,
510                         "%sControl PID: "PID_FMT"\n",
511                         prefix, s->control_pid);
512
513         if (s->bind_to_device)
514                 fprintf(f,
515                         "%sBindToDevice: %s\n",
516                         prefix, s->bind_to_device);
517
518         if (s->accept)
519                 fprintf(f,
520                         "%sAccepted: %u\n"
521                         "%sNConnections: %u\n"
522                         "%sMaxConnections: %u\n",
523                         prefix, s->n_accepted,
524                         prefix, s->n_connections,
525                         prefix, s->max_connections);
526
527         if (s->priority >= 0)
528                 fprintf(f,
529                         "%sPriority: %i\n",
530                         prefix, s->priority);
531
532         if (s->receive_buffer > 0)
533                 fprintf(f,
534                         "%sReceiveBuffer: %zu\n",
535                         prefix, s->receive_buffer);
536
537         if (s->send_buffer > 0)
538                 fprintf(f,
539                         "%sSendBuffer: %zu\n",
540                         prefix, s->send_buffer);
541
542         if (s->ip_tos >= 0)
543                 fprintf(f,
544                         "%sIPTOS: %i\n",
545                         prefix, s->ip_tos);
546
547         if (s->ip_ttl >= 0)
548                 fprintf(f,
549                         "%sIPTTL: %i\n",
550                         prefix, s->ip_ttl);
551
552         if (s->pipe_size > 0)
553                 fprintf(f,
554                         "%sPipeSize: %zu\n",
555                         prefix, s->pipe_size);
556
557         if (s->mark >= 0)
558                 fprintf(f,
559                         "%sMark: %i\n",
560                         prefix, s->mark);
561
562         if (s->mq_maxmsg > 0)
563                 fprintf(f,
564                         "%sMessageQueueMaxMessages: %li\n",
565                         prefix, s->mq_maxmsg);
566
567         if (s->mq_msgsize > 0)
568                 fprintf(f,
569                         "%sMessageQueueMessageSize: %li\n",
570                         prefix, s->mq_msgsize);
571
572         if (s->reuse_port)
573                 fprintf(f,
574                         "%sReusePort: %s\n",
575                          prefix, yes_no(s->reuse_port));
576
577         if (s->smack)
578                 fprintf(f,
579                         "%sSmackLabel: %s\n",
580                         prefix, s->smack);
581
582         if (s->smack_ip_in)
583                 fprintf(f,
584                         "%sSmackLabelIPIn: %s\n",
585                         prefix, s->smack_ip_in);
586
587         if (s->smack_ip_out)
588                 fprintf(f,
589                         "%sSmackLabelIPOut: %s\n",
590                         prefix, s->smack_ip_out);
591
592         if (!isempty(s->user) || !isempty(s->group))
593                 fprintf(f,
594                         "%sOwnerUser: %s\n"
595                         "%sOwnerGroup: %s\n",
596                         prefix, strna(s->user),
597                         prefix, strna(s->group));
598
599         if(s->keep_alive_time)
600                 fprintf(f,
601                         "%sKeepAliveTime: %s\n",
602                         prefix, format_timespan(time_string, FORMAT_TIMESPAN_MAX,
603                                                 s->keep_alive_time, USEC_PER_SEC));
604
605         if(s->keep_alive_interval)
606                 fprintf(f,
607                         "%sKeepAliveInterval: %s\n",
608                         prefix, format_timespan(time_string, FORMAT_TIMESPAN_MAX,
609                                                 s->keep_alive_interval, USEC_PER_SEC));
610
611         if(s->keep_alive_cnt)
612                 fprintf(f,
613                         "%sKeepAliveProbes: %u\n",
614                         prefix, s->keep_alive_cnt);
615
616         if(s->defer_accept)
617                 fprintf(f,
618                         "%sDeferAccept: %s\n",
619                         prefix, format_timespan(time_string, FORMAT_TIMESPAN_MAX,
620                                                 s->defer_accept, USEC_PER_SEC));
621
622         LIST_FOREACH(port, p, s->ports) {
623
624                 if (p->type == SOCKET_SOCKET) {
625                         const char *t;
626                         int r;
627                         char *k = NULL;
628
629                         if ((r = socket_address_print(&p->address, &k)) < 0)
630                                 t = strerror(-r);
631                         else
632                                 t = k;
633
634                         fprintf(f, "%s%s: %s\n", prefix, listen_lookup(socket_address_family(&p->address), p->address.type), t);
635                         free(k);
636                 } else if (p->type == SOCKET_SPECIAL)
637                         fprintf(f, "%sListenSpecial: %s\n", prefix, p->path);
638                 else if (p->type == SOCKET_MQUEUE)
639                         fprintf(f, "%sListenMessageQueue: %s\n", prefix, p->path);
640                 else
641                         fprintf(f, "%sListenFIFO: %s\n", prefix, p->path);
642         }
643
644         exec_context_dump(&s->exec_context, f, prefix);
645         kill_context_dump(&s->kill_context, f, prefix);
646
647         for (c = 0; c < _SOCKET_EXEC_COMMAND_MAX; c++) {
648                 if (!s->exec_command[c])
649                         continue;
650
651                 fprintf(f, "%s-> %s:\n",
652                         prefix, socket_exec_command_to_string(c));
653
654                 exec_command_dump_list(s->exec_command[c], f, prefix2);
655         }
656 }
657
658 static int instance_from_socket(int fd, unsigned nr, char **instance) {
659         socklen_t l;
660         char *r;
661         union sockaddr_union local, remote;
662
663         assert(fd >= 0);
664         assert(instance);
665
666         l = sizeof(local);
667         if (getsockname(fd, &local.sa, &l) < 0)
668                 return -errno;
669
670         l = sizeof(remote);
671         if (getpeername(fd, &remote.sa, &l) < 0)
672                 return -errno;
673
674         switch (local.sa.sa_family) {
675
676         case AF_INET: {
677                 uint32_t
678                         a = ntohl(local.in.sin_addr.s_addr),
679                         b = ntohl(remote.in.sin_addr.s_addr);
680
681                 if (asprintf(&r,
682                              "%u-%u.%u.%u.%u:%u-%u.%u.%u.%u:%u",
683                              nr,
684                              a >> 24, (a >> 16) & 0xFF, (a >> 8) & 0xFF, a & 0xFF,
685                              ntohs(local.in.sin_port),
686                              b >> 24, (b >> 16) & 0xFF, (b >> 8) & 0xFF, b & 0xFF,
687                              ntohs(remote.in.sin_port)) < 0)
688                         return -ENOMEM;
689
690                 break;
691         }
692
693         case AF_INET6: {
694                 static const unsigned char ipv4_prefix[] = {
695                         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF
696                 };
697
698                 if (memcmp(&local.in6.sin6_addr, ipv4_prefix, sizeof(ipv4_prefix)) == 0 &&
699                     memcmp(&remote.in6.sin6_addr, ipv4_prefix, sizeof(ipv4_prefix)) == 0) {
700                         const uint8_t
701                                 *a = local.in6.sin6_addr.s6_addr+12,
702                                 *b = remote.in6.sin6_addr.s6_addr+12;
703
704                         if (asprintf(&r,
705                                      "%u-%u.%u.%u.%u:%u-%u.%u.%u.%u:%u",
706                                      nr,
707                                      a[0], a[1], a[2], a[3],
708                                      ntohs(local.in6.sin6_port),
709                                      b[0], b[1], b[2], b[3],
710                                      ntohs(remote.in6.sin6_port)) < 0)
711                                 return -ENOMEM;
712                 } else {
713                         char a[INET6_ADDRSTRLEN], b[INET6_ADDRSTRLEN];
714
715                         if (asprintf(&r,
716                                      "%u-%s:%u-%s:%u",
717                                      nr,
718                                      inet_ntop(AF_INET6, &local.in6.sin6_addr, a, sizeof(a)),
719                                      ntohs(local.in6.sin6_port),
720                                      inet_ntop(AF_INET6, &remote.in6.sin6_addr, b, sizeof(b)),
721                                      ntohs(remote.in6.sin6_port)) < 0)
722                                 return -ENOMEM;
723                 }
724
725                 break;
726         }
727
728         case AF_UNIX: {
729                 struct ucred ucred;
730                 int k;
731
732                 k = getpeercred(fd, &ucred);
733                 if (k >= 0) {
734                         if (asprintf(&r,
735                                      "%u-"PID_FMT"-"UID_FMT,
736                                      nr, ucred.pid, ucred.uid) < 0)
737                                 return -ENOMEM;
738                 } else if (k == -ENODATA) {
739                         /* This handles the case where somebody is
740                          * connecting from another pid/uid namespace
741                          * (e.g. from outside of our container). */
742                         if (asprintf(&r,
743                                      "%u-unknown",
744                                      nr) < 0)
745                                 return -ENOMEM;
746                 } else
747                         return k;
748
749                 break;
750         }
751
752         default:
753                 assert_not_reached("Unhandled socket type.");
754         }
755
756         *instance = r;
757         return 0;
758 }
759
760 static void socket_close_fds(Socket *s) {
761         SocketPort *p;
762         char **i;
763
764         assert(s);
765
766         LIST_FOREACH(port, p, s->ports) {
767
768                 p->event_source = sd_event_source_unref(p->event_source);
769
770                 if (p->fd < 0)
771                         continue;
772
773                 p->fd = safe_close(p->fd);
774
775                 /* One little note: we should normally not delete any
776                  * sockets in the file system here! After all some
777                  * other process we spawned might still have a
778                  * reference of this fd and wants to continue to use
779                  * it. Therefore we delete sockets in the file system
780                  * before we create a new one, not after we stopped
781                  * using one! */
782
783                 if (s->remove_on_stop) {
784                         switch (p->type) {
785
786                         case SOCKET_FIFO:
787                                 unlink(p->path);
788                                 break;
789
790                         case SOCKET_MQUEUE:
791                                 mq_unlink(p->path);
792                                 break;
793
794                         case SOCKET_SOCKET:
795                                 socket_address_unlink(&p->address);
796                                 break;
797
798                         default:
799                                 break;
800                         }
801                 }
802         }
803
804         if (s->remove_on_stop)
805                 STRV_FOREACH(i, s->symlinks)
806                         unlink(*i);
807 }
808
809 static void socket_apply_socket_options(Socket *s, int fd) {
810         assert(s);
811         assert(fd >= 0);
812
813         if (s->keep_alive) {
814                 int b = s->keep_alive;
815                 if (setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &b, sizeof(b)) < 0)
816                         log_warning_unit(UNIT(s)->id, "SO_KEEPALIVE failed: %m");
817         }
818
819         if (s->keep_alive_time) {
820                 int value = s->keep_alive_time / USEC_PER_SEC;
821                 if (setsockopt(fd, SOL_TCP, TCP_KEEPIDLE, &value, sizeof(value)) < 0)
822                         log_warning_unit(UNIT(s)->id, "TCP_KEEPIDLE failed: %m");
823         }
824
825         if (s->keep_alive_interval) {
826                 int value =  s->keep_alive_interval / USEC_PER_SEC;
827                 if (setsockopt(fd, SOL_TCP, TCP_KEEPINTVL, &value, sizeof(value)) < 0)
828                         log_warning_unit(UNIT(s)->id, "TCP_KEEPINTVL failed: %m");
829         }
830
831         if (s->keep_alive_cnt) {
832                 int value = s->keep_alive_cnt;
833                 if (setsockopt(fd, SOL_SOCKET, TCP_KEEPCNT, &value, sizeof(value)) < 0)
834                         log_warning_unit(UNIT(s)->id, "TCP_KEEPCNT failed: %m");
835         }
836
837         if (s->defer_accept) {
838                 int value = s->defer_accept / USEC_PER_SEC;
839                 if (setsockopt(fd, SOL_TCP, TCP_DEFER_ACCEPT, &value, sizeof(value)) < 0)
840                         log_warning_unit(UNIT(s)->id, "TCP_DEFER_ACCEPT failed: %m");
841         }
842
843         if (s->no_delay) {
844                 int b = s->no_delay;
845                 if (setsockopt(fd, SOL_TCP, TCP_NODELAY, &b, sizeof(b)) < 0)
846                         log_warning_unit(UNIT(s)->id, "TCP_NODELAY failed: %m");
847         }
848
849         if (s->broadcast) {
850                 int one = 1;
851                 if (setsockopt(fd, SOL_SOCKET, SO_BROADCAST, &one, sizeof(one)) < 0)
852                         log_warning_unit(UNIT(s)->id, "SO_BROADCAST failed: %m");
853         }
854
855         if (s->pass_cred) {
856                 int one = 1;
857                 if (setsockopt(fd, SOL_SOCKET, SO_PASSCRED, &one, sizeof(one)) < 0)
858                         log_warning_unit(UNIT(s)->id, "SO_PASSCRED failed: %m");
859         }
860
861         if (s->pass_sec) {
862                 int one = 1;
863                 if (setsockopt(fd, SOL_SOCKET, SO_PASSSEC, &one, sizeof(one)) < 0)
864                         log_warning_unit(UNIT(s)->id, "SO_PASSSEC failed: %m");
865         }
866
867         if (s->priority >= 0)
868                 if (setsockopt(fd, SOL_SOCKET, SO_PRIORITY, &s->priority, sizeof(s->priority)) < 0)
869                         log_warning_unit(UNIT(s)->id, "SO_PRIORITY failed: %m");
870
871         if (s->receive_buffer > 0) {
872                 int value = (int) s->receive_buffer;
873
874                 /* We first try with SO_RCVBUFFORCE, in case we have the perms for that */
875
876                 if (setsockopt(fd, SOL_SOCKET, SO_RCVBUFFORCE, &value, sizeof(value)) < 0)
877                         if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &value, sizeof(value)) < 0)
878                                 log_warning_unit(UNIT(s)->id, "SO_RCVBUF failed: %m");
879         }
880
881         if (s->send_buffer > 0) {
882                 int value = (int) s->send_buffer;
883                 if (setsockopt(fd, SOL_SOCKET, SO_SNDBUFFORCE, &value, sizeof(value)) < 0)
884                         if (setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &value, sizeof(value)) < 0)
885                                 log_warning_unit(UNIT(s)->id, "SO_SNDBUF failed: %m");
886         }
887
888         if (s->mark >= 0)
889                 if (setsockopt(fd, SOL_SOCKET, SO_MARK, &s->mark, sizeof(s->mark)) < 0)
890                         log_warning_unit(UNIT(s)->id, "SO_MARK failed: %m");
891
892         if (s->ip_tos >= 0)
893                 if (setsockopt(fd, IPPROTO_IP, IP_TOS, &s->ip_tos, sizeof(s->ip_tos)) < 0)
894                         log_warning_unit(UNIT(s)->id, "IP_TOS failed: %m");
895
896         if (s->ip_ttl >= 0) {
897                 int r, x;
898
899                 r = setsockopt(fd, IPPROTO_IP, IP_TTL, &s->ip_ttl, sizeof(s->ip_ttl));
900
901                 if (socket_ipv6_is_supported())
902                         x = setsockopt(fd, IPPROTO_IPV6, IPV6_UNICAST_HOPS, &s->ip_ttl, sizeof(s->ip_ttl));
903                 else {
904                         x = -1;
905                         errno = EAFNOSUPPORT;
906                 }
907
908                 if (r < 0 && x < 0)
909                         log_warning_unit(UNIT(s)->id,
910                                          "IP_TTL/IPV6_UNICAST_HOPS failed: %m");
911         }
912
913         if (s->tcp_congestion)
914                 if (setsockopt(fd, SOL_TCP, TCP_CONGESTION, s->tcp_congestion, strlen(s->tcp_congestion)+1) < 0)
915                         log_warning_unit(UNIT(s)->id, "TCP_CONGESTION failed: %m");
916
917         if (s->reuse_port) {
918                 int b = s->reuse_port;
919                 if (setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &b, sizeof(b)) < 0)
920                         log_warning_unit(UNIT(s)->id, "SO_REUSEPORT failed: %m");
921         }
922
923         if (s->smack_ip_in)
924                 if (smack_label_ip_in_fd(fd, s->smack_ip_in) < 0)
925                         log_error_unit(UNIT(s)->id, "smack_label_ip_in_fd: %m");
926
927         if (s->smack_ip_out)
928                 if (smack_label_ip_out_fd(fd, s->smack_ip_out) < 0)
929                         log_error_unit(UNIT(s)->id, "smack_label_ip_out_fd: %m");
930 }
931
932 static void socket_apply_fifo_options(Socket *s, int fd) {
933         assert(s);
934         assert(fd >= 0);
935
936         if (s->pipe_size > 0)
937                 if (fcntl(fd, F_SETPIPE_SZ, s->pipe_size) < 0)
938                         log_warning_unit(UNIT(s)->id,
939                                          "F_SETPIPE_SZ: %m");
940
941         if (s->smack)
942                 if (smack_label_fd(fd, s->smack) < 0)
943                         log_error_unit(UNIT(s)->id, "smack_label_fd: %m");
944 }
945
946 static int fifo_address_create(
947                 const char *path,
948                 mode_t directory_mode,
949                 mode_t socket_mode,
950                 int *_fd) {
951
952         int fd = -1, r = 0;
953         struct stat st;
954         mode_t old_mask;
955
956         assert(path);
957         assert(_fd);
958
959         mkdir_parents_label(path, directory_mode);
960
961         r = label_context_set(path, S_IFIFO);
962         if (r < 0)
963                 goto fail;
964
965         /* Enforce the right access mode for the fifo */
966         old_mask = umask(~ socket_mode);
967
968         /* Include the original umask in our mask */
969         umask(~socket_mode | old_mask);
970
971         r = mkfifo(path, socket_mode);
972         umask(old_mask);
973
974         if (r < 0 && errno != EEXIST) {
975                 r = -errno;
976                 goto fail;
977         }
978
979         if ((fd = open(path, O_RDWR|O_CLOEXEC|O_NOCTTY|O_NONBLOCK|O_NOFOLLOW)) < 0) {
980                 r = -errno;
981                 goto fail;
982         }
983
984         label_context_clear();
985
986         if (fstat(fd, &st) < 0) {
987                 r = -errno;
988                 goto fail;
989         }
990
991         if (!S_ISFIFO(st.st_mode) ||
992             (st.st_mode & 0777) != (socket_mode & ~old_mask) ||
993             st.st_uid != getuid() ||
994             st.st_gid != getgid()) {
995
996                 r = -EEXIST;
997                 goto fail;
998         }
999
1000         *_fd = fd;
1001         return 0;
1002
1003 fail:
1004         label_context_clear();
1005         safe_close(fd);
1006
1007         return r;
1008 }
1009
1010 static int special_address_create(
1011                 const char *path,
1012                 int *_fd) {
1013
1014         int fd = -1, r = 0;
1015         struct stat st;
1016
1017         assert(path);
1018         assert(_fd);
1019
1020         fd = open(path, O_RDONLY|O_CLOEXEC|O_NOCTTY|O_NONBLOCK|O_NOFOLLOW);
1021         if (fd < 0) {
1022                 r = -errno;
1023                 goto fail;
1024         }
1025
1026         if (fstat(fd, &st) < 0) {
1027                 r = -errno;
1028                 goto fail;
1029         }
1030
1031         /* Check whether this is a /proc, /sys or /dev file or char device */
1032         if (!S_ISREG(st.st_mode) && !S_ISCHR(st.st_mode)) {
1033                 r = -EEXIST;
1034                 goto fail;
1035         }
1036
1037         *_fd = fd;
1038         return 0;
1039
1040 fail:
1041         safe_close(fd);
1042
1043         return r;
1044 }
1045
1046 static int mq_address_create(
1047                 const char *path,
1048                 mode_t mq_mode,
1049                 long maxmsg,
1050                 long msgsize,
1051                 int *_fd) {
1052
1053         int fd = -1, r = 0;
1054         struct stat st;
1055         mode_t old_mask;
1056         struct mq_attr _attr, *attr = NULL;
1057
1058         assert(path);
1059         assert(_fd);
1060
1061         if (maxmsg > 0 && msgsize > 0) {
1062                 zero(_attr);
1063                 _attr.mq_flags = O_NONBLOCK;
1064                 _attr.mq_maxmsg = maxmsg;
1065                 _attr.mq_msgsize = msgsize;
1066                 attr = &_attr;
1067         }
1068
1069         /* Enforce the right access mode for the mq */
1070         old_mask = umask(~ mq_mode);
1071
1072         /* Include the original umask in our mask */
1073         umask(~mq_mode | old_mask);
1074         fd = mq_open(path, O_RDONLY|O_CLOEXEC|O_NONBLOCK|O_CREAT, mq_mode, attr);
1075         umask(old_mask);
1076
1077         if (fd < 0) {
1078                 r = -errno;
1079                 goto fail;
1080         }
1081
1082         if (fstat(fd, &st) < 0) {
1083                 r = -errno;
1084                 goto fail;
1085         }
1086
1087         if ((st.st_mode & 0777) != (mq_mode & ~old_mask) ||
1088             st.st_uid != getuid() ||
1089             st.st_gid != getgid()) {
1090
1091                 r = -EEXIST;
1092                 goto fail;
1093         }
1094
1095         *_fd = fd;
1096         return 0;
1097
1098 fail:
1099         safe_close(fd);
1100         return r;
1101 }
1102
1103 static int socket_symlink(Socket *s) {
1104         const char *p;
1105         char **i;
1106
1107         assert(s);
1108
1109         p = socket_find_symlink_target(s);
1110         if (!p)
1111                 return 0;
1112
1113         STRV_FOREACH(i, s->symlinks)
1114                 symlink(p, *i);
1115
1116         return 0;
1117 }
1118
1119 static int socket_open_fds(Socket *s) {
1120         SocketPort *p;
1121         int r;
1122         char *label = NULL;
1123         bool know_label = false;
1124
1125         assert(s);
1126
1127         LIST_FOREACH(port, p, s->ports) {
1128
1129                 if (p->fd >= 0)
1130                         continue;
1131
1132                 if (p->type == SOCKET_SOCKET) {
1133
1134                         if (!know_label) {
1135
1136                                 r = socket_instantiate_service(s);
1137                                 if (r < 0)
1138                                         return r;
1139
1140                                 if (UNIT_ISSET(s->service) &&
1141                                     SERVICE(UNIT_DEREF(s->service))->exec_command[SERVICE_EXEC_START]) {
1142                                         r = label_get_create_label_from_exe(SERVICE(UNIT_DEREF(s->service))->exec_command[SERVICE_EXEC_START]->path, &label);
1143                                         if (r < 0 && r != -EPERM)
1144                                                 return r;
1145                                 }
1146
1147                                 know_label = true;
1148                         }
1149
1150                         r = socket_address_listen(
1151                                         &p->address,
1152                                         SOCK_CLOEXEC|SOCK_NONBLOCK,
1153                                         s->backlog,
1154                                         s->bind_ipv6_only,
1155                                         s->bind_to_device,
1156                                         s->free_bind,
1157                                         s->transparent,
1158                                         s->directory_mode,
1159                                         s->socket_mode,
1160                                         label);
1161                         if (r < 0)
1162                                 goto rollback;
1163
1164                         p->fd = r;
1165                         socket_apply_socket_options(s, p->fd);
1166                         socket_symlink(s);
1167
1168                 } else  if (p->type == SOCKET_SPECIAL) {
1169
1170                         r = special_address_create(
1171                                         p->path,
1172                                         &p->fd);
1173                         if (r < 0)
1174                                 goto rollback;
1175
1176                 } else  if (p->type == SOCKET_FIFO) {
1177
1178                         r = fifo_address_create(
1179                                         p->path,
1180                                         s->directory_mode,
1181                                         s->socket_mode,
1182                                         &p->fd);
1183                         if (r < 0)
1184                                 goto rollback;
1185
1186                         socket_apply_fifo_options(s, p->fd);
1187                         socket_symlink(s);
1188
1189                 } else if (p->type == SOCKET_MQUEUE) {
1190
1191                         r = mq_address_create(
1192                                         p->path,
1193                                         s->socket_mode,
1194                                         s->mq_maxmsg,
1195                                         s->mq_msgsize,
1196                                         &p->fd);
1197                         if (r < 0)
1198                                 goto rollback;
1199                 } else
1200                         assert_not_reached("Unknown port type");
1201         }
1202
1203         label_free(label);
1204         return 0;
1205
1206 rollback:
1207         socket_close_fds(s);
1208         label_free(label);
1209         return r;
1210 }
1211
1212 static void socket_unwatch_fds(Socket *s) {
1213         SocketPort *p;
1214         int r;
1215
1216         assert(s);
1217
1218         LIST_FOREACH(port, p, s->ports) {
1219                 if (p->fd < 0)
1220                         continue;
1221
1222                 if (!p->event_source)
1223                         continue;
1224
1225                 r = sd_event_source_set_enabled(p->event_source, SD_EVENT_OFF);
1226                 if (r < 0)
1227                         log_debug_unit(UNIT(s)->id, "Failed to disable event source.");
1228         }
1229 }
1230
1231 static int socket_watch_fds(Socket *s) {
1232         SocketPort *p;
1233         int r;
1234
1235         assert(s);
1236
1237         LIST_FOREACH(port, p, s->ports) {
1238                 if (p->fd < 0)
1239                         continue;
1240
1241                 if (p->event_source)
1242                         r = sd_event_source_set_enabled(p->event_source, SD_EVENT_ON);
1243                 else
1244                         r = sd_event_add_io(UNIT(s)->manager->event, &p->event_source, p->fd, EPOLLIN, socket_dispatch_io, p);
1245
1246                 if (r < 0) {
1247                         log_warning_unit(UNIT(s)->id, "Failed to watch listening fds: %s", strerror(-r));
1248                         goto fail;
1249                 }
1250         }
1251
1252         return 0;
1253
1254 fail:
1255         socket_unwatch_fds(s);
1256         return r;
1257 }
1258
1259 static void socket_set_state(Socket *s, SocketState state) {
1260         SocketState old_state;
1261         assert(s);
1262
1263         old_state = s->state;
1264         s->state = state;
1265
1266         if (!IN_SET(state,
1267                     SOCKET_START_PRE,
1268                     SOCKET_START_CHOWN,
1269                     SOCKET_START_POST,
1270                     SOCKET_STOP_PRE,
1271                     SOCKET_STOP_PRE_SIGTERM,
1272                     SOCKET_STOP_PRE_SIGKILL,
1273                     SOCKET_STOP_POST,
1274                     SOCKET_FINAL_SIGTERM,
1275                     SOCKET_FINAL_SIGKILL)) {
1276
1277                 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
1278                 socket_unwatch_control_pid(s);
1279                 s->control_command = NULL;
1280                 s->control_command_id = _SOCKET_EXEC_COMMAND_INVALID;
1281         }
1282
1283         if (state != SOCKET_LISTENING)
1284                 socket_unwatch_fds(s);
1285
1286         if (!IN_SET(state,
1287                     SOCKET_START_CHOWN,
1288                     SOCKET_START_POST,
1289                     SOCKET_LISTENING,
1290                     SOCKET_RUNNING,
1291                     SOCKET_STOP_PRE,
1292                     SOCKET_STOP_PRE_SIGTERM,
1293                     SOCKET_STOP_PRE_SIGKILL))
1294                 socket_close_fds(s);
1295
1296         if (state != old_state)
1297                 log_debug_unit(UNIT(s)->id, "%s changed %s -> %s",
1298                                UNIT(s)->id, socket_state_to_string(old_state), socket_state_to_string(state));
1299
1300         unit_notify(UNIT(s), state_translation_table[old_state], state_translation_table[state], true);
1301 }
1302
1303 static int socket_coldplug(Unit *u) {
1304         Socket *s = SOCKET(u);
1305         int r;
1306
1307         assert(s);
1308         assert(s->state == SOCKET_DEAD);
1309
1310         if (s->deserialized_state == s->state)
1311                 return 0;
1312
1313         if (IN_SET(s->deserialized_state,
1314                    SOCKET_START_PRE,
1315                    SOCKET_START_CHOWN,
1316                    SOCKET_START_POST,
1317                    SOCKET_STOP_PRE,
1318                    SOCKET_STOP_PRE_SIGTERM,
1319                    SOCKET_STOP_PRE_SIGKILL,
1320                    SOCKET_STOP_POST,
1321                    SOCKET_FINAL_SIGTERM,
1322                    SOCKET_FINAL_SIGKILL)) {
1323
1324                 if (s->control_pid <= 0)
1325                         return -EBADMSG;
1326
1327                 r = unit_watch_pid(UNIT(s), s->control_pid);
1328                 if (r < 0)
1329                         return r;
1330
1331                 r = socket_arm_timer(s);
1332                 if (r < 0)
1333                         return r;
1334         }
1335
1336         if (IN_SET(s->deserialized_state,
1337                    SOCKET_START_CHOWN,
1338                    SOCKET_START_POST,
1339                    SOCKET_LISTENING,
1340                    SOCKET_RUNNING,
1341                    SOCKET_STOP_PRE,
1342                    SOCKET_STOP_PRE_SIGTERM,
1343                    SOCKET_STOP_PRE_SIGKILL)) {
1344                 r = socket_open_fds(s);
1345                 if (r < 0)
1346                         return r;
1347         }
1348
1349         if (s->deserialized_state == SOCKET_LISTENING) {
1350                 r = socket_watch_fds(s);
1351                 if (r < 0)
1352                         return r;
1353         }
1354
1355         socket_set_state(s, s->deserialized_state);
1356         return 0;
1357 }
1358
1359 static int socket_spawn(Socket *s, ExecCommand *c, pid_t *_pid) {
1360         _cleanup_free_ char **argv = NULL;
1361         pid_t pid;
1362         int r;
1363
1364         assert(s);
1365         assert(c);
1366         assert(_pid);
1367
1368         unit_realize_cgroup(UNIT(s));
1369
1370         r = unit_setup_exec_runtime(UNIT(s));
1371         if (r < 0)
1372                 goto fail;
1373
1374         r = socket_arm_timer(s);
1375         if (r < 0)
1376                 goto fail;
1377
1378         r = unit_full_printf_strv(UNIT(s), c->argv, &argv);
1379         if (r < 0)
1380                 goto fail;
1381
1382         r = exec_spawn(c,
1383                        argv,
1384                        &s->exec_context,
1385                        NULL, 0,
1386                        UNIT(s)->manager->environment,
1387                        true,
1388                        true,
1389                        true,
1390                        UNIT(s)->manager->confirm_spawn,
1391                        UNIT(s)->manager->cgroup_supported,
1392                        UNIT(s)->cgroup_path,
1393                        manager_get_runtime_prefix(UNIT(s)->manager),
1394                        UNIT(s)->id,
1395                        0,
1396                        NULL,
1397                        s->exec_runtime,
1398                        &pid);
1399         if (r < 0)
1400                 goto fail;
1401
1402         r = unit_watch_pid(UNIT(s), pid);
1403         if (r < 0)
1404                 /* FIXME: we need to do something here */
1405                 goto fail;
1406
1407         *_pid = pid;
1408         return 0;
1409
1410 fail:
1411         s->timer_event_source = sd_event_source_unref(s->timer_event_source);
1412         return r;
1413 }
1414
1415 static int socket_chown(Socket *s, pid_t *_pid) {
1416         pid_t pid;
1417         int r;
1418
1419         r = socket_arm_timer(s);
1420         if (r < 0)
1421                 goto fail;
1422
1423         /* We have to resolve the user names out-of-process, hence
1424          * let's fork here. It's messy, but well, what can we do? */
1425
1426         pid = fork();
1427         if (pid < 0)
1428                 return -errno;
1429
1430         if (pid == 0) {
1431                 SocketPort *p;
1432                 uid_t uid = (uid_t) -1;
1433                 gid_t gid = (gid_t) -1;
1434                 int ret;
1435
1436                 default_signals(SIGNALS_CRASH_HANDLER, SIGNALS_IGNORE, -1);
1437                 ignore_signals(SIGPIPE, -1);
1438                 log_forget_fds();
1439
1440                 if (!isempty(s->user)) {
1441                         const char *user = s->user;
1442
1443                         r = get_user_creds(&user, &uid, &gid, NULL, NULL);
1444                         if (r < 0) {
1445                                 ret = EXIT_USER;
1446                                 goto fail_child;
1447                         }
1448                 }
1449
1450                 if (!isempty(s->group)) {
1451                         const char *group = s->group;
1452
1453                         r = get_group_creds(&group, &gid);
1454                         if (r < 0) {
1455                                 ret = EXIT_GROUP;
1456                                 goto fail_child;
1457                         }
1458                 }
1459
1460                 LIST_FOREACH(port, p, s->ports) {
1461                         const char *path = NULL;
1462
1463                         if (p->type == SOCKET_SOCKET)
1464                                 path = socket_address_get_path(&p->address);
1465                         else if (p->type == SOCKET_FIFO)
1466                                 path = p->path;
1467
1468                         if (!path)
1469                                 continue;
1470
1471                         if (chown(path, uid, gid) < 0) {
1472                                 r = -errno;
1473                                 ret = EXIT_CHOWN;
1474                                 goto fail_child;
1475                         }
1476                 }
1477
1478                 _exit(0);
1479
1480         fail_child:
1481                 log_open();
1482                 log_error("Failed to chown socket at step %s: %s", exit_status_to_string(ret, EXIT_STATUS_SYSTEMD), strerror(-r));
1483
1484                 _exit(ret);
1485         }
1486
1487         r = unit_watch_pid(UNIT(s), pid);
1488         if (r < 0)
1489                 goto fail;
1490
1491         *_pid = pid;
1492         return 0;
1493
1494 fail:
1495         s->timer_event_source = sd_event_source_unref(s->timer_event_source);
1496         return r;
1497 }
1498
1499 static void socket_enter_dead(Socket *s, SocketResult f) {
1500         assert(s);
1501
1502         if (f != SOCKET_SUCCESS)
1503                 s->result = f;
1504
1505         exec_runtime_destroy(s->exec_runtime);
1506         s->exec_runtime = exec_runtime_unref(s->exec_runtime);
1507
1508         exec_context_destroy_runtime_directory(&s->exec_context, manager_get_runtime_prefix(UNIT(s)->manager));
1509
1510         socket_set_state(s, s->result != SOCKET_SUCCESS ? SOCKET_FAILED : SOCKET_DEAD);
1511 }
1512
1513 static void socket_enter_signal(Socket *s, SocketState state, SocketResult f);
1514
1515 static void socket_enter_stop_post(Socket *s, SocketResult f) {
1516         int r;
1517         assert(s);
1518
1519         if (f != SOCKET_SUCCESS)
1520                 s->result = f;
1521
1522         socket_unwatch_control_pid(s);
1523         s->control_command_id = SOCKET_EXEC_STOP_POST;
1524         s->control_command = s->exec_command[SOCKET_EXEC_STOP_POST];
1525
1526         if (s->control_command) {
1527                 r = socket_spawn(s, s->control_command, &s->control_pid);
1528                 if (r < 0)
1529                         goto fail;
1530
1531                 socket_set_state(s, SOCKET_STOP_POST);
1532         } else
1533                 socket_enter_signal(s, SOCKET_FINAL_SIGTERM, SOCKET_SUCCESS);
1534
1535         return;
1536
1537 fail:
1538         log_warning_unit(UNIT(s)->id,
1539                          "%s failed to run 'stop-post' task: %s",
1540                          UNIT(s)->id, strerror(-r));
1541         socket_enter_signal(s, SOCKET_FINAL_SIGTERM, SOCKET_FAILURE_RESOURCES);
1542 }
1543
1544 static void socket_enter_signal(Socket *s, SocketState state, SocketResult f) {
1545         int r;
1546
1547         assert(s);
1548
1549         if (f != SOCKET_SUCCESS)
1550                 s->result = f;
1551
1552         r = unit_kill_context(
1553                         UNIT(s),
1554                         &s->kill_context,
1555                         state != SOCKET_STOP_PRE_SIGTERM && state != SOCKET_FINAL_SIGTERM,
1556                         -1,
1557                         s->control_pid,
1558                         false);
1559         if (r < 0)
1560                 goto fail;
1561
1562         if (r > 0) {
1563                 r = socket_arm_timer(s);
1564                 if (r < 0)
1565                         goto fail;
1566
1567                 socket_set_state(s, state);
1568         } else if (state == SOCKET_STOP_PRE_SIGTERM)
1569                 socket_enter_signal(s, SOCKET_STOP_PRE_SIGKILL, SOCKET_SUCCESS);
1570         else if (state == SOCKET_STOP_PRE_SIGKILL)
1571                 socket_enter_stop_post(s, SOCKET_SUCCESS);
1572         else if (state == SOCKET_FINAL_SIGTERM)
1573                 socket_enter_signal(s, SOCKET_FINAL_SIGKILL, SOCKET_SUCCESS);
1574         else
1575                 socket_enter_dead(s, SOCKET_SUCCESS);
1576
1577         return;
1578
1579 fail:
1580         log_warning_unit(UNIT(s)->id, "%s failed to kill processes: %s", UNIT(s)->id, strerror(-r));
1581
1582         if (state == SOCKET_STOP_PRE_SIGTERM || state == SOCKET_STOP_PRE_SIGKILL)
1583                 socket_enter_stop_post(s, SOCKET_FAILURE_RESOURCES);
1584         else
1585                 socket_enter_dead(s, SOCKET_FAILURE_RESOURCES);
1586 }
1587
1588 static void socket_enter_stop_pre(Socket *s, SocketResult f) {
1589         int r;
1590         assert(s);
1591
1592         if (f != SOCKET_SUCCESS)
1593                 s->result = f;
1594
1595         socket_unwatch_control_pid(s);
1596         s->control_command_id = SOCKET_EXEC_STOP_PRE;
1597         s->control_command = s->exec_command[SOCKET_EXEC_STOP_PRE];
1598
1599         if (s->control_command) {
1600                 r = socket_spawn(s, s->control_command, &s->control_pid);
1601                 if (r < 0)
1602                         goto fail;
1603
1604                 socket_set_state(s, SOCKET_STOP_PRE);
1605         } else
1606                 socket_enter_stop_post(s, SOCKET_SUCCESS);
1607
1608         return;
1609
1610 fail:
1611         log_warning_unit(UNIT(s)->id, "%s failed to run 'stop-pre' task: %s", UNIT(s)->id, strerror(-r));
1612         socket_enter_stop_post(s, SOCKET_FAILURE_RESOURCES);
1613 }
1614
1615 static void socket_enter_listening(Socket *s) {
1616         int r;
1617         assert(s);
1618
1619         r = socket_watch_fds(s);
1620         if (r < 0) {
1621                 log_warning_unit(UNIT(s)->id, "%s failed to watch sockets: %s", UNIT(s)->id, strerror(-r));
1622                 goto fail;
1623         }
1624
1625         socket_set_state(s, SOCKET_LISTENING);
1626         return;
1627
1628 fail:
1629         socket_enter_stop_pre(s, SOCKET_FAILURE_RESOURCES);
1630 }
1631
1632 static void socket_enter_start_post(Socket *s) {
1633         int r;
1634         assert(s);
1635
1636         socket_unwatch_control_pid(s);
1637         s->control_command_id = SOCKET_EXEC_START_POST;
1638         s->control_command = s->exec_command[SOCKET_EXEC_START_POST];
1639
1640         if (s->control_command) {
1641                 r = socket_spawn(s, s->control_command, &s->control_pid);
1642                 if (r < 0) {
1643                         log_warning_unit(UNIT(s)->id, "%s failed to run 'start-post' task: %s", UNIT(s)->id, strerror(-r));
1644                         goto fail;
1645                 }
1646
1647                 socket_set_state(s, SOCKET_START_POST);
1648         } else
1649                 socket_enter_listening(s);
1650
1651         return;
1652
1653 fail:
1654         socket_enter_stop_pre(s, SOCKET_FAILURE_RESOURCES);
1655 }
1656
1657 static void socket_enter_start_chown(Socket *s) {
1658         int r;
1659
1660         assert(s);
1661
1662         r = socket_open_fds(s);
1663         if (r < 0) {
1664                 log_warning_unit(UNIT(s)->id, "%s failed to listen on sockets: %s", UNIT(s)->id, strerror(-r));
1665                 goto fail;
1666         }
1667
1668         if (!isempty(s->user) || !isempty(s->group)) {
1669
1670                 socket_unwatch_control_pid(s);
1671                 s->control_command_id = SOCKET_EXEC_START_CHOWN;
1672                 s->control_command = NULL;
1673
1674                 r = socket_chown(s, &s->control_pid);
1675                 if (r < 0) {
1676                         log_warning_unit(UNIT(s)->id, "%s failed to fork 'start-chown' task: %s", UNIT(s)->id, strerror(-r));
1677                         goto fail;
1678                 }
1679
1680                 socket_set_state(s, SOCKET_START_CHOWN);
1681         } else
1682                 socket_enter_start_post(s);
1683
1684         return;
1685
1686 fail:
1687         socket_enter_stop_pre(s, SOCKET_FAILURE_RESOURCES);
1688 }
1689
1690 static void socket_enter_start_pre(Socket *s) {
1691         int r;
1692         assert(s);
1693
1694         socket_unwatch_control_pid(s);
1695         s->control_command_id = SOCKET_EXEC_START_PRE;
1696         s->control_command = s->exec_command[SOCKET_EXEC_START_PRE];
1697
1698         if (s->control_command) {
1699                 r = socket_spawn(s, s->control_command, &s->control_pid);
1700                 if (r < 0) {
1701                         log_warning_unit(UNIT(s)->id, "%s failed to run 'start-pre' task: %s", UNIT(s)->id, strerror(-r));
1702                         goto fail;
1703                 }
1704
1705                 socket_set_state(s, SOCKET_START_PRE);
1706         } else
1707                 socket_enter_start_chown(s);
1708
1709         return;
1710
1711 fail:
1712         socket_enter_dead(s, SOCKET_FAILURE_RESOURCES);
1713 }
1714
1715 static void socket_enter_running(Socket *s, int cfd) {
1716         _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
1717         int r;
1718
1719         assert(s);
1720
1721         /* We don't take connections anymore if we are supposed to
1722          * shut down anyway */
1723         if (unit_stop_pending(UNIT(s))) {
1724
1725                 log_debug_unit(UNIT(s)->id, "Suppressing connection request on %s since unit stop is scheduled.", UNIT(s)->id);
1726
1727                 if (cfd >= 0)
1728                         safe_close(cfd);
1729                 else  {
1730                         /* Flush all sockets by closing and reopening them */
1731                         socket_close_fds(s);
1732
1733                         r = socket_open_fds(s);
1734                         if (r < 0) {
1735                                 log_warning_unit(UNIT(s)->id, "%s failed to listen on sockets: %s", UNIT(s)->id, strerror(-r));
1736                                 socket_enter_stop_pre(s, SOCKET_FAILURE_RESOURCES);
1737                                 return;
1738                         }
1739
1740                         r = socket_watch_fds(s);
1741                         if (r < 0) {
1742                                 log_warning_unit(UNIT(s)->id, "%s failed to watch sockets: %s", UNIT(s)->id, strerror(-r));
1743                                 socket_enter_stop_pre(s, SOCKET_FAILURE_RESOURCES);
1744                         }
1745                 }
1746
1747                 return;
1748         }
1749
1750         if (cfd < 0) {
1751                 Iterator i;
1752                 Unit *other;
1753                 bool pending = false;
1754
1755                 /* If there's already a start pending don't bother to
1756                  * do anything */
1757                 SET_FOREACH(other, UNIT(s)->dependencies[UNIT_TRIGGERS], i)
1758                         if (unit_active_or_pending(other)) {
1759                                 pending = true;
1760                                 break;
1761                         }
1762
1763                 if (!pending) {
1764                         if (!UNIT_ISSET(s->service)) {
1765                                 log_error_unit(UNIT(s)->id, "%s: service to activate vanished, refusing activation.", UNIT(s)->id);
1766                                 r = -ENOENT;
1767                                 goto fail;
1768                         }
1769
1770                         r = manager_add_job(UNIT(s)->manager, JOB_START, UNIT_DEREF(s->service), JOB_REPLACE, true, &error, NULL);
1771                         if (r < 0)
1772                                 goto fail;
1773                 }
1774
1775                 socket_set_state(s, SOCKET_RUNNING);
1776         } else {
1777                 _cleanup_free_ char *prefix = NULL, *instance = NULL, *name = NULL;
1778                 Service *service;
1779
1780                 if (s->n_connections >= s->max_connections) {
1781                         log_warning_unit(UNIT(s)->id, "%s: Too many incoming connections (%u)", UNIT(s)->id, s->n_connections);
1782                         safe_close(cfd);
1783                         return;
1784                 }
1785
1786                 r = socket_instantiate_service(s);
1787                 if (r < 0)
1788                         goto fail;
1789
1790                 r = instance_from_socket(cfd, s->n_accepted, &instance);
1791                 if (r < 0) {
1792                         if (r != -ENOTCONN)
1793                                 goto fail;
1794
1795                         /* ENOTCONN is legitimate if TCP RST was received.
1796                          * This connection is over, but the socket unit lives on. */
1797                         safe_close(cfd);
1798                         return;
1799                 }
1800
1801                 prefix = unit_name_to_prefix(UNIT(s)->id);
1802                 if (!prefix) {
1803                         r = -ENOMEM;
1804                         goto fail;
1805                 }
1806
1807                 name = unit_name_build(prefix, instance, ".service");
1808                 if (!name) {
1809                         r = -ENOMEM;
1810                         goto fail;
1811                 }
1812
1813                 r = unit_add_name(UNIT_DEREF(s->service), name);
1814                 if (r < 0)
1815                         goto fail;
1816
1817                 service = SERVICE(UNIT_DEREF(s->service));
1818                 unit_ref_unset(&s->service);
1819                 s->n_accepted ++;
1820
1821                 UNIT(service)->no_gc = false;
1822
1823                 unit_choose_id(UNIT(service), name);
1824
1825                 r = service_set_socket_fd(service, cfd, s);
1826                 if (r < 0)
1827                         goto fail;
1828
1829                 cfd = -1;
1830                 s->n_connections ++;
1831
1832                 r = manager_add_job(UNIT(s)->manager, JOB_START, UNIT(service), JOB_REPLACE, true, &error, NULL);
1833                 if (r < 0)
1834                         goto fail;
1835
1836                 /* Notify clients about changed counters */
1837                 unit_add_to_dbus_queue(UNIT(s));
1838         }
1839
1840         return;
1841
1842 fail:
1843         log_warning_unit(UNIT(s)->id, "%s failed to queue service startup job (Maybe the service file is missing or not a %s unit?): %s",
1844                          UNIT(s)->id, cfd >= 0 ? "template" : "non-template",
1845                          bus_error_message(&error, r));
1846
1847         socket_enter_stop_pre(s, SOCKET_FAILURE_RESOURCES);
1848         safe_close(cfd);
1849 }
1850
1851 static void socket_run_next(Socket *s) {
1852         int r;
1853
1854         assert(s);
1855         assert(s->control_command);
1856         assert(s->control_command->command_next);
1857
1858         socket_unwatch_control_pid(s);
1859
1860         s->control_command = s->control_command->command_next;
1861
1862         r = socket_spawn(s, s->control_command, &s->control_pid);
1863         if (r < 0)
1864                 goto fail;
1865
1866         return;
1867
1868 fail:
1869         log_warning_unit(UNIT(s)->id, "%s failed to run next task: %s", UNIT(s)->id, strerror(-r));
1870
1871         if (s->state == SOCKET_START_POST)
1872                 socket_enter_stop_pre(s, SOCKET_FAILURE_RESOURCES);
1873         else if (s->state == SOCKET_STOP_POST)
1874                 socket_enter_dead(s, SOCKET_FAILURE_RESOURCES);
1875         else
1876                 socket_enter_signal(s, SOCKET_FINAL_SIGTERM, SOCKET_FAILURE_RESOURCES);
1877 }
1878
1879 static int socket_start(Unit *u) {
1880         Socket *s = SOCKET(u);
1881
1882         assert(s);
1883
1884         /* We cannot fulfill this request right now, try again later
1885          * please! */
1886         if (IN_SET(s->state,
1887                    SOCKET_STOP_PRE,
1888                    SOCKET_STOP_PRE_SIGKILL,
1889                    SOCKET_STOP_PRE_SIGTERM,
1890                    SOCKET_STOP_POST,
1891                    SOCKET_FINAL_SIGTERM,
1892                    SOCKET_FINAL_SIGKILL))
1893                 return -EAGAIN;
1894
1895         /* Already on it! */
1896         if (IN_SET(s->state,
1897                    SOCKET_START_PRE,
1898                    SOCKET_START_CHOWN,
1899                    SOCKET_START_POST))
1900                 return 0;
1901
1902         /* Cannot run this without the service being around */
1903         if (UNIT_ISSET(s->service)) {
1904                 Service *service;
1905
1906                 service = SERVICE(UNIT_DEREF(s->service));
1907
1908                 if (UNIT(service)->load_state != UNIT_LOADED) {
1909                         log_error_unit(u->id, "Socket service %s not loaded, refusing.", UNIT(service)->id);
1910                         return -ENOENT;
1911                 }
1912
1913                 /* If the service is already active we cannot start the
1914                  * socket */
1915                 if (service->state != SERVICE_DEAD &&
1916                     service->state != SERVICE_FAILED &&
1917                     service->state != SERVICE_AUTO_RESTART) {
1918                         log_error_unit(u->id, "Socket service %s already active, refusing.", UNIT(service)->id);
1919                         return -EBUSY;
1920                 }
1921         }
1922
1923         assert(s->state == SOCKET_DEAD || s->state == SOCKET_FAILED);
1924
1925         s->result = SOCKET_SUCCESS;
1926         socket_enter_start_pre(s);
1927
1928         return 0;
1929 }
1930
1931 static int socket_stop(Unit *u) {
1932         Socket *s = SOCKET(u);
1933
1934         assert(s);
1935
1936         /* Already on it */
1937         if (IN_SET(s->state,
1938                    SOCKET_STOP_PRE,
1939                    SOCKET_STOP_PRE_SIGTERM,
1940                    SOCKET_STOP_PRE_SIGKILL,
1941                    SOCKET_STOP_POST,
1942                    SOCKET_FINAL_SIGTERM,
1943                    SOCKET_FINAL_SIGKILL))
1944                 return 0;
1945
1946         /* If there's already something running we go directly into
1947          * kill mode. */
1948         if (IN_SET(s->state,
1949                    SOCKET_START_PRE,
1950                    SOCKET_START_CHOWN,
1951                    SOCKET_START_POST)) {
1952                 socket_enter_signal(s, SOCKET_STOP_PRE_SIGTERM, SOCKET_SUCCESS);
1953                 return -EAGAIN;
1954         }
1955
1956         assert(s->state == SOCKET_LISTENING || s->state == SOCKET_RUNNING);
1957
1958         socket_enter_stop_pre(s, SOCKET_SUCCESS);
1959         return 0;
1960 }
1961
1962 static int socket_serialize(Unit *u, FILE *f, FDSet *fds) {
1963         Socket *s = SOCKET(u);
1964         SocketPort *p;
1965         int r;
1966
1967         assert(u);
1968         assert(f);
1969         assert(fds);
1970
1971         unit_serialize_item(u, f, "state", socket_state_to_string(s->state));
1972         unit_serialize_item(u, f, "result", socket_result_to_string(s->result));
1973         unit_serialize_item_format(u, f, "n-accepted", "%u", s->n_accepted);
1974
1975         if (s->control_pid > 0)
1976                 unit_serialize_item_format(u, f, "control-pid", PID_FMT, s->control_pid);
1977
1978         if (s->control_command_id >= 0)
1979                 unit_serialize_item(u, f, "control-command", socket_exec_command_to_string(s->control_command_id));
1980
1981         LIST_FOREACH(port, p, s->ports) {
1982                 int copy;
1983
1984                 if (p->fd < 0)
1985                         continue;
1986
1987                 copy = fdset_put_dup(fds, p->fd);
1988                 if (copy < 0)
1989                         return copy;
1990
1991                 if (p->type == SOCKET_SOCKET) {
1992                         _cleanup_free_ char *t = NULL;
1993
1994                         r = socket_address_print(&p->address, &t);
1995                         if (r < 0)
1996                                 return r;
1997
1998                         if (socket_address_family(&p->address) == AF_NETLINK)
1999                                 unit_serialize_item_format(u, f, "netlink", "%i %s", copy, t);
2000                         else
2001                                 unit_serialize_item_format(u, f, "socket", "%i %i %s", copy, p->address.type, t);
2002
2003                 } else if (p->type == SOCKET_SPECIAL)
2004                         unit_serialize_item_format(u, f, "special", "%i %s", copy, p->path);
2005                 else if (p->type == SOCKET_MQUEUE)
2006                         unit_serialize_item_format(u, f, "mqueue", "%i %s", copy, p->path);
2007                 else {
2008                         assert(p->type == SOCKET_FIFO);
2009                         unit_serialize_item_format(u, f, "fifo", "%i %s", copy, p->path);
2010                 }
2011         }
2012
2013         return 0;
2014 }
2015
2016 static int socket_deserialize_item(Unit *u, const char *key, const char *value, FDSet *fds) {
2017         Socket *s = SOCKET(u);
2018
2019         assert(u);
2020         assert(key);
2021         assert(value);
2022
2023         if (streq(key, "state")) {
2024                 SocketState state;
2025
2026                 state = socket_state_from_string(value);
2027                 if (state < 0)
2028                         log_debug_unit(u->id, "Failed to parse state value %s", value);
2029                 else
2030                         s->deserialized_state = state;
2031         } else if (streq(key, "result")) {
2032                 SocketResult f;
2033
2034                 f = socket_result_from_string(value);
2035                 if (f < 0)
2036                         log_debug_unit(u->id, "Failed to parse result value %s", value);
2037                 else if (f != SOCKET_SUCCESS)
2038                         s->result = f;
2039
2040         } else if (streq(key, "n-accepted")) {
2041                 unsigned k;
2042
2043                 if (safe_atou(value, &k) < 0)
2044                         log_debug_unit(u->id, "Failed to parse n-accepted value %s", value);
2045                 else
2046                         s->n_accepted += k;
2047         } else if (streq(key, "control-pid")) {
2048                 pid_t pid;
2049
2050                 if (parse_pid(value, &pid) < 0)
2051                         log_debug_unit(u->id, "Failed to parse control-pid value %s", value);
2052                 else
2053                         s->control_pid = pid;
2054         } else if (streq(key, "control-command")) {
2055                 SocketExecCommand id;
2056
2057                 id = socket_exec_command_from_string(value);
2058                 if (id < 0)
2059                         log_debug_unit(u->id, "Failed to parse exec-command value %s", value);
2060                 else {
2061                         s->control_command_id = id;
2062                         s->control_command = s->exec_command[id];
2063                 }
2064         } else if (streq(key, "fifo")) {
2065                 int fd, skip = 0;
2066                 SocketPort *p;
2067
2068                 if (sscanf(value, "%i %n", &fd, &skip) < 1 || fd < 0 || !fdset_contains(fds, fd))
2069                         log_debug_unit(u->id, "Failed to parse fifo value %s", value);
2070                 else {
2071
2072                         LIST_FOREACH(port, p, s->ports)
2073                                 if (p->type == SOCKET_FIFO &&
2074                                     streq_ptr(p->path, value+skip))
2075                                         break;
2076
2077                         if (p) {
2078                                 safe_close(p->fd);
2079                                 p->fd = fdset_remove(fds, fd);
2080                         }
2081                 }
2082
2083         } else if (streq(key, "special")) {
2084                 int fd, skip = 0;
2085                 SocketPort *p;
2086
2087                 if (sscanf(value, "%i %n", &fd, &skip) < 1 || fd < 0 || !fdset_contains(fds, fd))
2088                         log_debug_unit(u->id, "Failed to parse special value %s", value);
2089                 else {
2090
2091                         LIST_FOREACH(port, p, s->ports)
2092                                 if (p->type == SOCKET_SPECIAL &&
2093                                     streq_ptr(p->path, value+skip))
2094                                         break;
2095
2096                         if (p) {
2097                                 safe_close(p->fd);
2098                                 p->fd = fdset_remove(fds, fd);
2099                         }
2100                 }
2101
2102         } else if (streq(key, "mqueue")) {
2103                 int fd, skip = 0;
2104                 SocketPort *p;
2105
2106                 if (sscanf(value, "%i %n", &fd, &skip) < 1 || fd < 0 || !fdset_contains(fds, fd))
2107                         log_debug_unit(u->id, "Failed to parse mqueue value %s", value);
2108                 else {
2109
2110                         LIST_FOREACH(port, p, s->ports)
2111                                 if (p->type == SOCKET_MQUEUE &&
2112                                     streq_ptr(p->path, value+skip))
2113                                         break;
2114
2115                         if (p) {
2116                                 safe_close(p->fd);
2117                                 p->fd = fdset_remove(fds, fd);
2118                         }
2119                 }
2120
2121         } else if (streq(key, "socket")) {
2122                 int fd, type, skip = 0;
2123                 SocketPort *p;
2124
2125                 if (sscanf(value, "%i %i %n", &fd, &type, &skip) < 2 || fd < 0 || type < 0 || !fdset_contains(fds, fd))
2126                         log_debug_unit(u->id, "Failed to parse socket value %s", value);
2127                 else {
2128
2129                         LIST_FOREACH(port, p, s->ports)
2130                                 if (socket_address_is(&p->address, value+skip, type))
2131                                         break;
2132
2133                         if (p) {
2134                                 safe_close(p->fd);
2135                                 p->fd = fdset_remove(fds, fd);
2136                         }
2137                 }
2138
2139         } else if (streq(key, "netlink")) {
2140                 int fd, skip = 0;
2141                 SocketPort *p;
2142
2143                 if (sscanf(value, "%i %n", &fd, &skip) < 1 || fd < 0 || !fdset_contains(fds, fd))
2144                         log_debug_unit(u->id, "Failed to parse socket value %s", value);
2145                 else {
2146
2147                         LIST_FOREACH(port, p, s->ports)
2148                                 if (socket_address_is_netlink(&p->address, value+skip))
2149                                         break;
2150
2151                         if (p) {
2152                                 safe_close(p->fd);
2153                                 p->fd = fdset_remove(fds, fd);
2154                         }
2155                 }
2156         } else
2157                 log_debug_unit(UNIT(s)->id, "Unknown serialization key '%s'", key);
2158
2159         return 0;
2160 }
2161
2162 static int socket_distribute_fds(Unit *u, FDSet *fds) {
2163         Socket *s = SOCKET(u);
2164         SocketPort *p;
2165
2166         assert(u);
2167
2168         LIST_FOREACH(port, p, s->ports) {
2169                 Iterator i;
2170                 int fd;
2171
2172                 if (p->type != SOCKET_SOCKET)
2173                         continue;
2174
2175                 if (p->fd >= 0)
2176                         continue;
2177
2178                 FDSET_FOREACH(fd, fds, i) {
2179                         if (socket_address_matches_fd(&p->address, fd)) {
2180                                 p->fd = fdset_remove(fds, fd);
2181                                 s->deserialized_state = SOCKET_LISTENING;
2182                                 break;
2183                         }
2184                 }
2185         }
2186
2187         return 0;
2188 }
2189
2190 _pure_ static UnitActiveState socket_active_state(Unit *u) {
2191         assert(u);
2192
2193         return state_translation_table[SOCKET(u)->state];
2194 }
2195
2196 _pure_ static const char *socket_sub_state_to_string(Unit *u) {
2197         assert(u);
2198
2199         return socket_state_to_string(SOCKET(u)->state);
2200 }
2201
2202 const char* socket_port_type_to_string(SocketPort *p) {
2203
2204         assert(p);
2205
2206         switch (p->type) {
2207
2208         case SOCKET_SOCKET:
2209
2210                 switch (p->address.type) {
2211
2212                 case SOCK_STREAM:
2213                         return "Stream";
2214
2215                 case SOCK_DGRAM:
2216                         return "Datagram";
2217
2218                 case SOCK_SEQPACKET:
2219                         return "SequentialPacket";
2220
2221                 case SOCK_RAW:
2222                         if (socket_address_family(&p->address) == AF_NETLINK)
2223                                 return "Netlink";
2224
2225                 default:
2226                         return NULL;
2227                 }
2228
2229         case SOCKET_SPECIAL:
2230                 return "Special";
2231
2232         case SOCKET_MQUEUE:
2233                 return "MessageQueue";
2234
2235         case SOCKET_FIFO:
2236                 return "FIFO";
2237
2238         default:
2239                 return NULL;
2240         }
2241 }
2242
2243 _pure_ static bool socket_check_gc(Unit *u) {
2244         Socket *s = SOCKET(u);
2245
2246         assert(u);
2247
2248         return s->n_connections > 0;
2249 }
2250
2251 static int socket_dispatch_io(sd_event_source *source, int fd, uint32_t revents, void *userdata) {
2252         SocketPort *p = userdata;
2253         int cfd = -1;
2254
2255         assert(p);
2256         assert(fd >= 0);
2257
2258         if (p->socket->state != SOCKET_LISTENING)
2259                 return 0;
2260
2261         log_debug_unit(UNIT(p->socket)->id, "Incoming traffic on %s", UNIT(p->socket)->id);
2262
2263         if (revents != EPOLLIN) {
2264
2265                 if (revents & EPOLLHUP)
2266                         log_error_unit(UNIT(p->socket)->id, "%s: Got POLLHUP on a listening socket. The service probably invoked shutdown() on it, and should better not do that.",
2267                                        UNIT(p->socket)->id);
2268                 else
2269                         log_error_unit(UNIT(p->socket)->id, "%s: Got unexpected poll event (0x%x) on socket.",
2270                                        UNIT(p->socket)->id, revents);
2271
2272                 goto fail;
2273         }
2274
2275         if (p->socket->accept &&
2276             p->type == SOCKET_SOCKET &&
2277             socket_address_can_accept(&p->address)) {
2278
2279                 for (;;) {
2280
2281                         cfd = accept4(fd, NULL, NULL, SOCK_NONBLOCK);
2282                         if (cfd < 0) {
2283
2284                                 if (errno == EINTR)
2285                                         continue;
2286
2287                                 log_error_unit(UNIT(p->socket)->id,
2288                                                "Failed to accept socket: %m");
2289                                 goto fail;
2290                         }
2291
2292                         break;
2293                 }
2294
2295                 socket_apply_socket_options(p->socket, cfd);
2296         }
2297
2298         socket_enter_running(p->socket, cfd);
2299         return 0;
2300
2301 fail:
2302         socket_enter_stop_pre(p->socket, SOCKET_FAILURE_RESOURCES);
2303         return 0;
2304 }
2305
2306 static void socket_sigchld_event(Unit *u, pid_t pid, int code, int status) {
2307         Socket *s = SOCKET(u);
2308         SocketResult f;
2309
2310         assert(s);
2311         assert(pid >= 0);
2312
2313         if (pid != s->control_pid)
2314                 return;
2315
2316         s->control_pid = 0;
2317
2318         if (is_clean_exit(code, status, NULL))
2319                 f = SOCKET_SUCCESS;
2320         else if (code == CLD_EXITED)
2321                 f = SOCKET_FAILURE_EXIT_CODE;
2322         else if (code == CLD_KILLED)
2323                 f = SOCKET_FAILURE_SIGNAL;
2324         else if (code == CLD_DUMPED)
2325                 f = SOCKET_FAILURE_CORE_DUMP;
2326         else
2327                 assert_not_reached("Unknown sigchld code");
2328
2329         if (s->control_command) {
2330                 exec_status_exit(&s->control_command->exec_status, &s->exec_context, pid, code, status);
2331
2332                 if (s->control_command->ignore)
2333                         f = SOCKET_SUCCESS;
2334         }
2335
2336         log_full_unit(f == SOCKET_SUCCESS ? LOG_DEBUG : LOG_NOTICE,
2337                       u->id,
2338                       "%s control process exited, code=%s status=%i",
2339                       u->id, sigchld_code_to_string(code), status);
2340
2341         if (f != SOCKET_SUCCESS)
2342                 s->result = f;
2343
2344         if (s->control_command &&
2345             s->control_command->command_next &&
2346             f == SOCKET_SUCCESS) {
2347
2348                 log_debug_unit(u->id,
2349                                "%s running next command for state %s",
2350                                u->id, socket_state_to_string(s->state));
2351                 socket_run_next(s);
2352         } else {
2353                 s->control_command = NULL;
2354                 s->control_command_id = _SOCKET_EXEC_COMMAND_INVALID;
2355
2356                 /* No further commands for this step, so let's figure
2357                  * out what to do next */
2358
2359                 log_debug_unit(u->id,
2360                                "%s got final SIGCHLD for state %s",
2361                                u->id, socket_state_to_string(s->state));
2362
2363                 switch (s->state) {
2364
2365                 case SOCKET_START_PRE:
2366                         if (f == SOCKET_SUCCESS)
2367                                 socket_enter_start_chown(s);
2368                         else
2369                                 socket_enter_signal(s, SOCKET_FINAL_SIGTERM, f);
2370                         break;
2371
2372                 case SOCKET_START_CHOWN:
2373                         if (f == SOCKET_SUCCESS)
2374                                 socket_enter_start_post(s);
2375                         else
2376                                 socket_enter_stop_pre(s, f);
2377                         break;
2378
2379                 case SOCKET_START_POST:
2380                         if (f == SOCKET_SUCCESS)
2381                                 socket_enter_listening(s);
2382                         else
2383                                 socket_enter_stop_pre(s, f);
2384                         break;
2385
2386                 case SOCKET_STOP_PRE:
2387                 case SOCKET_STOP_PRE_SIGTERM:
2388                 case SOCKET_STOP_PRE_SIGKILL:
2389                         socket_enter_stop_post(s, f);
2390                         break;
2391
2392                 case SOCKET_STOP_POST:
2393                 case SOCKET_FINAL_SIGTERM:
2394                 case SOCKET_FINAL_SIGKILL:
2395                         socket_enter_dead(s, f);
2396                         break;
2397
2398                 default:
2399                         assert_not_reached("Uh, control process died at wrong time.");
2400                 }
2401         }
2402
2403         /* Notify clients about changed exit status */
2404         unit_add_to_dbus_queue(u);
2405 }
2406
2407 static int socket_dispatch_timer(sd_event_source *source, usec_t usec, void *userdata) {
2408         Socket *s = SOCKET(userdata);
2409
2410         assert(s);
2411         assert(s->timer_event_source == source);
2412
2413         switch (s->state) {
2414
2415         case SOCKET_START_PRE:
2416                 log_warning_unit(UNIT(s)->id, "%s starting timed out. Terminating.", UNIT(s)->id);
2417                 socket_enter_signal(s, SOCKET_FINAL_SIGTERM, SOCKET_FAILURE_TIMEOUT);
2418                 break;
2419
2420         case SOCKET_START_CHOWN:
2421         case SOCKET_START_POST:
2422                 log_warning_unit(UNIT(s)->id, "%s starting timed out. Stopping.", UNIT(s)->id);
2423                 socket_enter_stop_pre(s, SOCKET_FAILURE_TIMEOUT);
2424                 break;
2425
2426         case SOCKET_STOP_PRE:
2427                 log_warning_unit(UNIT(s)->id, "%s stopping timed out. Terminating.", UNIT(s)->id);
2428                 socket_enter_signal(s, SOCKET_STOP_PRE_SIGTERM, SOCKET_FAILURE_TIMEOUT);
2429                 break;
2430
2431         case SOCKET_STOP_PRE_SIGTERM:
2432                 if (s->kill_context.send_sigkill) {
2433                         log_warning_unit(UNIT(s)->id, "%s stopping timed out. Killing.", UNIT(s)->id);
2434                         socket_enter_signal(s, SOCKET_STOP_PRE_SIGKILL, SOCKET_FAILURE_TIMEOUT);
2435                 } else {
2436                         log_warning_unit(UNIT(s)->id, "%s stopping timed out. Skipping SIGKILL. Ignoring.", UNIT(s)->id);
2437                         socket_enter_stop_post(s, SOCKET_FAILURE_TIMEOUT);
2438                 }
2439                 break;
2440
2441         case SOCKET_STOP_PRE_SIGKILL:
2442                 log_warning_unit(UNIT(s)->id, "%s still around after SIGKILL. Ignoring.", UNIT(s)->id);
2443                 socket_enter_stop_post(s, SOCKET_FAILURE_TIMEOUT);
2444                 break;
2445
2446         case SOCKET_STOP_POST:
2447                 log_warning_unit(UNIT(s)->id, "%s stopping timed out (2). Terminating.", UNIT(s)->id);
2448                 socket_enter_signal(s, SOCKET_FINAL_SIGTERM, SOCKET_FAILURE_TIMEOUT);
2449                 break;
2450
2451         case SOCKET_FINAL_SIGTERM:
2452                 if (s->kill_context.send_sigkill) {
2453                         log_warning_unit(UNIT(s)->id, "%s stopping timed out (2). Killing.", UNIT(s)->id);
2454                         socket_enter_signal(s, SOCKET_FINAL_SIGKILL, SOCKET_FAILURE_TIMEOUT);
2455                 } else {
2456                         log_warning_unit(UNIT(s)->id, "%s stopping timed out (2). Skipping SIGKILL. Ignoring.", UNIT(s)->id);
2457                         socket_enter_dead(s, SOCKET_FAILURE_TIMEOUT);
2458                 }
2459                 break;
2460
2461         case SOCKET_FINAL_SIGKILL:
2462                 log_warning_unit(UNIT(s)->id, "%s still around after SIGKILL (2). Entering failed mode.", UNIT(s)->id);
2463                 socket_enter_dead(s, SOCKET_FAILURE_TIMEOUT);
2464                 break;
2465
2466         default:
2467                 assert_not_reached("Timeout at wrong time.");
2468         }
2469
2470         return 0;
2471 }
2472
2473 int socket_collect_fds(Socket *s, int **fds, unsigned *n_fds) {
2474         int *rfds;
2475         unsigned rn_fds, k;
2476         SocketPort *p;
2477
2478         assert(s);
2479         assert(fds);
2480         assert(n_fds);
2481
2482         /* Called from the service code for requesting our fds */
2483
2484         rn_fds = 0;
2485         LIST_FOREACH(port, p, s->ports)
2486                 if (p->fd >= 0)
2487                         rn_fds++;
2488
2489         if (rn_fds <= 0) {
2490                 *fds = NULL;
2491                 *n_fds = 0;
2492                 return 0;
2493         }
2494
2495         if (!(rfds = new(int, rn_fds)))
2496                 return -ENOMEM;
2497
2498         k = 0;
2499         LIST_FOREACH(port, p, s->ports)
2500                 if (p->fd >= 0)
2501                         rfds[k++] = p->fd;
2502
2503         assert(k == rn_fds);
2504
2505         *fds = rfds;
2506         *n_fds = rn_fds;
2507
2508         return 0;
2509 }
2510
2511 static void socket_reset_failed(Unit *u) {
2512         Socket *s = SOCKET(u);
2513
2514         assert(s);
2515
2516         if (s->state == SOCKET_FAILED)
2517                 socket_set_state(s, SOCKET_DEAD);
2518
2519         s->result = SOCKET_SUCCESS;
2520 }
2521
2522 static void socket_notify_service_dead(Socket *s, bool failed_permanent) {
2523         assert(s);
2524
2525         /* The service is dead. Dang!
2526          *
2527          * This is strictly for one-instance-for-all-connections
2528          * services. */
2529
2530         if (s->state == SOCKET_RUNNING) {
2531                 log_debug_unit(UNIT(s)->id, "%s got notified about service death (failed permanently: %s)", UNIT(s)->id, yes_no(failed_permanent));
2532                 if (failed_permanent)
2533                         socket_enter_stop_pre(s, SOCKET_FAILURE_SERVICE_FAILED_PERMANENT);
2534                 else
2535                         socket_enter_listening(s);
2536         }
2537 }
2538
2539 void socket_connection_unref(Socket *s) {
2540         assert(s);
2541
2542         /* The service is dead. Yay!
2543          *
2544          * This is strictly for one-instance-per-connection
2545          * services. */
2546
2547         assert(s->n_connections > 0);
2548         s->n_connections--;
2549
2550         log_debug_unit(UNIT(s)->id, "%s: One connection closed, %u left.", UNIT(s)->id, s->n_connections);
2551 }
2552
2553 static void socket_trigger_notify(Unit *u, Unit *other) {
2554         Socket *s = SOCKET(u);
2555         Service *se;
2556
2557         assert(u);
2558         assert(other);
2559
2560         /* Don't propagate state changes from the service if we are
2561            already down or accepting connections */
2562         if ((s->state !=  SOCKET_RUNNING &&
2563             s->state != SOCKET_LISTENING) ||
2564             s->accept)
2565                 return;
2566
2567         if (other->load_state != UNIT_LOADED ||
2568             other->type != UNIT_SERVICE)
2569                 return;
2570
2571         se = SERVICE(other);
2572
2573         if (se->state == SERVICE_FAILED)
2574                 socket_notify_service_dead(s, se->result == SERVICE_FAILURE_START_LIMIT);
2575
2576         if (se->state == SERVICE_DEAD ||
2577             se->state == SERVICE_STOP ||
2578             se->state == SERVICE_STOP_SIGTERM ||
2579             se->state == SERVICE_STOP_SIGKILL ||
2580             se->state == SERVICE_STOP_POST ||
2581             se->state == SERVICE_FINAL_SIGTERM ||
2582             se->state == SERVICE_FINAL_SIGKILL ||
2583             se->state == SERVICE_AUTO_RESTART)
2584                 socket_notify_service_dead(s, false);
2585
2586         if (se->state == SERVICE_RUNNING)
2587                 socket_set_state(s, SOCKET_RUNNING);
2588 }
2589
2590 static int socket_kill(Unit *u, KillWho who, int signo, sd_bus_error *error) {
2591         return unit_kill_common(u, who, signo, -1, SOCKET(u)->control_pid, error);
2592 }
2593
2594 static int socket_get_timeout(Unit *u, uint64_t *timeout) {
2595         Socket *s = SOCKET(u);
2596         int r;
2597
2598         if (!s->timer_event_source)
2599                 return 0;
2600
2601         r = sd_event_source_get_time(s->timer_event_source, timeout);
2602         if (r < 0)
2603                 return r;
2604
2605         return 1;
2606 }
2607
2608 static const char* const socket_state_table[_SOCKET_STATE_MAX] = {
2609         [SOCKET_DEAD] = "dead",
2610         [SOCKET_START_PRE] = "start-pre",
2611         [SOCKET_START_CHOWN] = "start-chown",
2612         [SOCKET_START_POST] = "start-post",
2613         [SOCKET_LISTENING] = "listening",
2614         [SOCKET_RUNNING] = "running",
2615         [SOCKET_STOP_PRE] = "stop-pre",
2616         [SOCKET_STOP_PRE_SIGTERM] = "stop-pre-sigterm",
2617         [SOCKET_STOP_PRE_SIGKILL] = "stop-pre-sigkill",
2618         [SOCKET_STOP_POST] = "stop-post",
2619         [SOCKET_FINAL_SIGTERM] = "final-sigterm",
2620         [SOCKET_FINAL_SIGKILL] = "final-sigkill",
2621         [SOCKET_FAILED] = "failed"
2622 };
2623
2624 DEFINE_STRING_TABLE_LOOKUP(socket_state, SocketState);
2625
2626 static const char* const socket_exec_command_table[_SOCKET_EXEC_COMMAND_MAX] = {
2627         [SOCKET_EXEC_START_PRE] = "StartPre",
2628         [SOCKET_EXEC_START_CHOWN] = "StartChown",
2629         [SOCKET_EXEC_START_POST] = "StartPost",
2630         [SOCKET_EXEC_STOP_PRE] = "StopPre",
2631         [SOCKET_EXEC_STOP_POST] = "StopPost"
2632 };
2633
2634 DEFINE_STRING_TABLE_LOOKUP(socket_exec_command, SocketExecCommand);
2635
2636 static const char* const socket_result_table[_SOCKET_RESULT_MAX] = {
2637         [SOCKET_SUCCESS] = "success",
2638         [SOCKET_FAILURE_RESOURCES] = "resources",
2639         [SOCKET_FAILURE_TIMEOUT] = "timeout",
2640         [SOCKET_FAILURE_EXIT_CODE] = "exit-code",
2641         [SOCKET_FAILURE_SIGNAL] = "signal",
2642         [SOCKET_FAILURE_CORE_DUMP] = "core-dump",
2643         [SOCKET_FAILURE_SERVICE_FAILED_PERMANENT] = "service-failed-permanent"
2644 };
2645
2646 DEFINE_STRING_TABLE_LOOKUP(socket_result, SocketResult);
2647
2648 const UnitVTable socket_vtable = {
2649         .object_size = sizeof(Socket),
2650         .exec_context_offset = offsetof(Socket, exec_context),
2651         .cgroup_context_offset = offsetof(Socket, cgroup_context),
2652         .kill_context_offset = offsetof(Socket, kill_context),
2653         .exec_runtime_offset = offsetof(Socket, exec_runtime),
2654
2655         .sections =
2656                 "Unit\0"
2657                 "Socket\0"
2658                 "Install\0",
2659         .private_section = "Socket",
2660
2661         .init = socket_init,
2662         .done = socket_done,
2663         .load = socket_load,
2664
2665         .coldplug = socket_coldplug,
2666
2667         .dump = socket_dump,
2668
2669         .start = socket_start,
2670         .stop = socket_stop,
2671
2672         .kill = socket_kill,
2673
2674         .get_timeout = socket_get_timeout,
2675
2676         .serialize = socket_serialize,
2677         .deserialize_item = socket_deserialize_item,
2678         .distribute_fds = socket_distribute_fds,
2679
2680         .active_state = socket_active_state,
2681         .sub_state_to_string = socket_sub_state_to_string,
2682
2683         .check_gc = socket_check_gc,
2684
2685         .sigchld_event = socket_sigchld_event,
2686
2687         .trigger_notify = socket_trigger_notify,
2688
2689         .reset_failed = socket_reset_failed,
2690
2691         .bus_interface = "org.freedesktop.systemd1.Socket",
2692         .bus_vtable = bus_socket_vtable,
2693         .bus_set_property = bus_socket_set_property,
2694         .bus_commit_properties = bus_socket_commit_properties,
2695
2696         .status_message_formats = {
2697                 /*.starting_stopping = {
2698                         [0] = "Starting socket %s...",
2699                         [1] = "Stopping socket %s...",
2700                 },*/
2701                 .finished_start_job = {
2702                         [JOB_DONE]       = "Listening on %s.",
2703                         [JOB_FAILED]     = "Failed to listen on %s.",
2704                         [JOB_DEPENDENCY] = "Dependency failed for %s.",
2705                         [JOB_TIMEOUT]    = "Timed out starting %s.",
2706                 },
2707                 .finished_stop_job = {
2708                         [JOB_DONE]       = "Closed %s.",
2709                         [JOB_FAILED]     = "Failed stopping %s.",
2710                         [JOB_TIMEOUT]    = "Timed out stopping %s.",
2711                 },
2712         },
2713 };