20 lines
		
	
	
		
			459 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			20 lines
		
	
	
		
			459 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
|   | # 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 | ||
|  |   end | ||
|  | end |