Kill the child process group, rather than just the immediate child;
this is needed now that su no longer starts a controlling terminal when not running an interactive shell (closes: Debian#713979)
This commit is contained in:
		@@ -3,6 +3,11 @@
 | 
				
			|||||||
	* configure.in: Prepare for next point release 4.2.
 | 
						* configure.in: Prepare for next point release 4.2.
 | 
				
			||||||
	* if using the static char* for pw_dir, strdup it so
 | 
						* if using the static char* for pw_dir, strdup it so
 | 
				
			||||||
	  pw_free() can be used. (Closes: Debian#691459) 
 | 
						  pw_free() can be used. (Closes: Debian#691459) 
 | 
				
			||||||
 | 
						* Kill the child process group, rather than just the 
 | 
				
			||||||
 | 
						  immediate child; this is needed now that su no
 | 
				
			||||||
 | 
						  longer starts a controlling terminal when not running an
 | 
				
			||||||
 | 
						  interactive shell (closes: Debian#713979)
 | 
				
			||||||
 | 
						  Thansk to Colin Watson for the patch.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
2012-05-25  Nicolas François  <nicolas.francois@centraliens.net>
 | 
					2012-05-25  Nicolas François  <nicolas.francois@centraliens.net>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								src/su.c
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								src/su.c
									
									
									
									
									
								
							@@ -181,7 +181,7 @@ static bool iswheel (const char *username)
 | 
				
			|||||||
static RETSIGTYPE kill_child (int unused(s))
 | 
					static RETSIGTYPE kill_child (int unused(s))
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (0 != pid_child) {
 | 
						if (0 != pid_child) {
 | 
				
			||||||
		(void) kill (pid_child, SIGKILL);
 | 
							(void) kill (-pid_child, SIGKILL);
 | 
				
			||||||
		(void) fputs (_(" ...killed.\n"), stderr);
 | 
							(void) fputs (_(" ...killed.\n"), stderr);
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		(void) fputs (_(" ...waiting for child to terminate.\n"),
 | 
							(void) fputs (_(" ...waiting for child to terminate.\n"),
 | 
				
			||||||
@@ -370,7 +370,7 @@ static void prepare_pam_close_session (void)
 | 
				
			|||||||
		(void) fputs ("\n", stderr);
 | 
							(void) fputs ("\n", stderr);
 | 
				
			||||||
		(void) fputs (_("Session terminated, terminating shell..."),
 | 
							(void) fputs (_("Session terminated, terminating shell..."),
 | 
				
			||||||
		              stderr);
 | 
							              stderr);
 | 
				
			||||||
		(void) kill (pid_child, caught);
 | 
							(void) kill (-pid_child, caught);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ret = pam_close_session (pamh, 0);
 | 
						ret = pam_close_session (pamh, 0);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user