From: Christopher Faylor Date: Sat, 29 Jun 2002 22:05:30 +0000 (+0000) Subject: * autoload.cc (NetGetDCName): Change to make this an optional load function. X-Git-Tag: pre-no-this~429 X-Git-Url: https://sourceware.org/git/?a=commitdiff_plain;h=efc1575ecd6c005883f5e4bb292a6a33a4c17b2a;p=newlib-cygwin.git * autoload.cc (NetGetDCName): Change to make this an optional load function. * cygheap.h (cygheap_user::logsrv): Return NULL when operation fails. (cygheap_user::winname): Ditto. (cygheap_user::domain): Ditto. * uinfo.cc (cygheap_user::env_logsrv): Save results in temp variable. (cygheap_user::env_userprofile): Ditto. --- diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index f314e864f..87ac1a3fe 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,13 @@ +2002-06-29 Christopher Faylor + + * autoload.cc (NetGetDCName): Change to make this an optional load + function. + * cygheap.h (cygheap_user::logsrv): Return NULL when operation fails. + (cygheap_user::winname): Ditto. + (cygheap_user::domain): Ditto. + * uinfo.cc (cygheap_user::env_logsrv): Save results in temp variable. + (cygheap_user::env_userprofile): Ditto. + 2002-06-29 Christopher Faylor * environ.cc (spenv::retrieve): Detect return of env_dontadd from diff --git a/winsup/cygwin/autoload.cc b/winsup/cygwin/autoload.cc index d910b43ed..d37b19975 100644 --- a/winsup/cygwin/autoload.cc +++ b/winsup/cygwin/autoload.cc @@ -371,7 +371,7 @@ LoadDLLfunc (SetSecurityDescriptorOwner, 12, advapi32) LoadDLLfunc (SetTokenInformation, 16, advapi32) LoadDLLfunc (NetApiBufferFree, 4, netapi32) -LoadDLLfunc (NetGetDCName, 12, netapi32) +LoadDLLfuncEx (NetGetDCName, 12, netapi32, 1) LoadDLLfunc (NetLocalGroupEnum, 28, netapi32) LoadDLLfunc (NetLocalGroupGetMembers, 32, netapi32) LoadDLLfunc (NetUserGetGroups, 28, netapi32) diff --git a/winsup/cygwin/cygheap.h b/winsup/cygwin/cygheap.h index 63585d91a..d2e06bfef 100644 --- a/winsup/cygwin/cygheap.h +++ b/winsup/cygwin/cygheap.h @@ -144,15 +144,18 @@ public: const char *logsrv () { - return env_logsrv ("LOGONSERVER=", sizeof ("LOGONSERVER=") - 1); + const char *p = env_logsrv ("LOGONSERVER=", sizeof ("LOGONSERVER=") - 1); + return (p == almost_null) ? NULL : p; } const char *winname () { - return env_name ("USERNAME=", sizeof ("USERNAME=") - 1); + const char *p = env_name ("USERNAME=", sizeof ("USERNAME=") - 1); + return (p == almost_null) ? NULL : p; } const char *domain () { - return env_domain ("USERDOMAIN=", sizeof ("USERDOMAIN=") - 1); + const char *p = env_domain ("USERDOMAIN=", sizeof ("USERDOMAIN=") - 1); + return (p == almost_null) ? NULL : p; } BOOL set_sid (PSID new_sid); BOOL set_orig_sid (); diff --git a/winsup/cygwin/uinfo.cc b/winsup/cygwin/uinfo.cc index ae500049e..2b506bde9 100644 --- a/winsup/cygwin/uinfo.cc +++ b/winsup/cygwin/uinfo.cc @@ -319,12 +319,14 @@ cygheap_user::env_logsrv (const char *name, size_t namelen) if (test_uid (plogsrv, name, namelen)) return plogsrv; - if (!domain () || strcasematch (winname (), "SYSTEM")) + const char *mydomain = domain (); + const char *myname = winname (); + if (!mydomain || strcasematch (myname, "SYSTEM")) return almost_null; char logsrv[INTERNET_MAX_HOST_NAME_LENGTH + 3]; cfree_and_set (plogsrv, almost_null); - if (get_logon_server (domain (), logsrv, NULL)) + if (get_logon_server (mydomain, logsrv, NULL)) plogsrv = cstrdup (logsrv); return plogsrv; } @@ -363,7 +365,8 @@ cygheap_user::env_userprofile (const char *name, size_t namelen) char userprofile_env_buf[MAX_PATH + 1]; cfree_and_set (puserprof, almost_null); /* FIXME: Should this just be setting a puserprofile like everything else? */ - if (!strcasematch (winname (), "SYSTEM") + const char *myname = winname (); + if (myname && strcasematch (myname, "SYSTEM") && get_registry_hive_path (sid (), userprofile_env_buf)) puserprof = cstrdup (userprofile_env_buf);