From e9901e30a2f1bf52aee83359a318f7314131f816 Mon Sep 17 00:00:00 2001 From: "C. McEnroe" Date: Mon, 1 Mar 2021 19:29:27 -0500 Subject: [PATCH] Only prepend exec if command line doesn't contain ;&|() --- catsit.conf.5 | 8 +++++++- service.c | 4 +++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/catsit.conf.5 b/catsit.conf.5 index ccac76d..b7a45d4 100644 --- a/catsit.conf.5 +++ b/catsit.conf.5 @@ -1,4 +1,4 @@ -.Dd August 16, 2020 +.Dd March 1, 2021 .Dt CATSIT.CONF 5 .Os . @@ -46,6 +46,12 @@ is executed using the shell. The shell variable .Va $0 is set to the name of the service. +If the command line +does not contain the characters +.Ql ;&|() +it is prepended by +.Ic exec +when passed to the shell. . .It Ar @service Ar command ... Service names beginning with diff --git a/service.c b/service.c index 4ea9126..38049ff 100644 --- a/service.c +++ b/service.c @@ -246,7 +246,9 @@ void serviceStart(struct Service *service) { if (len >= sizeof(command)) errx(ExitNoExec, "command truncated"); } int n = snprintf( - &command[len], sizeof(command) - len, "exec %s", service->command + &command[len], sizeof(command) - len, "%s%s", + (service->command[strcspn(service->command, ";&|()")] ? "exec " : ""), + service->command ); assert(n > 0); len += n;