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/dir.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/dir.cc')
-rw-r--r--winsup/cygwin/dir.cc12
1 files changed, 9 insertions, 3 deletions
diff --git a/winsup/cygwin/dir.cc b/winsup/cygwin/dir.cc
index 45fc011b9..022a8d663 100644
--- a/winsup/cygwin/dir.cc
+++ b/winsup/cygwin/dir.cc
@@ -305,6 +305,7 @@ extern "C" int
mkdir (const char *dir, mode_t mode)
{
int res = -1;
+ SECURITY_ATTRIBUTES sa = sec_none_nih;
path_conv real_dir (dir, PC_SYM_NOFOLLOW);
@@ -318,10 +319,15 @@ mkdir (const char *dir, mode_t mode)
if (! writable_directory (real_dir.get_win32 ()))
goto done;
- if (CreateDirectoryA (real_dir.get_win32 (), 0))
+ if (allow_ntsec && real_dir.has_acls ())
+ set_security_attribute (S_IFDIR | ((mode & 0777) & ~cygheap->umask),
+ &sa, alloca (256), 256);
+
+ if (CreateDirectoryA (real_dir.get_win32 (), &sa))
{
- set_file_attribute (real_dir.has_acls (), real_dir.get_win32 (),
- S_IFDIR | ((mode & 0777) & ~cygheap->umask));
+ if (!allow_ntsec && allow_ntea)
+ set_file_attribute (real_dir.has_acls (), real_dir.get_win32 (),
+ S_IFDIR | ((mode & 0777) & ~cygheap->umask));
res = 0;
}
else