From: cgf Date: Fri, 14 Jun 2002 21:46:17 +0000 (+0000) Subject: * cygheap.h (cygheap_user::userprofile_env_buf): New static member. X-Git-Tag: mingw-runtime-2_0~13 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=7f583e6e37e142b717dbee5121ff8b662f7c6a2a;p=pf3gnuchains%2Fpf3gnuchains4x.git * cygheap.h (cygheap_user::userprofile_env_buf): New static member. * environ.cc (build_env): Add debugging statement. (spenvs): Switch functions for USERDOMAIN and USERNAME. * spawn.cc (spawn_guts): Move environment initialization prior to cygheap_setup_for_child or environment info will never be copied to child. --- diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 1b0e04c422..933c9007af 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,5 +1,14 @@ 2002-06-14 Christopher Faylor + * cygheap.h (cygheap_user::userprofile_env_buf): New static member. + * environ.cc (build_env): Add debugging statement. + (spenvs): Switch functions for USERDOMAIN and USERNAME. + * spawn.cc (spawn_guts): Move environment initialization prior to + cygheap_setup_for_child or environment info will never be copied to + child. + +2002-06-14 Christopher Faylor + * cygheap.h (cygheap_user): Add static members to hold home{drive,path} info. * uinfo.cc (cygheap_user::ontherange): Use static class members for diff --git a/winsup/cygwin/cygheap.h b/winsup/cygwin/cygheap.h index d50e16eea8..f8777ccd95 100644 --- a/winsup/cygwin/cygheap.h +++ b/winsup/cygwin/cygheap.h @@ -109,6 +109,9 @@ class cygheap_user info may live. */ static char homepath_env_buf[MAX_PATH + 1]; /* Where the HOMEPATH environment variable info may live. */ + static char userprofile_env_buf[MAX_PATH + 1]; /* Where the USERPROFILE + environment variable info + may live. */ public: __uid32_t orig_uid; /* Remains intact even after impersonation */ __gid32_t orig_gid; /* Ditto */ diff --git a/winsup/cygwin/environ.cc b/winsup/cygwin/environ.cc index 737c68d7f4..9ed6e4142c 100644 --- a/winsup/cygwin/environ.cc +++ b/winsup/cygwin/environ.cc @@ -765,8 +765,8 @@ static NO_COPY spenv spenvs[] = {"LOGONSERVER=", &cygheap_user::env_logsrv}, {"SYSTEMDRIVE=", NULL}, {"SYSTEMROOT=", NULL}, - {"USERDOMAIN=", &cygheap_user::env_name}, - {"USERNAME=", &cygheap_user::env_domain}, + {"USERDOMAIN=", &cygheap_user::env_domain}, + {"USERNAME=", &cygheap_user::env_name}, {"USERPROFILE=", &cygheap_user::env_userprofile}, }; @@ -939,6 +939,7 @@ build_env (const char * const *envp, char *&envblock, int &envc, of buffer */ } + debug_printf ("envp %p, envc %d", newenv, envc); return newenv; } diff --git a/winsup/cygwin/spawn.cc b/winsup/cygwin/spawn.cc index 1f92c7f760..3841e845bf 100644 --- a/winsup/cygwin/spawn.cc +++ b/winsup/cygwin/spawn.cc @@ -613,9 +613,9 @@ spawn_guts (const char * prog_arg, const char *const *argv, if (!cygheap->user.impersonated || cygheap->user.token == INVALID_HANDLE_VALUE) { PSECURITY_ATTRIBUTES sec_attribs = sec_user_nih (sa_buf); - newheap = cygheap_setup_for_child (&ciresrv, cygheap->fdtab.need_fixup_before ()); ciresrv.moreinfo->envp = build_env (envp, envblock, ciresrv.moreinfo->envc, real_path.iscygexec ()); + newheap = cygheap_setup_for_child (&ciresrv, cygheap->fdtab.need_fixup_before ()); rc = CreateProcess (runpath, /* image name - with full path */ one_line.buf, /* what was passed to exec */ sec_attribs, /* process security attrs */ @@ -656,9 +656,9 @@ spawn_guts (const char * prog_arg, const char *const *argv, strcat (wstname, dskname); si.lpDesktop = wstname; - newheap = cygheap_setup_for_child (&ciresrv, cygheap->fdtab.need_fixup_before ()); ciresrv.moreinfo->envp = build_env (envp, envblock, ciresrv.moreinfo->envc, real_path.iscygexec ()); + newheap = cygheap_setup_for_child (&ciresrv, cygheap->fdtab.need_fixup_before ()); rc = CreateProcessAsUser (cygheap->user.token, runpath, /* image name - with full path */ one_line.buf, /* what was passed to exec */ diff --git a/winsup/cygwin/uinfo.cc b/winsup/cygwin/uinfo.cc index bd7b3cb8be..e20c4b7044 100644 --- a/winsup/cygwin/uinfo.cc +++ b/winsup/cygwin/uinfo.cc @@ -190,6 +190,7 @@ cuserid (char *src) char cygheap_user::homepath_env_buf[MAX_PATH + 1]; char cygheap_user::homedrive_env_buf[3]; +char cygheap_user::userprofile_env_buf[MAX_PATH + 1]; const char * cygheap_user::ontherange (homebodies what, struct passwd *pw) @@ -335,12 +336,11 @@ cygheap_user::env_domain () const char * cygheap_user::env_userprofile () { - static char buf[512]; /* FIXME: This shouldn't be static. */ if (strcasematch (name (), "SYSTEM") || !env_domain () || !env_logsrv ()) return NULL; - if (get_registry_hive_path (sid (), buf)) - return buf; + if (get_registry_hive_path (sid (), userprofile_env_buf)) + return userprofile_env_buf; else return NULL; }