From db1ff3b932fba5679de5580ffb26fb1949456456 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Wed, 27 Aug 2014 09:39:44 +0000 Subject: * ntea.cc (read_ea): Change left-over return to __leave. Fix condition to close handle. Call NtClose rather than CloseHandle. (write_ea): Fix condition to close handle. Call NtClose rather than CloseHandle. * security.cc (get_file_sd): Call pc.init_reopen_attr if a valid incoming handle was given, pc.get_object_attr otherwise. (set_file_sd): Ditto. --- winsup/cygwin/security.cc | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) (limited to 'winsup/cygwin/security.cc') diff --git a/winsup/cygwin/security.cc b/winsup/cygwin/security.cc index 8cee7e58b..becc3fef6 100644 --- a/winsup/cygwin/security.cc +++ b/winsup/cygwin/security.cc @@ -39,7 +39,7 @@ LONG get_file_sd (HANDLE fh, path_conv &pc, security_descriptor &sd, bool justcreated) { - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; OBJECT_ATTRIBUTES attr; IO_STATUS_BLOCK io; ULONG len = SD_MAXIMUM_SIZE, rlen; @@ -56,20 +56,19 @@ get_file_sd (HANDLE fh, path_conv &pc, security_descriptor &sd, status = NtQuerySecurityObject (fh, ALL_SECURITY_INFORMATION, sd, len, &rlen); if (!NT_SUCCESS (status)) - { - debug_printf ("NtQuerySecurityObject (%S), status %y", - pc.get_nt_native_path (), status); - fh = NULL; - } + debug_printf ("NtQuerySecurityObject (%S), status %y", + pc.get_nt_native_path (), status); } /* If the handle was NULL, or fetching with the original handle didn't work, try to reopen the file with READ_CONTROL and fetch the security descriptor using that handle. */ - if (!fh) + if (!fh || !NT_SUCCESS (status)) { status = NtOpenFile (&fh, READ_CONTROL, - pc.init_reopen_attr (attr, fh), &io, - FILE_SHARE_VALID_FLAGS, FILE_OPEN_FOR_BACKUP_INTENT); + fh ? pc.init_reopen_attr (attr, fh) + : pc.get_object_attr (attr, sec_none_nih), + &io, FILE_SHARE_VALID_FLAGS, + FILE_OPEN_FOR_BACKUP_INTENT); if (!NT_SUCCESS (status)) { sd.free (); @@ -216,7 +215,9 @@ set_file_sd (HANDLE fh, path_conv &pc, security_descriptor &sd, bool is_chown) OBJECT_ATTRIBUTES attr; IO_STATUS_BLOCK io; status = NtOpenFile (&fh, (is_chown ? WRITE_OWNER : 0) | WRITE_DAC, - pc.init_reopen_attr (attr, fh), &io, + fh ? pc.init_reopen_attr (attr, fh) + : pc.get_object_attr (attr, sec_none_nih), + &io, FILE_SHARE_VALID_FLAGS, FILE_OPEN_FOR_BACKUP_INTENT); if (!NT_SUCCESS (status)) -- cgit v1.2.3