aboutsummaryrefslogtreecommitdiff
path: root/winsup/cygwin
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2002-06-16 05:26:14 +0000
committerChristopher Faylor <me@cgf.cx>2002-06-16 05:26:14 +0000
commit5f25e1d11a9760dd4728ae3a82c23884f50e244e (patch)
tree636eb589c7afe0357881d1276b272b9f7231cca9 /winsup/cygwin
parent5c8bce24b36e8cbbc107a43d8dfff0a9402ba5fd (diff)
downloadnewlib-5f25e1d11a9760dd4728ae3a82c23884f50e244e.zip
newlib-5f25e1d11a9760dd4728ae3a82c23884f50e244e.tar.gz
newlib-5f25e1d11a9760dd4728ae3a82c23884f50e244e.tar.bz2
* cygheap.h (cygheap_user::winname): New field.
* cygheap.cc (cygheap_user::set_name): Clear winname when name changes. * uinfo.cc (cygheap_user::env_logsrv): Avoid calculating server when Windows user == SYSTEM. (cygheap_user::env_domain): Set winname here too. (cygheap_user::env_userprofile): Eliminate superfluous tests. (cygheap_user::env_name): Seed winname by calling env_domain().
Diffstat (limited to 'winsup/cygwin')
-rw-r--r--winsup/cygwin/ChangeLog10
-rw-r--r--winsup/cygwin/cygheap.cc4
-rw-r--r--winsup/cygwin/cygheap.h1
-rw-r--r--winsup/cygwin/uinfo.cc22
4 files changed, 29 insertions, 8 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index d598777..b8b3870 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,13 @@
+2002-06-16 Christopher Faylor <cgf@redhat.com>
+
+ * cygheap.h (cygheap_user::winname): New field.
+ * cygheap.cc (cygheap_user::set_name): Clear winname when name changes.
+ * uinfo.cc (cygheap_user::env_logsrv): Avoid calculating server when
+ Windows user == SYSTEM.
+ (cygheap_user::env_domain): Set winname here too.
+ (cygheap_user::env_userprofile): Eliminate superfluous tests.
+ (cygheap_user::env_name): Seed winname by calling env_domain().
+
2002-06-12 Pierre Humblet <pierre.humblet@ieee.org>
* spawn.cc (spawn_guts): Revert removal of ciresrv.moreinfo->uid =
diff --git a/winsup/cygwin/cygheap.cc b/winsup/cygwin/cygheap.cc
index aba80c6..9b0a2a2 100644
--- a/winsup/cygwin/cygheap.cc
+++ b/winsup/cygwin/cygheap.cc
@@ -449,7 +449,9 @@ cygheap_user::set_name (const char *new_name)
cfree (plogsrv);
if (pdomain)
cfree (pdomain);
- plogsrv = pdomain = NULL;
+ if (winname)
+ cfree (winname);
+ plogsrv = pdomain = winname = NULL;
}
BOOL
diff --git a/winsup/cygwin/cygheap.h b/winsup/cygwin/cygheap.h
index 7687ab7..032f6a4 100644
--- a/winsup/cygwin/cygheap.h
+++ b/winsup/cygwin/cygheap.h
@@ -103,6 +103,7 @@ class cygheap_user
char *pdomain; /* Logon domain of the user */
char *homedrive; /* User's home drive */
char *homepath; /* User's home path */
+ char *winname; /* User's name as far as Windows knows it */
PSID psid; /* buffer for user's SID */
PSID orig_psid; /* Remains intact even after impersonation */
static char homedrive_env_buf[3]; /* Where the HOMEDRIVE environment variable
diff --git a/winsup/cygwin/uinfo.cc b/winsup/cygwin/uinfo.cc
index eeec275..ad61dd3 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;
}