* 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.
This commit is contained in:
Corinna Vinschen 2001-07-18 12:56:26 +00:00
parent 5564cd7a89
commit c9fbce2641
2 changed files with 47 additions and 17 deletions

View File

@ -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.

View File

@ -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