Project

General

Profile

Actions

Bug #17009

closed

[patch] backport #16787 for 2.6: allow Dir.home to work for non-login procs when $HOME not set

Added by salewski (Alan Salewski) almost 4 years ago. Updated almost 4 years ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 2.6.7p148 (2020-06-14 revision 67884) [x86_64-linux]
[ruby-core:99055]

Description

The attached patch backports to ruby_2_6 change c15cddd1d515c5bd8dfe8fb2725e3f723aec63b8,
which fixes the issue described in bug #16787.

The original commit message:

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

Files

ruby-2.6-backport-allow-dir.home-for-non-login-procs.patch (10.8 KB) ruby-2.6-backport-allow-dir.home-for-non-login-procs.patch patch: ruby-2.6-backport-allow-dir.home-for-non-login-procs.patch salewski (Alan Salewski), 07/04/2020 07:19 PM

Updated by salewski (Alan Salewski) almost 4 years ago

I created a pull request for this over on GitHub:

https://github.com/ruby/ruby/pull/3287

The integration tests are still running there as I write this.

Actions #2

Updated by jeremyevans0 (Jeremy Evans) almost 4 years ago

  • Status changed from Open to Closed
Actions

Also available in: Atom PDF

Like0
Like0Like0