* 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().
This commit is contained in:
Christopher Faylor 2002-06-16 05:26:14 +00:00
parent 5c8bce24b3
commit 5f25e1d11a
4 changed files with 29 additions and 8 deletions

View File

@ -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 =

View File

@ -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

View File

@ -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

View File

@ -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,18 +336,20 @@ 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;
}
@ -361,5 +368,6 @@ cygheap_user::env_homedrive ()
const char *
cygheap_user::env_name ()
{
return name ();
(void) env_domain ();
return winname;
}