Only prepend exec if command line doesn't contain ;&|()

This commit is contained in:
C. McEnroe 2021-03-01 19:29:27 -05:00
parent 0384c2abd7
commit e9901e30a2
2 changed files with 10 additions and 2 deletions

View File

@ -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

View File

@ -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;