diff options
Diffstat (limited to 'winsup/cygwin/security.cc')
-rw-r--r-- | winsup/cygwin/security.cc | 21 |
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) |