From 6327de5fef1da1866695426cb7d73d47e157b971 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Wed, 8 May 2002 14:21:08 +0000 Subject: [PATCH] * cygheap.h (class cygheap_user): Add member `orig_psid'. Add method `orig_sid()'. * cygheap.cc (cygheap_user::set_sid): Maintain orig_psid. --- winsup/cygwin/ChangeLog | 6 ++++++ winsup/cygwin/cygheap.cc | 12 +++++++++++- winsup/cygwin/cygheap.h | 2 ++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 42e1833c7..e33b5bdfb 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,9 @@ +2002-05-08 Corinna Vinschen + + * cygheap.h (class cygheap_user): Add member `orig_psid'. + Add method `orig_sid()'. + * cygheap.cc (cygheap_user::set_sid): Maintain orig_psid. + 2002-04-28 Norbert Schulze * localtime.cc (tzsetwall): Use wildabbr if generated timezone name diff --git a/winsup/cygwin/cygheap.cc b/winsup/cygwin/cygheap.cc index 5d770746b..0992ad300 100644 --- a/winsup/cygwin/cygheap.cc +++ b/winsup/cygwin/cygheap.cc @@ -468,13 +468,23 @@ cygheap_user::set_sid (PSID new_sid) { if (psid) cfree (psid); + if (orig_psid) + cfree (orig_psid); psid = NULL; + orig_psid = NULL; return TRUE; } else { if (!psid) - psid = cmalloc (HEAP_STR, MAX_SID_LEN); + { + if (!orig_psid) + { + orig_psid = cmalloc (HEAP_STR, MAX_SID_LEN); + CopySid (MAX_SID_LEN, orig_psid, new_sid); + } + psid = cmalloc (HEAP_STR, MAX_SID_LEN); + } return CopySid (MAX_SID_LEN, psid, new_sid); } } diff --git a/winsup/cygwin/cygheap.h b/winsup/cygwin/cygheap.h index 154fd24bf..f7c507e46 100644 --- a/winsup/cygwin/cygheap.h +++ b/winsup/cygwin/cygheap.h @@ -94,6 +94,7 @@ class cygheap_user char *plogsrv; /* Logon server, may be FQDN */ char *pdomain; /* Logon domain of the user */ PSID psid; /* buffer for user's SID */ + PSID orig_psid; /* Remains intact even after impersonation */ public: __uid16_t orig_uid; /* Remains intact even after impersonation */ __uid16_t orig_gid; /* Ditto */ @@ -120,6 +121,7 @@ public: BOOL set_sid (PSID new_sid); PSID sid () const { return psid; } + PSID orig_sid () const { return orig_psid; } void operator =(cygheap_user &user) {