From 5f25e1d11a9760dd4728ae3a82c23884f50e244e Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Sun, 16 Jun 2002 05:26:14 +0000 Subject: [PATCH] * 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(). --- winsup/cygwin/ChangeLog | 10 ++++++++++ winsup/cygwin/cygheap.cc | 4 +++- winsup/cygwin/cygheap.h | 1 + winsup/cygwin/uinfo.cc | 22 +++++++++++++++------- 4 files changed, 29 insertions(+), 8 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index d598777d3..b8b3870f8 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,13 @@ +2002-06-16 Christopher Faylor + + * 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 * spawn.cc (spawn_guts): Revert removal of ciresrv.moreinfo->uid = diff --git a/winsup/cygwin/cygheap.cc b/winsup/cygwin/cygheap.cc index aba80c61d..9b0a2a24a 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 7687ab717..032f6a40a 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 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; }