socket: refuse socket activation for SysV services
Make sure that when a .socket unit is installed without its matching .service we don't end up activating a legacy SysV/LSB service with the same name. SysV/LSB style services do not support passing sockets and we don't want to extend SysV/LSB to ensure we don't break compatibility with other systems.
This commit is contained in:
parent
a4c24ff75a
commit
7b4bf06ba7
16
src/socket.c
16
src/socket.c
|
@ -169,6 +169,13 @@ static int socket_instantiate_service(Socket *s) {
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
|
#ifdef HAVE_SYSV_COMPAT
|
||||||
|
if (SERVICE(u)->sysv_path) {
|
||||||
|
log_error("Using SysV services for socket activation is not supported. Refusing.");
|
||||||
|
return -ENOENT;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
u->meta.no_gc = true;
|
u->meta.no_gc = true;
|
||||||
s->service = SERVICE(u);
|
s->service = SERVICE(u);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1354,12 +1361,19 @@ static int socket_start(Unit *u) {
|
||||||
if (s->service->meta.load_state != UNIT_LOADED)
|
if (s->service->meta.load_state != UNIT_LOADED)
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
|
|
||||||
/* If the service is alredy actvie we cannot start the
|
/* If the service is alredy active we cannot start the
|
||||||
* socket */
|
* socket */
|
||||||
if (s->service->state != SERVICE_DEAD &&
|
if (s->service->state != SERVICE_DEAD &&
|
||||||
s->service->state != SERVICE_FAILED &&
|
s->service->state != SERVICE_FAILED &&
|
||||||
s->service->state != SERVICE_AUTO_RESTART)
|
s->service->state != SERVICE_AUTO_RESTART)
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
|
|
||||||
|
#ifdef HAVE_SYSV_COMPAT
|
||||||
|
if (s->service->sysv_path) {
|
||||||
|
log_error("Using SysV services for socket activation is not supported. Refusing.");
|
||||||
|
return -ENOENT;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(s->state == SOCKET_DEAD || s->state == SOCKET_FAILED);
|
assert(s->state == SOCKET_DEAD || s->state == SOCKET_FAILED);
|
||||||
|
|
Loading…
Reference in a new issue