OSDN Git Service

* cygheap.h (cygheap_user::winname): New field.
authorcgf <cgf>
Sun, 16 Jun 2002 05:26:06 +0000 (05:26 +0000)
committercgf <cgf>
Sun, 16 Jun 2002 05:26:06 +0000 (05:26 +0000)
* 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
winsup/cygwin/cygheap.cc
winsup/cygwin/cygheap.h
winsup/cygwin/uinfo.cc

index d598777..b8b3870 100644 (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 =
index aba80c6..9b0a2a2 100644 (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
index 7687ab7..032f6a4 100644 (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
index eeec275..ad61dd3 100644 (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,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;
 }