+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 =
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
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
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;
__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 *
const char *
cygheap_user::env_name ()
{
- return name ();
+ (void) env_domain ();
+ return winname;
}