Skip to content

home-env-cygwin-v6

This patch series supports Git for Windows' default strategy to
determine the current user's home directory by looking at the
environment variable HOME, falling back to HOMEDRIVE and HOMEPATH, and
if these variables are also unset, to USERPROFILE.

This strategy is a quick method to determine the home directory,
certainly quicker than looking at LDAP, even more so when a domain
controller is unreachable and causes long hangs in Cygwin's startup.

This strategy also allows users to override the home directory easily
(e.g. in case that their real home directory is a network share that is
not all that well handled by some commands such as cmd.exe's cd
command).

NOTE! This iteration presents patches 1 & 2 only for completeness' sake
and for backporting, as they have been applied to Cygwin's main branch
already.

Changes since v5:

- Replaced the third patch by a patch that imitates AzureAD account
  handling also for IIS APPPPOOL ones.

- Added a fourth patch to fix a bug in the first patch (which
  unfortunately was already applied in the buggy form) where _very
  early_ calls to `internal_pwsid ()` would result in completely bogus
  home directory values.

Changes since v4:

- Squashed in Corinna's documentation fixes (read: patch 1 should not be
  applied to Cygwin's main branch, it's presented here for backporting
  purposes).

- Fixed the commit message of the second patch that mistakenly claimed
  that Microsoft accounts would be associated with `/home/SYSTEM`.

- Completely overhauled the commit message of the third patch to motivate
  much better why this fix is needed.

Changes since v3:

- Fixed the bug in v2 where `getenv("HOME")` would convert the value to
  a Unix-y path and the `fetch_home_env()` function would then try to
  convert it _again_.

- Disentangled the logic in `fetch_home_env()` instead of doing
  everything in one big, honking, unreadable `if` condition.

- Commented the code in `fetch_home_env()`.

Changes since v2:

- Using `getenv()` and `cygwin_create_path()` instead of the
  `GetEnvironmentVariableW()`/`cygwin_conv_path()` dance

- Adjusted the documentation to drive home that this only affects the
  _current_ user's home directory

- Using the `PUSER_INFO_3` variant of `get_home()`

- Adjusted the commit messages

- Added another patch, to support "ad-hoc cloud accounts"

Johannes Schindelin (4):
  Allow deriving the current user's home directory via the HOME variable
  Respect `db_home` setting even for SYSTEM/Microsoft accounts
  uinfo: special-case IIS APPPOOL accounts
  Do not rely on `getenv ("HOME")`'s path conversion

 winsup/cygwin/local_includes/cygheap.h |   3 +-
 winsup/cygwin/uinfo.cc                 | 170 +++++++++++++++++++++++--
 winsup/doc/ntsec.xml                   |  20 ++-
 3 files changed, 181 insertions(+), 12 deletions(-)

Range-diff:
1:  e26cae9439 = 1:  e26cae9439 Allow deriving the current user's home directory via the HOME variable
2:  085d4dd8b6 = 2:  085d4dd8b6 Respect `db_home` setting even for SYSTEM/Microsoft accounts
3:  cf47afceba < -:  ---------- Respect `db_home: env` even when no uid can be determined
-:  ---------- > 3:  9b79624368 uinfo: special-case IIS APPPOOL accounts
-:  ---------- > 4:  8ac1548b92 Do not rely on `getenv ("HOME")`'s path conversion

base-commit: a9a17f5fe51498b182d4a11ac48207b8c7ffe8ec

Submitted-As: https://inbox.sourceware.org/cygwin-patches/cover.1680620830.git.johannes.schindelin@gmx.de
In-Reply-To: https://inbox.sourceware.org/cygwin-patches/cover.1679991274.git.johannes.schindelin@gmx.de
In-Reply-To: https://inbox.sourceware.org/cygwin-patches/cover.1450375424.git.johannes.schindelin@gmx.de
In-Reply-To: https://inbox.sourceware.org/cygwin-patches/0Lg1Tn-1YnzUw0ScN-00pcgi@mail.gmx.com
In-Reply-To: https://inbox.sourceware.org/cygwin-patches/cover.1663761086.git.johannes.schindelin@gmx.de
In-Reply-To: https://inbox.sourceware.org/cygwin-patches/cover.1680532960.git.johannes.schindelin@gmx.de
Assets 2