* sec_helper.cc (cygsid::get_id): If the sid matches a sid stored in

cygheap->user, return the uid or gid from myself.
* security.cc (alloc_sd): If gid == myself->gid, return the group sid from
cygheap->user.  Remove the test for uid == original_uid, which is
counter-productive.
This commit is contained in:
Christopher Faylor 2002-10-22 16:22:10 +00:00
parent 1cc651ecaf
commit 329b9ead3e
3 changed files with 42 additions and 25 deletions

View File

@ -1,3 +1,11 @@
2002-10-22 Pierre Humblet <pierre.humblet@ieee.org>
* sec_helper.cc (cygsid::get_id): If the sid matches a sid stored in
cygheap->user, return the uid or gid from myself.
* security.cc (alloc_sd): If gid == myself->gid, return the group sid
from cygheap->user. Remove the test for uid == original_uid, which is
counter-productive.
2002-10-22 Christopher Faylor <cgf@redhat.com>
* cygheap.cc (cygheap_fixup_in_child): Use user_heap element in

View File

@ -162,6 +162,9 @@ cygsid::get_id (BOOL search_grp, int *type)
if (!search_grp)
{
struct passwd *pw;
if (EqualSid(psid, cygheap->user.sid ()))
id = myself->uid;
else
for (int pidx = 0; (pw = internal_getpwent (pidx)); ++pidx)
{
if (sid.getfrompw (pw) && sid == psid)
@ -180,6 +183,9 @@ cygsid::get_id (BOOL search_grp, int *type)
if (search_grp || type)
{
struct __group32 *gr;
if (cygheap->user.groups.pgsid == psid)
id = myself->gid;
else
for (int gidx = 0; (gr = internal_getgrent (gidx)); ++gidx)
{
if (sid.getfromgr (gr) && sid == psid)

View File

@ -1536,9 +1536,7 @@ alloc_sd (__uid32_t uid, __gid32_t gid, int attribute,
/* Check for current user first */
if (uid == myself->uid)
owner_sid = cygheap->user.sid ();
else if (uid == cygheap->user.orig_uid)
owner_sid = cygheap->user.orig_sid ();
if (!owner_sid)
else
{
/* Otherwise retrieve user data from /etc/passwd */
struct passwd *pw = getpwuid32 (uid);
@ -1559,12 +1557,17 @@ alloc_sd (__uid32_t uid, __gid32_t gid, int attribute,
/* Get SID of new group. */
cygsid group_sid (NO_SID);
/* Check for current user first */
if (gid == myself->gid)
group_sid = cygheap->user.groups.pgsid;
else
{
struct __group32 *grp = getgrgid32 (gid);
if (!grp)
debug_printf ("no /etc/group entry for %d", gid);
else if (!group_sid.getfromgr (grp))
debug_printf ("no SID for group %d", gid);
}
/* Initialize local security descriptor. */
SECURITY_DESCRIPTOR sd;
PSECURITY_DESCRIPTOR psd = NULL;