fix a problem that the standard streams are unexpectedly closed
In the current implementation, the slave PTY (assigned to the variable `s') is always closed after duplicating it to file descriptors of standard streams (0, 1, and 2). However, when the allocated slave PTY `s' is already one of 0, 1, or 2, this causes unexpected closing of a standard stream. The same problem occurs when the file descriptor of the master PTY (the variable `m') is one of 0, 1, or 2. In this patch, the original master PTY (m) is closed before it would be overwritten by duplicated slave PTYs. The original slave PTY (s) is closed only when it is not one of the stanrad streams.
This commit is contained in:
		
				
					committed by
					
						 Hiltjo Posthuma
						Hiltjo Posthuma
					
				
			
			
				
	
			
			
			
						parent
						
							2ec571a30c
						
					
				
				
					commit
					1d3142da96
				
			
							
								
								
									
										3
									
								
								st.c
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								st.c
									
									
									
									
									
								
							| @@ -793,14 +793,15 @@ ttynew(const char *line, char *cmd, const char *out, char **args) | ||||
| 		break; | ||||
| 	case 0: | ||||
| 		close(iofd); | ||||
| 		close(m); | ||||
| 		setsid(); /* create a new process group */ | ||||
| 		dup2(s, 0); | ||||
| 		dup2(s, 1); | ||||
| 		dup2(s, 2); | ||||
| 		if (ioctl(s, TIOCSCTTY, NULL) < 0) | ||||
| 			die("ioctl TIOCSCTTY failed: %s\n", strerror(errno)); | ||||
| 		if (s > 2) | ||||
| 			close(s); | ||||
| 		close(m); | ||||
| #ifdef __OpenBSD__ | ||||
| 		if (pledge("stdio getpw proc exec", NULL) == -1) | ||||
| 			die("pledge\n"); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user