@ -60,6 +60,8 @@ 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# include  "weston-launch.h"  
					 
					 
					 
					# include  "weston-launch.h"  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# define MAX_ARGV_SIZE 256  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					struct  weston_launch  {  
					 
					 
					 
					struct  weston_launch  {  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						struct  pam_conv  pc ;   
					 
					 
					 
						struct  pam_conv  pc ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						pam_handle_t  * ph ;   
					 
					 
					 
						pam_handle_t  * ph ;   
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -523,8 +525,9 @@ main(int argc, char *argv[]) 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						struct  weston_launch  wl ;   
					 
					 
					 
						struct  weston_launch  wl ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						char  * * env ;   
					 
					 
					 
						char  * * env ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						int  i ,  c ;   
					 
					 
					 
						int  i ,  c ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						char  * * child_argv ;   
					 
					 
					 
						char  * child_argv [ MAX_ARGV_SIZE ] ;   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						char  * tty  =  NULL ,  * new_user  =  NULL ;   
					 
					 
					 
						char  * tty  =  NULL ,  * new_user  =  NULL ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						char  * term ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						int  sleep_fork  =  0 ;   
					 
					 
					 
						int  sleep_fork  =  0 ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						struct  option  opts [ ]  =  {   
					 
					 
					 
						struct  option  opts [ ]  =  {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							{  " user " ,     required_argument ,  NULL ,  ' u '  } ,   
					 
					 
					 
							{  " user " ,     required_argument ,  NULL ,  ' u '  } ,   
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -562,8 +565,8 @@ main(int argc, char *argv[]) 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							}   
					 
					 
					 
							}   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						}   
					 
					 
					 
						}   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						child_argv  =  & argv [ optind - 1 ] ;   
					 
					 
					 
						if  ( ( argc  -  optind )  >  ( MAX_ARGV_SIZE  -  5 ) )   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
						child_argv [ 0 ]  =  BINDIR  " /weston " ;   
					 
					 
					 
							error ( 1 ,  E2BIG ,  " Too many arguments to pass to weston " )  ;   
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						if  ( new_user )   
					 
					 
					 
						if  ( new_user )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							wl . pw  =  getpwnam ( new_user ) ;   
					 
					 
					 
							wl . pw  =  getpwnam ( new_user ) ;   
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -572,7 +575,17 @@ main(int argc, char *argv[]) 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						if  ( wl . pw  = =  NULL )   
					 
					 
					 
						if  ( wl . pw  = =  NULL )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							error ( 1 ,  errno ,  " failed to get username " ) ;   
					 
					 
					 
							error ( 1 ,  errno ,  " failed to get username " ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						child_argv [ 0 ]  =  wl . pw - > pw_shell ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						child_argv [ 1 ]  =  " -l " ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						child_argv [ 2 ]  =  " -c " ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						child_argv [ 3 ]  =  BINDIR  " /weston  \" $@ \" " ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						child_argv [ 4 ]  =  " weston " ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						for  ( i  =  0 ;  i  <  ( argc  -  optind ) ;  + + i )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
							child_argv [ 5 + i ]  =  argv [ optind + i ] ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						term  =  getenv ( " TERM " ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						clearenv ( ) ;   
					 
					 
					 
						clearenv ( ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						setenv ( " TERM " ,  term ,  1 ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						setenv ( " USER " ,  wl . pw - > pw_name ,  1 ) ;   
					 
					 
					 
						setenv ( " USER " ,  wl . pw - > pw_name ,  1 ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						setenv ( " LOGNAME " ,  wl . pw - > pw_name ,  1 ) ;   
					 
					 
					 
						setenv ( " LOGNAME " ,  wl . pw - > pw_name ,  1 ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						setenv ( " HOME " ,  wl . pw - > pw_dir ,  1 ) ;   
					 
					 
					 
						setenv ( " HOME " ,  wl . pw - > pw_dir ,  1 ) ;