aboutsummaryrefslogtreecommitdiff
path: root/winsup/cygwin
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2000-12-20 12:42:43 +0000
committerCorinna Vinschen <corinna@vinschen.de>2000-12-20 12:42:43 +0000
commitaa2b85cc90a41b143a62196af77736bad9b2da70 (patch)
tree4a45d14789a3eccf13747a58f410dae0223831a6 /winsup/cygwin
parente625e1b99ec6b3edd58199937d3788f7c17aca98 (diff)
downloadnewlib-aa2b85cc90a41b143a62196af77736bad9b2da70.zip
newlib-aa2b85cc90a41b143a62196af77736bad9b2da70.tar.gz
newlib-aa2b85cc90a41b143a62196af77736bad9b2da70.tar.bz2
* autoload.cc: Add load statemant for SetSecurityDescriptorControl.
* security.cc (alloc_sd): Always set SE_DACL_PROTECTED flag on Win2K and higher.
Diffstat (limited to 'winsup/cygwin')
-rw-r--r--winsup/cygwin/ChangeLog6
-rw-r--r--winsup/cygwin/autoload.cc1
-rw-r--r--winsup/cygwin/security.cc15
3 files changed, 22 insertions, 0 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index aeeec00..b5795c6 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,9 @@
+Wed Dec 20 13:37:00 2000 Corinna Vinschen <corinna@vinschen.de>
+
+ * autoload.cc: Add load statemant for SetSecurityDescriptorControl.
+ * security.cc (alloc_sd): Always set SE_DACL_PROTECTED flag on
+ Win2K and higher.
+
Wed Dec 20 01:02:13 2000 Christopher Faylor <cgf@cygnus.com>
* exceptions.cc (reset_signal_arrived): Make global to avoid inlining.
diff --git a/winsup/cygwin/autoload.cc b/winsup/cygwin/autoload.cc
index 77c3724..83081b7 100644
--- a/winsup/cygwin/autoload.cc
+++ b/winsup/cygwin/autoload.cc
@@ -228,6 +228,7 @@ LoadDLLfunc (RegisterEventSourceA, 8, advapi32)
LoadDLLfunc (ReportEventA, 36, advapi32)
LoadDLLfunc (RevertToSelf, 0, advapi32)
LoadDLLfunc (SetKernelObjectSecurity, 12, advapi32)
+LoadDLLfunc (SetSecurityDescriptorControl, 12, advapi32)
LoadDLLfunc (SetSecurityDescriptorDacl, 16, advapi32)
LoadDLLfunc (SetSecurityDescriptorGroup, 12, advapi32)
LoadDLLfunc (SetSecurityDescriptorOwner, 12, advapi32)
diff --git a/winsup/cygwin/security.cc b/winsup/cygwin/security.cc
index 67caf68..f5cb813 100644
--- a/winsup/cygwin/security.cc
+++ b/winsup/cygwin/security.cc
@@ -915,6 +915,21 @@ alloc_sd (uid_t uid, gid_t gid, const char *logsrv, int attribute,
return NULL;
}
+ /*
+ * We set the SE_DACL_PROTECTED flag here to prevent the DACL from being modified
+ * by inheritable ACEs.
+ * This flag as well as the SetSecurityDescriptorControl call are available only
+ * since Win2K.
+ */
+ static int win2KorHigher = -1;
+ if (win2KorHigher == -1)
+ {
+ DWORD version = GetVersion ();
+ win2KorHigher = (version & 0x80000000) || (version & 0xff) < 5 ? 0 : 1;
+ }
+ if (win2KorHigher > 0)
+ SetSecurityDescriptorControl (&sd, SE_DACL_PROTECTED, SE_DACL_PROTECTED);
+
/* Create owner for local security descriptor. */
if (! SetSecurityDescriptorOwner(&sd, owner_sid, FALSE))
{