* uinfo.cc (internal_getlogin): Change parameter list to reflect

that `token' is member of cygheap_user now.
        (uinfo_init): Use modified internal_getlogin.
        * syscalls.cc (seteuid): Ditto.
This commit is contained in:
Corinna Vinschen 2000-11-15 21:14:27 +00:00
parent 66c161baac
commit cb6f4dbd0c
3 changed files with 18 additions and 11 deletions

View File

@ -1,3 +1,10 @@
Wed Nov 15 22:08:00 2000 Corinna Vinschen <corinna@vinschen.de>
* uinfo.cc (internal_getlogin): Change parameter list to reflect
that `token' is member of cygheap_user now.
(uinfo_init): Use modified internal_getlogin.
* syscalls.cc (seteuid): Ditto.
Wed Nov 15 21:56:00 2000 Corinna Vinschen <corinna@vinschen.de> Wed Nov 15 21:56:00 2000 Corinna Vinschen <corinna@vinschen.de>
* cygheap.h: Move `token' and `impersonated' from class _pinfo * cygheap.h: Move `token' and `impersonated' from class _pinfo

View File

@ -1811,7 +1811,7 @@ setuid (uid_t uid)
return ret; return ret;
} }
extern const char *internal_getlogin (cygheap_user &user, HANDLE token); extern const char *internal_getlogin (cygheap_user &user);
/* seteuid: standards? */ /* seteuid: standards? */
extern "C" int extern "C" int
@ -1851,12 +1851,12 @@ seteuid (uid_t uid)
} }
cygheap_user user; cygheap_user user;
/* token is used in internal_getlogin() to determine if /* user.token is used in internal_getlogin() to determine if
impersonation is active. If so, the token is used for impersonation is active. If so, the token is used for
retrieving user's SID. */ retrieving user's SID. */
HANDLE token = cygheap->user.impersonated ? cygheap->user.token user.token = cygheap->user.impersonated ? cygheap->user.token
: INVALID_HANDLE_VALUE; : INVALID_HANDLE_VALUE;
struct passwd *pw_cur = getpwnam (internal_getlogin (user, token)); struct passwd *pw_cur = getpwnam (internal_getlogin (user));
if (pw_cur != pw_new) if (pw_cur != pw_new)
{ {
debug_printf ("Diffs!!! token: %d, cur: %d, new: %d, orig: %d", debug_printf ("Diffs!!! token: %d, cur: %d, new: %d, orig: %d",

View File

@ -25,7 +25,7 @@ details. */
#include "security.h" #include "security.h"
const char * const char *
internal_getlogin (cygheap_user &user, HANDLE token) internal_getlogin (cygheap_user &user)
{ {
char username[MAX_USER_NAME]; char username[MAX_USER_NAME];
DWORD username_len = MAX_USER_NAME; DWORD username_len = MAX_USER_NAME;
@ -108,8 +108,8 @@ internal_getlogin (cygheap_user &user, HANDLE token)
} }
if (allow_ntsec) if (allow_ntsec)
{ {
HANDLE ptok = token; /* Which is INVALID_HANDLE_VALUE if no HANDLE ptok = user.token; /* Which is INVALID_HANDLE_VALUE if no
impersonation took place. */ impersonation took place. */
DWORD siz; DWORD siz;
char tu[1024]; char tu[1024];
int ret = 0; int ret = 0;
@ -127,7 +127,8 @@ internal_getlogin (cygheap_user &user, HANDLE token)
else if (!(ret = user.set_sid (((TOKEN_USER *) &tu)->User.Sid))) else if (!(ret = user.set_sid (((TOKEN_USER *) &tu)->User.Sid)))
debug_printf ("Couldn't retrieve SID from access token!"); debug_printf ("Couldn't retrieve SID from access token!");
/* Close token only if it's a result from OpenProcessToken(). */ /* Close token only if it's a result from OpenProcessToken(). */
if (ptok != INVALID_HANDLE_VALUE && token == INVALID_HANDLE_VALUE) if (ptok != INVALID_HANDLE_VALUE
&& user.token == INVALID_HANDLE_VALUE)
CloseHandle (ptok); CloseHandle (ptok);
/* If that failes, try to get the SID from localhost. This can only /* If that failes, try to get the SID from localhost. This can only
@ -190,8 +191,7 @@ uinfo_init ()
/* If uid is USHRT_MAX, the process is started from a non cygwin /* If uid is USHRT_MAX, the process is started from a non cygwin
process or the user context was changed in spawn.cc */ process or the user context was changed in spawn.cc */
if (myself->uid == USHRT_MAX) if (myself->uid == USHRT_MAX)
if ((p = getpwnam (internal_getlogin (cygheap->user, if ((p = getpwnam (internal_getlogin (cygheap->user))) != NULL)
INVALID_HANDLE_VALUE))) != NULL)
{ {
myself->uid = p->pw_uid; myself->uid = p->pw_uid;
myself->gid = p->pw_gid; myself->gid = p->pw_gid;