Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2001-07-18 16:56:26 +0400
committerCorinna Vinschen <corinna@vinschen.de>2001-07-18 16:56:26 +0400
commitc9fbce2641e2e82438ca84b423216aff2c61cdd8 (patch)
treec11d615c61bad8b528fea61a7bd3f222ab7202fa
parent5564cd7a89d199abf6736fbf32095d30a3094c36 (diff)
* security.cc (get_user_groups): Call Net function with NULL server
name under specific error conditions. (is_group_member): Ditto. (get_user_local_groups): Ditto. (get_user_primary_group): Ditto.
-rw-r--r--winsup/cygwin/ChangeLog8
-rw-r--r--winsup/cygwin/security.cc56
2 files changed, 47 insertions, 17 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 3818c1746..cfd42e28b 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,11 @@
+Wed 18 Jul 2001 12:54:17 Corinna Vinschen <corinna@vinschen.de>
+
+ * security.cc (get_user_groups): Call Net function with NULL server
+ name under specific error conditions.
+ (is_group_member): Ditto.
+ (get_user_local_groups): Ditto.
+ (get_user_primary_group): Ditto.
+
Wed 18 Jul 2001 11:56:00 Corinna Vinschen <corinna@vinschen.de>
* syscalls.cc (_unlink): Explicitely check for non-existant file.
diff --git a/winsup/cygwin/security.cc b/winsup/cygwin/security.cc
index 6a5b86b27..dd9b37b74 100644
--- a/winsup/cygwin/security.cc
+++ b/winsup/cygwin/security.cc
@@ -274,8 +274,12 @@ get_user_groups (WCHAR *wlogonserver, cygsidlist &grp_list, char *user)
DWORD cnt, tot;
NET_API_STATUS ret;
- if ((ret = NetUserGetGroups (wlogonserver, wuser, 0, (LPBYTE *) &buf,
- MAX_PREFERRED_LENGTH, &cnt, &tot)))
+ ret = NetUserGetGroups (wlogonserver, wuser, 0, (LPBYTE *) &buf,
+ MAX_PREFERRED_LENGTH, &cnt, &tot);
+ if (ret == ERROR_BAD_NETPATH || ret == RPC_S_SERVER_UNAVAILABLE)
+ ret = NetUserGetGroups (NULL, wuser, 0, (LPBYTE *) &buf,
+ MAX_PREFERRED_LENGTH, &cnt, &tot);
+ if (ret)
{
debug_printf ("%d = NetUserGetGroups ()", ret);
set_errno (ret);
@@ -319,22 +323,27 @@ is_group_member (WCHAR *wlogonserver, WCHAR *wgroup,
{
LPLOCALGROUP_MEMBERS_INFO_0 buf;
DWORD cnt, tot;
- BOOL ret = FALSE;
+ NET_API_STATUS ret;
+ BOOL retval = FALSE;
- if (NetLocalGroupGetMembers (wlogonserver, wgroup, 0, (LPBYTE *) &buf,
- MAX_PREFERRED_LENGTH, &cnt, &tot, NULL))
+ ret = NetLocalGroupGetMembers (wlogonserver, wgroup, 0, (LPBYTE *) &buf,
+ MAX_PREFERRED_LENGTH, &cnt, &tot, NULL);
+ if (ret == ERROR_BAD_NETPATH || ret == RPC_S_SERVER_UNAVAILABLE)
+ ret = NetLocalGroupGetMembers (NULL, wgroup, 0, (LPBYTE *) &buf,
+ MAX_PREFERRED_LENGTH, &cnt, &tot, NULL);
+ if (ret)
return FALSE;
- for (DWORD bidx = 0; !ret && bidx < cnt; ++bidx)
+ for (DWORD bidx = 0; !retval && bidx < cnt; ++bidx)
if (EqualSid (usersid, buf[bidx].lgrmi0_sid))
- ret = TRUE;
+ retval = TRUE;
else
- for (int glidx = 0; !ret && glidx < grp_list.count; ++glidx)
+ for (int glidx = 0; !retval && glidx < grp_list.count; ++glidx)
if (EqualSid (grp_list.sids[glidx], buf[bidx].lgrmi0_sid))
- ret = TRUE;
+ retval = TRUE;
NetApiBufferFree (buf);
- return ret;
+ return retval;
}
static BOOL
@@ -345,8 +354,12 @@ get_user_local_groups (WCHAR *wlogonserver, const char *logonserver,
DWORD cnt, tot;
NET_API_STATUS ret;
- if ((ret = NetLocalGroupEnum (wlogonserver, 0, (LPBYTE *) &buf,
- MAX_PREFERRED_LENGTH, &cnt, &tot, NULL)))
+ ret = NetLocalGroupEnum (wlogonserver, 0, (LPBYTE *) &buf,
+ MAX_PREFERRED_LENGTH, &cnt, &tot, NULL);
+ if (ret == ERROR_BAD_NETPATH || ret == RPC_S_SERVER_UNAVAILABLE)
+ ret = NetLocalGroupEnum (NULL, 0, (LPBYTE *) &buf,
+ MAX_PREFERRED_LENGTH, &cnt, &tot, NULL);
+ if (ret)
{
debug_printf ("%d = NetLocalGroupEnum ()", ret);
set_errno (ret);
@@ -410,7 +423,8 @@ get_user_primary_group (WCHAR *wlogonserver, const char *user,
{
LPUSER_INFO_3 buf;
WCHAR wuser[UNLEN + 1];
- BOOL ret = FALSE;
+ NET_API_STATUS ret;
+ BOOL retval = FALSE;
UCHAR count;
if (usersid == well_known_system_sid)
@@ -420,16 +434,24 @@ get_user_primary_group (WCHAR *wlogonserver, const char *user,
}
sys_mbstowcs (wuser, user, UNLEN + 1);
- if (NetUserGetInfo (wlogonserver, wuser, 3, (LPBYTE *) &buf))
- return FALSE;
+ ret = NetUserGetInfo (wlogonserver, wuser, 3, (LPBYTE *) &buf);
+ if (ret == ERROR_BAD_NETPATH || ret == RPC_S_SERVER_UNAVAILABLE)
+ ret = NetUserGetInfo (NULL, wuser, 3, (LPBYTE *) &buf);
+ if (ret)
+ {
+ debug_printf ("%d = NetUserGetInfo ()", ret);
+ set_errno (ret);
+ return FALSE;
+ }
+
pgrpsid = usersid;
if (IsValidSid (pgrpsid) && (count = *GetSidSubAuthorityCount (pgrpsid)) > 1)
{
*GetSidSubAuthority (pgrpsid, count - 1) = buf->usri3_primary_group_id;
- ret = TRUE;
+ retval = TRUE;
}
NetApiBufferFree (buf);
- return ret;
+ return retval;
}
static BOOL