Skip to content
  • U.Nakamura's avatar
    209d0f0e
    merge revision(s) c15cddd1: [Backport #16787] · 209d0f0e
    U.Nakamura authored
    	Allow Dir.home to work for non-login procs when $HOME not set
    
    	Allow the 'Dir.home' method to reliably locate the user's home directory when
    	all three of the following are true at the same time:
    
    	1. Ruby is running on a Unix-like OS
    	2. The $HOME environment variable is not set
    	3. The process is not a descendant of login(1) (or a work-alike)
    
    	The prior behavior was that the lookup could only work for login-descended
    	processes.
    
    	This is accomplished by looking up the user's record in the password database
    	by uid (getpwuid_r(3)) as a fallback to the lookup by name (getpwname_r(3))
    	which is still attempted first (based on the name, if any, returned by
    	getlogin_r(3)).
    
    	If getlogin_r(3), getpwnam_r(3), and/or getpwuid_r(3) is not available at
    	compile time, will fallback on using their respective non-*_r() variants:
    	getlogin(3), getpwnam(3), and/or getpwuid(3).
    
    	The rationale for attempting to do the lookup by name prior to doing it by uid
    	is to accommodate the possibility of multiple login names (each with its own
    	record in the password database, so each with a potentially different home
    	directory) being mapped to the same uid (as is explicitly allowed for by
    	POSIX; see getlogin(3posix)).
    
    	Preserves the existing behavior for login-descended processes, and adds the
    	new capability of having Dir.home being able to find the user's home directory
    	for non-login-descended processes.
    
    	Fixes [Bug #16787]
    
    	Related discussion:
    	https://bugs.ruby-lang.org/issues/16787
    	https://github.com/ruby/ruby/pull/3034
    
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_6@67931 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
    209d0f0e
    merge revision(s) c15cddd1: [Backport #16787]
    U.Nakamura authored
    	Allow Dir.home to work for non-login procs when $HOME not set
    
    	Allow the 'Dir.home' method to reliably locate the user's home directory when
    	all three of the following are true at the same time:
    
    	1. Ruby is running on a Unix-like OS
    	2. The $HOME environment variable is not set
    	3. The process is not a descendant of login(1) (or a work-alike)
    
    	The prior behavior was that the lookup could only work for login-descended
    	processes.
    
    	This is accomplished by looking up the user's record in the password database
    	by uid (getpwuid_r(3)) as a fallback to the lookup by name (getpwname_r(3))
    	which is still attempted first (based on the name, if any, returned by
    	getlogin_r(3)).
    
    	If getlogin_r(3), getpwnam_r(3), and/or getpwuid_r(3) is not available at
    	compile time, will fallback on using their respective non-*_r() variants:
    	getlogin(3), getpwnam(3), and/or getpwuid(3).
    
    	The rationale for attempting to do the lookup by name prior to doing it by uid
    	is to accommodate the possibility of multiple login names (each with its own
    	record in the password database, so each with a potentially different home
    	directory) being mapped to the same uid (as is explicitly allowed for by
    	POSIX; see getlogin(3posix)).
    
    	Preserves the existing behavior for login-descended processes, and adds the
    	new capability of having Dir.home being able to find the user's home directory
    	for non-login-descended processes.
    
    	Fixes [Bug #16787]
    
    	Related discussion:
    	https://bugs.ruby-lang.org/issues/16787
    	https://github.com/ruby/ruby/pull/3034
    
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_6@67931 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Loading