summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2011-02-15 00:40:17 +0100
committerLennart Poettering <lennart@poettering.net>2011-02-15 00:40:17 +0100
commit7b4bf06ba7f31ea8069fc8927729d70ab98b9b64 (patch)
treeced0e8cdc8e4b161334f6c522b7c2a75fc8f2637
parenta4c24ff75a57efc95b34ece5a7805c3b156208ef (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.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/socket.c b/src/socket.c
index e386c7f29..3f57e3535 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);