aboutsummaryrefslogtreecommitdiff
path: root/server-client.c
diff options
context:
space:
mode:
authorThomas Adam <thomas@xteddy.org>2017-01-13 12:01:12 +0000
committerThomas Adam <thomas@xteddy.org>2017-01-13 12:01:12 +0000
commit2311bbd28a227a8b6e6e52bf30665b37315cad11 (patch)
tree01fc816db0980b40d0b75905a097b20719fd4156 /server-client.c
parentd4cb178249c6c73c6197e34e871c2b8e803de175 (diff)
parent95950bf668cee5a80cd9bbe28d7134a52a240426 (diff)
downloadrtmux-2311bbd28a227a8b6e6e52bf30665b37315cad11.tar.gz
rtmux-2311bbd28a227a8b6e6e52bf30665b37315cad11.tar.bz2
rtmux-2311bbd28a227a8b6e6e52bf30665b37315cad11.zip
Merge branch 'obsd-master'
Diffstat (limited to 'server-client.c')
-rw-r--r--server-client.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/server-client.c b/server-client.c
index 3d20825c..50ae94fd 100644
--- a/server-client.c
+++ b/server-client.c
@@ -294,6 +294,32 @@ server_client_detach(struct client *c, enum msgtype msgtype)
proc_send_s(c->peer, msgtype, s->name);
}
+/* Execute command to replace a client, */
+void
+server_client_exec(struct client *c, const char *cmd)
+{
+ struct session *s = c->session;
+ char *msg, *shell;
+ size_t cmdsize, shellsize;
+
+ if (*cmd == '\0')
+ return;
+ cmdsize = strlen(cmd) + 1;
+
+ if (s != NULL)
+ shell = options_get_string(s->options, "default-shell");
+ else
+ shell = options_get_string(global_s_options, "default-shell");
+ shellsize = strlen(shell) + 1;
+
+ msg = xmalloc(cmdsize + shellsize);
+ memcpy(msg, cmd, cmdsize);
+ memcpy(msg + cmdsize, shell, shellsize);
+
+ proc_send(c->peer, MSG_EXEC, -1, msg, cmdsize + shellsize);
+ free(msg);
+}
+
/* Check for mouse keys. */
static key_code
server_client_check_mouse(struct client *c)