diff options
author | Lennart Poettering <lennart@poettering.net> | 2011-02-15 00:40:17 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2011-02-15 00:40:17 +0100 |
commit | 7b4bf06ba7f31ea8069fc8927729d70ab98b9b64 (patch) | |
tree | ced0e8cdc8e4b161334f6c522b7c2a75fc8f2637 | |
parent | a4c24ff75a57efc95b34ece5a7805c3b156208ef (diff) |
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.
-rw-r--r-- | src/socket.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/socket.c b/src/socket.c index e386c7f297..3f57e35350 100644 --- a/src/socket.c +++ b/src/socket.c @@ -169,6 +169,13 @@ static int socket_instantiate_service(Socket *s) { if (r < 0) 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; s->service = SERVICE(u); return 0; @@ -1354,12 +1361,19 @@ static int socket_start(Unit *u) { if (s->service->meta.load_state != UNIT_LOADED) return -ENOENT; - /* If the service is alredy actvie we cannot start the + /* If the service is alredy active we cannot start the * socket */ if (s->service->state != SERVICE_DEAD && s->service->state != SERVICE_FAILED && s->service->state != SERVICE_AUTO_RESTART) 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); |