* 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

@@ -162,14 +162,17 @@ cygsid::get_id (BOOL search_grp, int *type)
if (!search_grp)
{
struct passwd *pw;
for (int pidx = 0; (pw = internal_getpwent (pidx)); ++pidx)
{
if (sid.getfrompw (pw) && sid == psid)
{
id = pw->pw_uid;
break;
}
}
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)
{
id = pw->pw_uid;
break;
}
}
if (id >= 0)
{
if (type)
@@ -180,14 +183,17 @@ cygsid::get_id (BOOL search_grp, int *type)
if (search_grp || type)
{
struct __group32 *gr;
for (int gidx = 0; (gr = internal_getgrent (gidx)); ++gidx)
{
if (sid.getfromgr (gr) && sid == psid)
{
id = gr->gr_gid;
break;
}
}
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)
{
id = gr->gr_gid;
break;
}
}
if (id >= 0)
{
if (type)