summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/uinfo.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/uinfo.cc')
-rw-r--r--winsup/cygwin/uinfo.cc22
1 files changed, 15 insertions, 7 deletions
diff --git a/winsup/cygwin/uinfo.cc b/winsup/cygwin/uinfo.cc
index eeec27566..ad61dd3ed 100644
--- a/winsup/cygwin/uinfo.cc
+++ b/winsup/cygwin/uinfo.cc
@@ -207,11 +207,13 @@ cygheap_user::ontherange (homebodies what, struct passwd *pw)
memcpy (homedrive_env_buf, p, 2);
homedrive = homedrive_env_buf;
}
+
if ((p = getenv ("HOMEPATH")))
{
strcpy (homepath_env_buf, p);
homepath = homepath_env_buf;
}
+
if ((p = getenv ("HOME")))
debug_printf ("HOME is already in the environment %s", p);
else
@@ -307,6 +309,9 @@ cygheap_user::env_logsrv ()
if (plogsrv)
return plogsrv;
+ if (strcasematch (env_name (), "SYSTEM"))
+ return NULL;
+
char logsrv[INTERNET_MAX_HOST_NAME_LENGTH + 3];
if (!get_logon_server (env_domain (), logsrv, NULL))
return NULL;
@@ -331,19 +336,21 @@ cygheap_user::env_domain ()
__seterrno ();
return NULL;
}
+ if (winname)
+ cfree (winname);
+ winname = cstrdup (username);
return pdomain = cstrdup (userdomain);
}
const char *
cygheap_user::env_userprofile ()
{
- if (strcasematch (name (), "SYSTEM") || !env_domain () || !env_logsrv ())
- return NULL;
-
- if (get_registry_hive_path (sid (), userprofile_env_buf))
+ /* FIXME: Should this just be setting a puserprofile like everything else? */
+ if (!strcasematch (env_name (), "SYSTEM")
+ && get_registry_hive_path (sid (), userprofile_env_buf))
return userprofile_env_buf;
- else
- return NULL;
+
+ return NULL;
}
const char *
@@ -361,5 +368,6 @@ cygheap_user::env_homedrive ()
const char *
cygheap_user::env_name ()
{
- return name ();
+ (void) env_domain ();
+ return winname;
}