From 0a86d3579edb44ee559cfe6498f43d6637a08bd9 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sat, 6 Feb 2010 18:47:41 +0000 Subject: Change nested check to compare server socket path rather than just assuming that if $TMUX is set it is nested. From Micah Cowan. --- tmux.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'tmux.c') diff --git a/tmux.c b/tmux.c index c6e4f830..a582b951 100644 --- a/tmux.c +++ b/tmux.c @@ -484,6 +484,7 @@ main(int argc, char **argv) cmddata.pid = envdata.pid; cmddata.idx = envdata.idx; + /* Prepare command for server. */ cmddata.argc = argc; if (cmd_pack_argv( argc, argv, cmddata.argv, sizeof cmddata.argv) != 0) { @@ -499,7 +500,7 @@ main(int argc, char **argv) if (shellcmd != NULL) cmdflags |= CMD_STARTSERVER; else if (argc == 0) /* new-session is the default */ - cmdflags |= CMD_STARTSERVER|CMD_SENDENVIRON; + cmdflags |= CMD_STARTSERVER|CMD_SENDENVIRON|CMD_CANTNEST; else { /* * It sucks parsing the command string twice (in client and @@ -516,10 +517,24 @@ main(int argc, char **argv) cmdflags |= CMD_STARTSERVER; if (cmd->entry->flags & CMD_SENDENVIRON) cmdflags |= CMD_SENDENVIRON; + if (cmd->entry->flags & CMD_CANTNEST) + cmdflags |= CMD_CANTNEST; } cmd_list_free(cmdlist); } + /* + * Check if this could be a nested session, if the command can't nest: + * if the socket path matches $TMUX, this is probably the same server. + */ + if (shellcmd == NULL && envdata.path != NULL && + cmdflags & CMD_CANTNEST && + (path == envdata.path || strcmp(path, envdata.path) == 0)) { + log_warnx("sessions should be nested with care. " + "unset $TMUX to force."); + exit(1); + } + if ((main_ibuf = client_init(path, cmdflags, flags)) == NULL) exit(1); xfree(path); -- cgit v1.2.3