Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2001-08-07 19:09:54 +0400
committerCorinna Vinschen <corinna@vinschen.de>2001-08-07 19:09:54 +0400
commit86fb0393244e5827070e0bb0328a5b40fe5c0268 (patch)
tree8c596fa5f655c6479e1c4bd745cee2522fc35aa6 /winsup/cygwin/security.cc
parentf5e8e2be4a184e8d7f653af19fb62fb576c28d39 (diff)
* dir.cc (mkdir): Set security attributes correctly for
CreateDirectoryA () call if ntsec is on. Don't call set_file_attributes () then. * fhandler.cc (fhandler_base::open): Ditto for CreateFileA () call. * path.cc (symlink): Ditto. * security.cc (set_security_attribute): New function. * security.h: Add declaration for `allow_ntea' and `set_security_attribute'.
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)