mirror of
				https://github.com/tmux/tmux.git
				synced 2025-10-26 12:27:15 +00:00 
			
		
		
		
	Change nested check to compare server socket path rather than just assuming
that if $TMUX is set it is nested. From Micah Cowan.
This commit is contained in:
		| @@ -693,17 +693,6 @@ server_client_msg_command(struct client *c, struct msg_command_data *data) | |||||||
| 	} | 	} | ||||||
| 	cmd_free_argv(argc, argv); | 	cmd_free_argv(argc, argv); | ||||||
|  |  | ||||||
| 	if (data->pid != -1) { |  | ||||||
| 		TAILQ_FOREACH(cmd, cmdlist, qentry) { |  | ||||||
| 			if (cmd->entry->flags & CMD_CANTNEST) { |  | ||||||
| 				server_client_msg_error(&ctx, |  | ||||||
| 				    "sessions should be nested with care. " |  | ||||||
| 				    "unset $TMUX to force"); |  | ||||||
| 				goto error; |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if (cmd_list_exec(cmdlist, &ctx) != 1) | 	if (cmd_list_exec(cmdlist, &ctx) != 1) | ||||||
| 		server_write_client(c, MSG_EXIT, NULL, 0); | 		server_write_client(c, MSG_EXIT, NULL, 0); | ||||||
| 	cmd_list_free(cmdlist); | 	cmd_list_free(cmdlist); | ||||||
|   | |||||||
							
								
								
									
										17
									
								
								tmux.c
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								tmux.c
									
									
									
									
									
								
							| @@ -484,6 +484,7 @@ main(int argc, char **argv) | |||||||
| 		cmddata.pid = envdata.pid; | 		cmddata.pid = envdata.pid; | ||||||
| 		cmddata.idx = envdata.idx; | 		cmddata.idx = envdata.idx; | ||||||
|  |  | ||||||
|  | 		/* Prepare command for server. */ | ||||||
| 		cmddata.argc = argc; | 		cmddata.argc = argc; | ||||||
| 		if (cmd_pack_argv( | 		if (cmd_pack_argv( | ||||||
| 		    argc, argv, cmddata.argv, sizeof cmddata.argv) != 0) { | 		    argc, argv, cmddata.argv, sizeof cmddata.argv) != 0) { | ||||||
| @@ -499,7 +500,7 @@ main(int argc, char **argv) | |||||||
| 	if (shellcmd != NULL) | 	if (shellcmd != NULL) | ||||||
| 		cmdflags |= CMD_STARTSERVER; | 		cmdflags |= CMD_STARTSERVER; | ||||||
| 	else if (argc == 0)	/* new-session is the default */ | 	else if (argc == 0)	/* new-session is the default */ | ||||||
| 		cmdflags |= CMD_STARTSERVER|CMD_SENDENVIRON; | 		cmdflags |= CMD_STARTSERVER|CMD_SENDENVIRON|CMD_CANTNEST; | ||||||
| 	else { | 	else { | ||||||
| 		/* | 		/* | ||||||
| 		 * It sucks parsing the command string twice (in client and | 		 * It sucks parsing the command string twice (in client and | ||||||
| @@ -516,10 +517,24 @@ main(int argc, char **argv) | |||||||
| 				cmdflags |= CMD_STARTSERVER; | 				cmdflags |= CMD_STARTSERVER; | ||||||
| 			if (cmd->entry->flags & CMD_SENDENVIRON) | 			if (cmd->entry->flags & CMD_SENDENVIRON) | ||||||
| 				cmdflags |= CMD_SENDENVIRON; | 				cmdflags |= CMD_SENDENVIRON; | ||||||
|  | 			if (cmd->entry->flags & CMD_CANTNEST) | ||||||
|  | 				cmdflags |= CMD_CANTNEST; | ||||||
| 		} | 		} | ||||||
| 		cmd_list_free(cmdlist); | 		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) | 	if ((main_ibuf = client_init(path, cmdflags, flags)) == NULL) | ||||||
| 		exit(1); | 		exit(1); | ||||||
| 	xfree(path); | 	xfree(path); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Nicholas Marriott
					Nicholas Marriott