diff options
| author | emersion <contact@emersion.fr> | 2017-10-06 15:04:05 +0200 | 
|---|---|---|
| committer | emersion <contact@emersion.fr> | 2017-10-06 16:02:40 +0200 | 
| commit | 8ff548cdbaf5ea4e20758d6ee58d6db0c4daf8cd (patch) | |
| tree | 26de9fe4d9a375b7d4324aa12fdfc3e069dbe246 /rootston | |
| parent | 6aafc2f61a395cf72b204f487e74bd83965a41e6 (diff) | |
| download | wlroots-8ff548cdbaf5ea4e20758d6ee58d6db0c4daf8cd.tar.xz | |
Require exec prefix to execute shell commands
Diffstat (limited to 'rootston')
| -rw-r--r-- | rootston/keyboard.c | 11 | 
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);  	}  }  | 
