| 
					
				 | 
			
			
				@@ -330,6 +330,14 @@ def parse_gid(gid): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         raise 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+def setgroups(uid): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if grp and pwd: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        user_name = pwd.getpwuid(uid)[0] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        user_groups = [gr.gr_gid for gr in grp.getgrall() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                if user_name in gr.gr_mem] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        os.setgroups(user_groups) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 def setegid(gid): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     """Set effective group id.""" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     gid = parse_gid(gid) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -363,6 +371,7 @@ def set_effective_user(uid=None, gid=None): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if not gid and pwd: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             gid = pwd.getpwuid(uid).pw_gid 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         setegid(gid) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        setgroups(uid) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         seteuid(uid) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         gid and setegid(gid) 
			 |