129
128
s->bind_to_device = NULL;
131
130
unit_unwatch_timer(u, &s->timer_watch);
133
/* Make sure no service instance refers to us anymore. */
134
LIST_FOREACH(units_by_type, i, u->meta.manager->units_by_type[UNIT_SERVICE]) {
135
Service *service = (Service *) i;
137
if (service->accept_socket == s)
138
service->accept_socket = NULL;
140
set_remove(service->configured_sockets, s);
144
133
static int socket_instantiate_service(Socket *s) {
208
198
static int socket_verify(Socket *s) {
211
if (s->meta.load_state != UNIT_LOADED)
201
if (UNIT(s)->load_state != UNIT_LOADED)
215
log_error("%s lacks Listen setting. Refusing.", s->meta.id);
205
log_error("%s lacks Listen setting. Refusing.", UNIT(s)->id);
219
209
if (s->accept && have_non_accept_socket(s)) {
220
log_error("%s configured for accepting sockets, but sockets are non-accepting. Refusing.", s->meta.id);
210
log_error("%s configured for accepting sockets, but sockets are non-accepting. Refusing.", UNIT(s)->id);
224
214
if (s->accept && s->max_connections <= 0) {
225
log_error("%s's MaxConnection setting too small. Refusing.", s->meta.id);
215
log_error("%s's MaxConnection setting too small. Refusing.", UNIT(s)->id);
229
if (s->accept && s->service) {
230
log_error("Explicit service configuration for accepting sockets not supported on %s. Refusing.", s->meta.id);
219
if (s->accept && UNIT_DEREF(s->service)) {
220
log_error("Explicit service configuration for accepting sockets not supported on %s. Refusing.", UNIT(s)->id);
234
224
if (s->exec_context.pam_name && s->exec_context.kill_mode != KILL_CONTROL_GROUP) {
235
log_error("%s has PAM enabled. Kill mode must be set to 'control-group'. Refusing.", s->meta.id);
225
log_error("%s has PAM enabled. Kill mode must be set to 'control-group'. Refusing.", UNIT(s)->id);
323
313
return unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_SHUTDOWN_TARGET, NULL, true);
316
static bool socket_has_exec(Socket *s) {
320
for (i = 0; i < _SOCKET_EXEC_COMMAND_MAX; i++)
321
if (s->exec_command[i])
326
327
static int socket_load(Unit *u) {
327
328
Socket *s = SOCKET(u);
331
assert(u->meta.load_state == UNIT_STUB);
332
assert(u->load_state == UNIT_STUB);
333
334
if ((r = unit_load_fragment_and_dropin(u)) < 0)
336
337
/* This is a new unit? Then let's add in some extras */
337
if (u->meta.load_state == UNIT_LOADED) {
338
if (u->load_state == UNIT_LOADED) {
339
340
if (have_non_accept_socket(s)) {
342
if ((r = unit_load_related_unit(u, ".service", (Unit**) &s->service)) < 0)
342
if (!UNIT_DEREF(s->service)) {
345
r = unit_load_related_unit(u, ".service", &x);
345
if ((r = unit_add_dependency(u, UNIT_BEFORE, UNIT(s->service), true)) < 0)
349
unit_ref_set(&s->service, x);
352
r = unit_add_two_dependencies(u, UNIT_BEFORE, UNIT_TRIGGERS, UNIT_DEREF(s->service), true);
657
675
log_warning("SO_BROADCAST failed: %m");
680
if (setsockopt(fd, SOL_SOCKET, SO_PASSCRED, &one, sizeof(one)) < 0)
681
log_warning("SO_PASSCRED failed: %m");
686
if (setsockopt(fd, SOL_SOCKET, SO_PASSSEC, &one, sizeof(one)) < 0)
687
log_warning("SO_PASSSEC failed: %m");
660
690
if (s->priority >= 0)
661
691
if (setsockopt(fd, SOL_SOCKET, SO_PRIORITY, &s->priority, sizeof(s->priority)) < 0)
662
692
log_warning("SO_PRIORITY failed: %m");
664
694
if (s->receive_buffer > 0) {
665
695
int value = (int) s->receive_buffer;
697
/* We first try with SO_RCVBUFFORCE, in case we have the perms for that */
666
699
if (setsockopt(fd, SOL_SOCKET, SO_RCVBUFFORCE, &value, sizeof(value)) < 0)
667
log_warning("SO_RCVBUFFORCE failed: %m");
700
if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &value, sizeof(value)) < 0)
701
log_warning("SO_RCVBUF failed: %m");
670
704
if (s->send_buffer > 0) {
671
705
int value = (int) s->send_buffer;
672
706
if (setsockopt(fd, SOL_SOCKET, SO_SNDBUFFORCE, &value, sizeof(value)) < 0)
673
log_warning("SO_SNDBUFFORCE failed: %m");
707
if (setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &value, sizeof(value)) < 0)
708
log_warning("SO_SNDBUF failed: %m");
676
711
if (s->mark >= 0)
1136
static void socket_enter_dead(Socket *s, bool success) {
1172
static void socket_enter_dead(Socket *s, SocketResult f) {
1175
if (f != SOCKET_SUCCESS)
1142
socket_set_state(s, s->failure ? SOCKET_FAILED : SOCKET_DEAD);
1178
socket_set_state(s, s->result != SOCKET_SUCCESS ? SOCKET_FAILED : SOCKET_DEAD);
1145
static void socket_enter_signal(Socket *s, SocketState state, bool success);
1181
static void socket_enter_signal(Socket *s, SocketState state, SocketResult f);
1147
static void socket_enter_stop_post(Socket *s, bool success) {
1183
static void socket_enter_stop_post(Socket *s, SocketResult f) {
1187
if (f != SOCKET_SUCCESS)
1154
1190
socket_unwatch_control_pid(s);
1162
1198
socket_set_state(s, SOCKET_STOP_POST);
1164
socket_enter_signal(s, SOCKET_FINAL_SIGTERM, true);
1200
socket_enter_signal(s, SOCKET_FINAL_SIGTERM, SOCKET_SUCCESS);
1169
log_warning("%s failed to run 'stop-post' task: %s", s->meta.id, strerror(-r));
1170
socket_enter_signal(s, SOCKET_FINAL_SIGTERM, false);
1205
log_warning("%s failed to run 'stop-post' task: %s", UNIT(s)->id, strerror(-r));
1206
socket_enter_signal(s, SOCKET_FINAL_SIGTERM, SOCKET_FAILURE_RESOURCES);
1173
static void socket_enter_signal(Socket *s, SocketState state, bool success) {
1209
static void socket_enter_signal(Socket *s, SocketState state, SocketResult f) {
1175
1211
Set *pid_set = NULL;
1176
1212
bool wait_for_exit = false;
1216
if (f != SOCKET_SUCCESS)
1183
1219
if (s->exec_context.kill_mode != KILL_NONE) {
1184
1220
int sig = (state == SOCKET_STOP_PRE_SIGTERM || state == SOCKET_FINAL_SIGTERM) ? s->exec_context.kill_signal : SIGKILL;
1221
1257
socket_set_state(s, state);
1222
1258
} else if (state == SOCKET_STOP_PRE_SIGTERM || state == SOCKET_STOP_PRE_SIGKILL)
1223
socket_enter_stop_post(s, true);
1259
socket_enter_stop_post(s, SOCKET_SUCCESS);
1225
socket_enter_dead(s, true);
1261
socket_enter_dead(s, SOCKET_SUCCESS);
1230
log_warning("%s failed to kill processes: %s", s->meta.id, strerror(-r));
1266
log_warning("%s failed to kill processes: %s", UNIT(s)->id, strerror(-r));
1232
1268
if (state == SOCKET_STOP_PRE_SIGTERM || state == SOCKET_STOP_PRE_SIGKILL)
1233
socket_enter_stop_post(s, false);
1269
socket_enter_stop_post(s, SOCKET_FAILURE_RESOURCES);
1235
socket_enter_dead(s, false);
1271
socket_enter_dead(s, SOCKET_FAILURE_RESOURCES);
1238
1274
set_free(pid_set);
1241
static void socket_enter_stop_pre(Socket *s, bool success) {
1277
static void socket_enter_stop_pre(Socket *s, SocketResult f) {
1281
if (f != SOCKET_SUCCESS)
1248
1284
socket_unwatch_control_pid(s);
1256
1292
socket_set_state(s, SOCKET_STOP_PRE);
1258
socket_enter_stop_post(s, true);
1294
socket_enter_stop_post(s, SOCKET_SUCCESS);
1263
log_warning("%s failed to run 'stop-pre' task: %s", s->meta.id, strerror(-r));
1264
socket_enter_stop_post(s, false);
1299
log_warning("%s failed to run 'stop-pre' task: %s", UNIT(s)->id, strerror(-r));
1300
socket_enter_stop_post(s, SOCKET_FAILURE_RESOURCES);
1267
1303
static void socket_enter_listening(Socket *s) {
1271
if ((r = socket_watch_fds(s)) < 0) {
1272
log_warning("%s failed to watch sockets: %s", s->meta.id, strerror(-r));
1307
r = socket_watch_fds(s);
1309
log_warning("%s failed to watch sockets: %s", UNIT(s)->id, strerror(-r));
1363
1405
bool pending = false;
1366
1407
/* If there's already a start pending don't bother to
1367
1408
* do anything */
1368
LIST_FOREACH(units_by_type, i, s->meta.manager->units_by_type[UNIT_SERVICE]) {
1369
Service *service = (Service *) i;
1371
if (!set_get(service->configured_sockets, s))
1374
if (!unit_pending_active(UNIT(service)))
1409
SET_FOREACH(u, UNIT(s)->dependencies[UNIT_TRIGGERS], i)
1410
if (unit_pending_active(u)) {
1416
r = manager_add_job(UNIT(s)->manager, JOB_START, UNIT_DEREF(s->service), JOB_REPLACE, true, &error, NULL);
1382
if ((r = manager_add_job(s->meta.manager, JOB_START, UNIT(s->service), JOB_REPLACE, true, &error, NULL)) < 0)
1385
1421
socket_set_state(s, SOCKET_RUNNING);
1387
1423
char *prefix, *instance = NULL, *name;
1396
if ((r = socket_instantiate_service(s)) < 0)
1399
if ((r = instance_from_socket(cfd, s->n_accepted, &instance)) < 0)
1402
if (!(prefix = unit_name_to_prefix(s->meta.id))) {
1432
r = socket_instantiate_service(s);
1436
r = instance_from_socket(cfd, s->n_accepted, &instance);
1441
/* ENOTCONN is legitimate if TCP RST was received.
1442
* This connection is over, but the socket unit lives on. */
1443
close_nointr_nofail(cfd);
1447
prefix = unit_name_to_prefix(UNIT(s)->id);
1403
1449
free(instance);
1417
if ((r = unit_add_name(UNIT(s->service), name)) < 0) {
1463
r = unit_add_name(UNIT_DEREF(s->service), name);
1422
service = s->service;
1469
service = SERVICE(UNIT_DEREF(s->service));
1470
unit_ref_unset(&s->service);
1424
1471
s->n_accepted ++;
1426
service->meta.no_gc = false;
1473
UNIT(service)->no_gc = false;
1428
1475
unit_choose_id(UNIT(service), name);
1431
if ((r = service_set_socket_fd(service, cfd, s)) < 0)
1478
r = service_set_socket_fd(service, cfd, s);
1435
1483
s->n_connections ++;
1437
if ((r = manager_add_job(s->meta.manager, JOB_START, UNIT(service), JOB_REPLACE, true, &error, NULL)) < 0)
1485
r = manager_add_job(UNIT(s)->manager, JOB_START, UNIT(service), JOB_REPLACE, true, &error, NULL);
1440
1489
/* Notify clients about changed counters */
1476
log_warning("%s failed to run next task: %s", s->meta.id, strerror(-r));
1521
log_warning("%s failed to run next task: %s", UNIT(s)->id, strerror(-r));
1478
1523
if (s->state == SOCKET_START_POST)
1479
socket_enter_stop_pre(s, false);
1524
socket_enter_stop_pre(s, SOCKET_FAILURE_RESOURCES);
1480
1525
else if (s->state == SOCKET_STOP_POST)
1481
socket_enter_dead(s, false);
1526
socket_enter_dead(s, SOCKET_FAILURE_RESOURCES);
1483
socket_enter_signal(s, SOCKET_FINAL_SIGTERM, false);
1528
socket_enter_signal(s, SOCKET_FINAL_SIGTERM, SOCKET_FAILURE_RESOURCES);
1486
1531
static int socket_start(Unit *u) {
1505
1550
/* Cannot run this without the service being around */
1507
if (s->service->meta.load_state != UNIT_LOADED) {
1508
log_error("Socket service %s not loaded, refusing.", s->service->meta.id);
1551
if (UNIT_DEREF(s->service)) {
1554
service = SERVICE(UNIT_DEREF(s->service));
1556
if (UNIT(service)->load_state != UNIT_LOADED) {
1557
log_error("Socket service %s not loaded, refusing.", UNIT(service)->id);
1509
1558
return -ENOENT;
1512
1561
/* If the service is already active we cannot start the
1514
if (s->service->state != SERVICE_DEAD &&
1515
s->service->state != SERVICE_FAILED &&
1516
s->service->state != SERVICE_AUTO_RESTART) {
1517
log_error("Socket service %s already active, refusing.", s->service->meta.id);
1563
if (service->state != SERVICE_DEAD &&
1564
service->state != SERVICE_FAILED &&
1565
service->state != SERVICE_AUTO_RESTART) {
1566
log_error("Socket service %s already active, refusing.", UNIT(service)->id);
1521
1570
#ifdef HAVE_SYSV_COMPAT
1522
if (s->service->sysv_path) {
1571
if (service->sysv_path) {
1523
1572
log_error("Using SysV services for socket activation is not supported. Refusing.");
1524
1573
return -ENOENT;
1626
1675
log_debug("Failed to parse state value %s", value);
1628
1677
s->deserialized_state = state;
1629
} else if (streq(key, "failure")) {
1678
} else if (streq(key, "result")) {
1632
if ((b = parse_boolean(value)) < 0)
1633
log_debug("Failed to parse failure value %s", value);
1635
s->failure = b || s->failure;
1681
f = socket_result_from_string(value);
1683
log_debug("Failed to parse result value %s", value);
1684
else if (f != SOCKET_SUCCESS)
1637
1687
} else if (streq(key, "n-accepted")) {
1771
1821
if (s->state != SOCKET_LISTENING)
1774
log_debug("Incoming traffic on %s", u->meta.id);
1824
log_debug("Incoming traffic on %s", u->id);
1776
1826
if (events != EPOLLIN) {
1778
1828
if (events & EPOLLHUP)
1779
log_error("%s: Got POLLHUP on a listening socket. The service probably invoked shutdown() on it, and should better not do that.", u->meta.id);
1829
log_error("%s: Got POLLHUP on a listening socket. The service probably invoked shutdown() on it, and should better not do that.", u->id);
1781
log_error("%s: Got unexpected poll event (0x%x) on socket.", u->meta.id, events);
1831
log_error("%s: Got unexpected poll event (0x%x) on socket.", u->id, events);
1821
1871
s->control_pid = 0;
1823
success = is_clean_exit(code, status);
1873
if (is_clean_exit(code, status))
1875
else if (code == CLD_EXITED)
1876
f = SOCKET_FAILURE_EXIT_CODE;
1877
else if (code == CLD_KILLED)
1878
f = SOCKET_FAILURE_SIGNAL;
1879
else if (code == CLD_DUMPED)
1880
f = SOCKET_FAILURE_CORE_DUMP;
1882
assert_not_reached("Unknown code");
1825
1884
if (s->control_command) {
1826
1885
exec_status_exit(&s->control_command->exec_status, &s->exec_context, pid, code, status);
1828
1887
if (s->control_command->ignore)
1832
log_full(success ? LOG_DEBUG : LOG_NOTICE,
1833
"%s control process exited, code=%s status=%i", u->meta.id, sigchld_code_to_string(code), status);
1834
s->failure = s->failure || !success;
1836
if (s->control_command && s->control_command->command_next && success) {
1837
log_debug("%s running next command for state %s", u->meta.id, socket_state_to_string(s->state));
1838
socket_run_next(s, success);
1891
log_full(f == SOCKET_SUCCESS ? LOG_DEBUG : LOG_NOTICE,
1892
"%s control process exited, code=%s status=%i", u->id, sigchld_code_to_string(code), status);
1894
if (f != SOCKET_SUCCESS)
1897
if (s->control_command &&
1898
s->control_command->command_next &&
1899
f == SOCKET_SUCCESS) {
1901
log_debug("%s running next command for state %s", u->id, socket_state_to_string(s->state));
1840
1904
s->control_command = NULL;
1841
1905
s->control_command_id = _SOCKET_EXEC_COMMAND_INVALID;
1843
1907
/* No further commands for this step, so let's figure
1844
1908
* out what to do next */
1846
log_debug("%s got final SIGCHLD for state %s", u->meta.id, socket_state_to_string(s->state));
1910
log_debug("%s got final SIGCHLD for state %s", u->id, socket_state_to_string(s->state));
1848
1912
switch (s->state) {
1850
1914
case SOCKET_START_PRE:
1915
if (f == SOCKET_SUCCESS)
1852
1916
socket_enter_start_post(s);
1854
socket_enter_signal(s, SOCKET_FINAL_SIGTERM, false);
1918
socket_enter_signal(s, SOCKET_FINAL_SIGTERM, f);
1857
1921
case SOCKET_START_POST:
1922
if (f == SOCKET_SUCCESS)
1859
1923
socket_enter_listening(s);
1861
socket_enter_stop_pre(s, false);
1925
socket_enter_stop_pre(s, f);
1864
1928
case SOCKET_STOP_PRE:
1865
1929
case SOCKET_STOP_PRE_SIGTERM:
1866
1930
case SOCKET_STOP_PRE_SIGKILL:
1867
socket_enter_stop_post(s, success);
1931
socket_enter_stop_post(s, f);
1870
1934
case SOCKET_STOP_POST:
1871
1935
case SOCKET_FINAL_SIGTERM:
1872
1936
case SOCKET_FINAL_SIGKILL:
1873
socket_enter_dead(s, success);
1937
socket_enter_dead(s, f);
1892
1956
switch (s->state) {
1894
1958
case SOCKET_START_PRE:
1895
log_warning("%s starting timed out. Terminating.", u->meta.id);
1896
socket_enter_signal(s, SOCKET_FINAL_SIGTERM, false);
1959
log_warning("%s starting timed out. Terminating.", u->id);
1960
socket_enter_signal(s, SOCKET_FINAL_SIGTERM, SOCKET_FAILURE_TIMEOUT);
1899
1963
case SOCKET_START_POST:
1900
log_warning("%s starting timed out. Stopping.", u->meta.id);
1901
socket_enter_stop_pre(s, false);
1964
log_warning("%s starting timed out. Stopping.", u->id);
1965
socket_enter_stop_pre(s, SOCKET_FAILURE_TIMEOUT);
1904
1968
case SOCKET_STOP_PRE:
1905
log_warning("%s stopping timed out. Terminating.", u->meta.id);
1906
socket_enter_signal(s, SOCKET_STOP_PRE_SIGTERM, false);
1969
log_warning("%s stopping timed out. Terminating.", u->id);
1970
socket_enter_signal(s, SOCKET_STOP_PRE_SIGTERM, SOCKET_FAILURE_TIMEOUT);
1909
1973
case SOCKET_STOP_PRE_SIGTERM:
1910
1974
if (s->exec_context.send_sigkill) {
1911
log_warning("%s stopping timed out. Killing.", u->meta.id);
1912
socket_enter_signal(s, SOCKET_STOP_PRE_SIGKILL, false);
1975
log_warning("%s stopping timed out. Killing.", u->id);
1976
socket_enter_signal(s, SOCKET_STOP_PRE_SIGKILL, SOCKET_FAILURE_TIMEOUT);
1914
log_warning("%s stopping timed out. Skipping SIGKILL. Ignoring.", u->meta.id);
1915
socket_enter_stop_post(s, false);
1978
log_warning("%s stopping timed out. Skipping SIGKILL. Ignoring.", u->id);
1979
socket_enter_stop_post(s, SOCKET_FAILURE_TIMEOUT);
1919
1983
case SOCKET_STOP_PRE_SIGKILL:
1920
log_warning("%s still around after SIGKILL. Ignoring.", u->meta.id);
1921
socket_enter_stop_post(s, false);
1984
log_warning("%s still around after SIGKILL. Ignoring.", u->id);
1985
socket_enter_stop_post(s, SOCKET_FAILURE_TIMEOUT);
1924
1988
case SOCKET_STOP_POST:
1925
log_warning("%s stopping timed out (2). Terminating.", u->meta.id);
1926
socket_enter_signal(s, SOCKET_FINAL_SIGTERM, false);
1989
log_warning("%s stopping timed out (2). Terminating.", u->id);
1990
socket_enter_signal(s, SOCKET_FINAL_SIGTERM, SOCKET_FAILURE_TIMEOUT);
1929
1993
case SOCKET_FINAL_SIGTERM:
1930
1994
if (s->exec_context.send_sigkill) {
1931
log_warning("%s stopping timed out (2). Killing.", u->meta.id);
1932
socket_enter_signal(s, SOCKET_FINAL_SIGKILL, false);
1995
log_warning("%s stopping timed out (2). Killing.", u->id);
1996
socket_enter_signal(s, SOCKET_FINAL_SIGKILL, SOCKET_FAILURE_TIMEOUT);
1934
log_warning("%s stopping timed out (2). Skipping SIGKILL. Ignoring.", u->meta.id);
1935
socket_enter_dead(s, false);
1998
log_warning("%s stopping timed out (2). Skipping SIGKILL. Ignoring.", u->id);
1999
socket_enter_dead(s, SOCKET_FAILURE_TIMEOUT);
1939
2003
case SOCKET_FINAL_SIGKILL:
1940
log_warning("%s still around after SIGKILL (2). Entering failed mode.", u->meta.id);
1941
socket_enter_dead(s, false);
2004
log_warning("%s still around after SIGKILL (2). Entering failed mode.", u->id);
2005
socket_enter_dead(s, SOCKET_FAILURE_TIMEOUT);
2097
2164
DEFINE_STRING_TABLE_LOOKUP(socket_exec_command, SocketExecCommand);
2166
static const char* const socket_result_table[_SOCKET_RESULT_MAX] = {
2167
[SOCKET_SUCCESS] = "success",
2168
[SOCKET_FAILURE_RESOURCES] = "resources",
2169
[SOCKET_FAILURE_TIMEOUT] = "timeout",
2170
[SOCKET_FAILURE_EXIT_CODE] = "exit-code",
2171
[SOCKET_FAILURE_SIGNAL] = "signal",
2172
[SOCKET_FAILURE_CORE_DUMP] = "core-dump",
2173
[SOCKET_FAILURE_SERVICE_FAILED_PERMANENT] = "service-failed-permanent"
2176
DEFINE_STRING_TABLE_LOOKUP(socket_result, SocketResult);
2099
2178
const UnitVTable socket_vtable = {
2100
2179
.suffix = ".socket",
2180
.object_size = sizeof(Socket),