daemon: if one of the standard fds is missing open it to /dev/null
Signed-off-by: Matthias Lederhofer <matled@gmx.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
		 Matthias Lederhofer
					Matthias Lederhofer
				
			
				
					committed by
					
						 Junio C Hamano
						Junio C Hamano
					
				
			
			
				
	
			
			
			 Junio C Hamano
						Junio C Hamano
					
				
			
						parent
						
							ad8b4f56b5
						
					
				
				
					commit
					258e93a155
				
			
							
								
								
									
										14
									
								
								daemon.c
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								daemon.c
									
									
									
									
									
								
							| @ -662,6 +662,18 @@ static int service_loop(int socknum, int *socklist) | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /* if any standard file descriptor is missing open it to /dev/null */ | ||||||
|  | static void sanitize_stdfds(void) | ||||||
|  | { | ||||||
|  | 	int fd = open("/dev/null", O_RDWR, 0); | ||||||
|  | 	while (fd != -1 && fd < 2) | ||||||
|  | 		fd = dup(fd); | ||||||
|  | 	if (fd == -1) | ||||||
|  | 		die("open /dev/null or dup failed: %s", strerror(errno)); | ||||||
|  | 	if (fd > 2) | ||||||
|  | 		close(fd); | ||||||
|  | } | ||||||
|  |  | ||||||
| static int serve(int port) | static int serve(int port) | ||||||
| { | { | ||||||
| 	int socknum, *socklist; | 	int socknum, *socklist; | ||||||
| @ -773,5 +785,7 @@ int main(int argc, char **argv) | |||||||
| 		return execute(peer); | 		return execute(peer); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	sanitize_stdfds(); | ||||||
|  |  | ||||||
| 	return serve(port); | 	return serve(port); | ||||||
| } | } | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user