aboutsummaryrefslogtreecommitdiff
path: root/rootston/keyboard.c
diff options
context:
space:
mode:
authoremersion <contact@emersion.fr>2017-10-06 15:04:05 +0200
committeremersion <contact@emersion.fr>2017-10-06 16:02:40 +0200
commit8ff548cdbaf5ea4e20758d6ee58d6db0c4daf8cd (patch)
tree26de9fe4d9a375b7d4324aa12fdfc3e069dbe246 /rootston/keyboard.c
parent6aafc2f61a395cf72b204f487e74bd83965a41e6 (diff)
Require exec prefix to execute shell commands
Diffstat (limited to 'rootston/keyboard.c')
-rw-r--r--rootston/keyboard.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/rootston/keyboard.c b/rootston/keyboard.c
index 6f6fa0e8..8488e208 100644
--- a/rootston/keyboard.c
+++ b/rootston/keyboard.c
@@ -21,19 +21,24 @@ static ssize_t keyboard_pressed_keysym_index(struct roots_keyboard *keyboard,
return -1;
}
+static const char *exec_prefix = "exec ";
+
static void keyboard_binding_execute(struct roots_keyboard *keyboard,
- char *command) {
+ const char *command) {
struct roots_server *server = keyboard->input->server;
if (strcmp(command, "exit") == 0) {
wl_display_terminate(server->wl_display);
- } else {
+ } else if (strncmp(exec_prefix, command, strlen(exec_prefix)) == 0) {
+ const char *shell_cmd = command + strlen(exec_prefix);
pid_t pid = fork();
if (pid < 0) {
wlr_log(L_ERROR, "cannot execute binding command: fork() failed");
return;
} else if (pid == 0) {
- execl("/bin/sh", "/bin/sh", "-c", command, (void *)NULL);
+ execl("/bin/sh", "/bin/sh", "-c", shell_cmd, (void *)NULL);
}
+ } else {
+ wlr_log(L_ERROR, "unknown binding command: %s", command);
}
}