This is the mail archive of the cygwin-patches mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH v2 0/2] Support deriving the current user's home directory via HOME


This patch mini-series supports Git for Windows' main 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, and it
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).

Sorry for sending out v2 so late...!


Johannes Schindelin (2):
  Allow deriving the current user's home directory via the HOME variable
  Respect `db_home` setting even for the SYSTEM account

 winsup/cygwin/cygheap.h |  3 ++-
 winsup/cygwin/uinfo.cc  | 55 ++++++++++++++++++++++++++++++++++++++++++++++++-
 winsup/doc/ntsec.xml    | 20 ++++++++++++++++++
 3 files changed, 76 insertions(+), 2 deletions(-)

Interdiff vs v1:

diff --git a/winsup/cygwin/uinfo.cc b/winsup/cygwin/uinfo.cc
index 525a90e..8c51b82 100644
--- a/winsup/cygwin/uinfo.cc
+++ b/winsup/cygwin/uinfo.cc
@@ -1066,7 +1066,8 @@ cygheap_pwdgrp::get_home (cyg_ldap *pldap, cygpsid &sid, PCWSTR dom,
 	    }
 	  break;
 	case NSS_SCHEME_ENV:
-	  home = fetch_home_env ();
+	  if (RtlEqualSid (sid, cygheap->user.sid ()))
+	    home = fetch_home_env ();
 	  break;
 	}
     }
@@ -1100,7 +1101,8 @@ cygheap_pwdgrp::get_home (PUSER_INFO_3 ui, cygpsid &sid, PCWSTR dom,
 				  dom, NULL, name, full_qualified);
 	  break;
 	case NSS_SCHEME_ENV:
-	  home = fetch_home_env ();
+	  if (RtlEqualSid (sid, cygheap->user.sid ()))
+	    home = fetch_home_env ();
 	  break;
 	}
     }
@@ -2127,7 +2129,11 @@ pwdgrp::fetch_account_from_windows (fetch_user_arg_t &arg, cyg_ldap *pldap)
 	 it to a well-known group here. */
       if (acc_type == SidTypeUser
 	  && (sid_sub_auth_count (sid) <= 3 || sid_id_auth (sid) == 11))
-	acc_type = SidTypeWellKnownGroup;
+	{
+	  acc_type = SidTypeWellKnownGroup;
+	  home = cygheap->pg.get_home (pldap, sid, dom, domain, name,
+				       fully_qualified_name);
+	}
       switch (acc_type)
       	{
 	case SidTypeUser:
diff --git a/winsup/doc/ntsec.xml b/winsup/doc/ntsec.xml
index 9cee58c..14c37c5 100644
--- a/winsup/doc/ntsec.xml
+++ b/winsup/doc/ntsec.xml
@@ -1356,8 +1356,8 @@ schemata are the following:
   </varlistentry>
   <varlistentry>
     <term><literal>env</literal></term>
-    <listitem>Derives the home directory from the environment variable
-	      <literal>HOME</literal> (falling back to
+    <listitem>Derives the home directory of the current user from the
+	      environment variable <literal>HOME</literal> (falling back to
 	      <literal>HOMEDRIVE\HOMEPATH</literal> and
 	      <literal>USERPROFILE</literal>, in that order).  This is faster
 	      than the <term><literal>windows</literal></term> schema at the
@@ -1498,8 +1498,8 @@ of each schema when used with <literal>db_home:</literal>
   </varlistentry>
   <varlistentry>
     <term><literal>env</literal></term>
-    <listitem>Derives the home directory from the environment variable
-	      <literal>HOME</literal> (falling back to
+    <listitem>Derives the home directory of the current user from the
+	      environment variable <literal>HOME</literal> (falling back to
 	      <literal>HOMEDRIVE\HOMEPATH</literal> and
 	      <literal>USERPROFILE</literal>, in that order).  This is faster
 	      than the <term><literal>windows</literal></term> schema at the

-- 
2.6.3.windows.1.300.g1c25e49


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]