diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2001-08-07 15:09:54 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2001-08-07 15:09:54 +0000 |
commit | 86fb0393244e5827070e0bb0328a5b40fe5c0268 (patch) | |
tree | 8c596fa5f655c6479e1c4bd745cee2522fc35aa6 /winsup/cygwin/dir.cc | |
parent | f5e8e2be4a184e8d7f653af19fb62fb576c28d39 (diff) | |
download | cygnal-86fb0393244e5827070e0bb0328a5b40fe5c0268.tar.gz cygnal-86fb0393244e5827070e0bb0328a5b40fe5c0268.tar.bz2 cygnal-86fb0393244e5827070e0bb0328a5b40fe5c0268.zip |
* 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.cc | 12 |
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 |