| 
									
										
										
										
											2024-05-09 01:50:56 +01:00
										 |  |  | # typed: strict | 
					
						
							|  |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module Utils | 
					
						
							|  |  |  |   module UID | 
					
						
							|  |  |  |     sig { type_parameters(:U).params(_block: T.proc.returns(T.type_parameter(:U))).returns(T.type_parameter(:U)) } | 
					
						
							|  |  |  |     def self.drop_euid(&_block) | 
					
						
							|  |  |  |       return yield if Process.euid == Process.uid | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       original_euid = Process.euid | 
					
						
							|  |  |  |       begin | 
					
						
							|  |  |  |         Process::Sys.seteuid(Process.uid) | 
					
						
							|  |  |  |         yield | 
					
						
							|  |  |  |       ensure | 
					
						
							|  |  |  |         Process::Sys.seteuid(original_euid) | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2024-12-10 05:24:10 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     sig { returns(T.nilable(String)) } | 
					
						
							|  |  |  |     def self.uid_home | 
					
						
							|  |  |  |       require "etc" | 
					
						
							|  |  |  |       Etc.getpwuid(Process.uid)&.dir | 
					
						
							|  |  |  |     rescue ArgumentError | 
					
						
							|  |  |  |       # Cover for misconfigured NSS setups | 
					
						
							|  |  |  |       nil | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2024-05-09 01:50:56 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | end |