summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/security.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/security.cc')
-rw-r--r--winsup/cygwin/security.cc21
1 files changed, 17 insertions, 4 deletions
diff --git a/winsup/cygwin/security.cc b/winsup/cygwin/security.cc
index a1619f577..d41d0a174 100644
--- a/winsup/cygwin/security.cc
+++ b/winsup/cygwin/security.cc
@@ -1553,6 +1553,23 @@ alloc_sd (uid_t uid, gid_t gid, const char *logsrv, int attribute,
return psd;
}
+void
+set_security_attribute (int attribute, PSECURITY_ATTRIBUTES psa,
+ void *sd_buf, DWORD sd_buf_size)
+{
+ /* symlinks are anything for everyone!*/
+ if ((attribute & S_IFLNK) == S_IFLNK)
+ attribute |= S_IRWXU | S_IRWXG | S_IRWXO;
+
+ psa->lpSecurityDescriptor = sd_buf;
+ InitializeSecurityDescriptor ((PSECURITY_DESCRIPTOR)sd_buf,
+ SECURITY_DESCRIPTOR_REVISION);
+ psa->lpSecurityDescriptor = alloc_sd (geteuid (), getegid (),
+ cygheap->user.logsrv (),
+ attribute, (PSECURITY_DESCRIPTOR)sd_buf,
+ &sd_buf_size);
+}
+
static int
set_nt_attribute (const char *file, uid_t uid, gid_t gid,
const char *logsrv, int attribute)
@@ -1583,10 +1600,6 @@ set_file_attribute (int use_ntsec, const char *file,
uid_t uid, gid_t gid,
int attribute, const char *logsrv)
{
- /* symlinks are anything for everyone!*/
- if ((attribute & S_IFLNK) == S_IFLNK)
- attribute |= S_IRWXU | S_IRWXG | S_IRWXO;
-
int ret = 0;
if (use_ntsec && allow_ntsec)