From 86fb0393244e5827070e0bb0328a5b40fe5c0268 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Tue, 7 Aug 2001 15:09:54 +0000 Subject: * 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'. --- winsup/cygwin/dir.cc | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'winsup/cygwin/dir.cc') 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 -- cgit v1.2.3