From 46f61dfcdc4f2cc3f20d7e53c6ca4d339aa54666 Mon Sep 17 00:00:00 2001 From: "C. McEnroe" Date: Thu, 13 Feb 2020 22:22:11 -0500 Subject: Add /exec --- command.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'command.c') diff --git a/command.c b/command.c index ffbea9f..e0a2e2b 100644 --- a/command.c +++ b/command.c @@ -195,6 +195,24 @@ static void commandCopy(size_t id, char *params) { urlCopyMatch(id, params); } +static void commandExec(size_t id, char *params) { + execID = id; + + pid_t pid = fork(); + if (pid < 0) err(EX_OSERR, "fork"); + if (pid) return; + + const char *shell = getenv("SHELL"); + if (!shell) shell = "/bin/sh"; + + close(STDIN_FILENO); + dup2(execPipe[1], STDOUT_FILENO); + dup2(utilPipe[1], STDERR_FILENO); + execlp(shell, shell, "-c", params, NULL); + warn("%s", shell); + _exit(EX_UNAVAILABLE); +} + static void commandHelp(size_t id, char *params) { (void)id; uiHide(); @@ -220,6 +238,7 @@ static const struct Handler { { "/close", .fn = commandClose }, { "/copy", .fn = commandCopy, .restricted = true }, { "/debug", .fn = commandDebug, .restricted = true }, + { "/exec", .fn = commandExec, .restricted = true }, { "/help", .fn = commandHelp }, { "/join", .fn = commandJoin, .restricted = true }, { "/list", .fn = commandList }, -- cgit 1.4.1