forked from p15670423/monkey
island: Return a fd instead of PyHandle during windows file creation
Fixes #1252
This commit is contained in:
parent
d3d34fe2d6
commit
b39440e871
|
@ -79,8 +79,7 @@ def _get_file_descriptor_for_new_secure_file_linux(path: str) -> int:
|
||||||
def _get_file_descriptor_for_new_secure_file_windows(path: str) -> int:
|
def _get_file_descriptor_for_new_secure_file_windows(path: str) -> int:
|
||||||
try:
|
try:
|
||||||
file_access = win32file.GENERIC_READ | win32file.GENERIC_WRITE
|
file_access = win32file.GENERIC_READ | win32file.GENERIC_WRITE
|
||||||
# subsequent open operations on the object will succeed only if read access is requested
|
file_sharing = win32file.FILE_SHARE_READ | win32file.FILE_SHARE_WRITE
|
||||||
file_sharing = win32file.FILE_SHARE_READ
|
|
||||||
security_attributes = win32security.SECURITY_ATTRIBUTES()
|
security_attributes = win32security.SECURITY_ATTRIBUTES()
|
||||||
security_attributes.SECURITY_DESCRIPTOR = (
|
security_attributes.SECURITY_DESCRIPTOR = (
|
||||||
windows_permissions.get_security_descriptor_for_owner_only_perms()
|
windows_permissions.get_security_descriptor_for_owner_only_perms()
|
||||||
|
@ -88,7 +87,7 @@ def _get_file_descriptor_for_new_secure_file_windows(path: str) -> int:
|
||||||
file_creation = win32file.CREATE_NEW # fails if file exists
|
file_creation = win32file.CREATE_NEW # fails if file exists
|
||||||
file_attributes = win32file.FILE_FLAG_BACKUP_SEMANTICS
|
file_attributes = win32file.FILE_FLAG_BACKUP_SEMANTICS
|
||||||
|
|
||||||
fd = win32file.CreateFile(
|
handle = win32file.CreateFile(
|
||||||
path,
|
path,
|
||||||
file_access,
|
file_access,
|
||||||
file_sharing,
|
file_sharing,
|
||||||
|
@ -98,7 +97,9 @@ def _get_file_descriptor_for_new_secure_file_windows(path: str) -> int:
|
||||||
_get_null_value_for_win32(),
|
_get_null_value_for_win32(),
|
||||||
)
|
)
|
||||||
|
|
||||||
return fd
|
detached_handle = handle.Detach()
|
||||||
|
|
||||||
|
return win32file._open_osfhandle(detached_handle, os.O_RDWR)
|
||||||
|
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
LOG.error(f'Could not create a file at "{path}": {str(ex)}')
|
LOG.error(f'Could not create a file at "{path}": {str(ex)}')
|
||||||
|
|
|
@ -12,7 +12,6 @@ from monkey_island.cc.server_utils.file_utils import (
|
||||||
|
|
||||||
if is_windows_os():
|
if is_windows_os():
|
||||||
import win32api
|
import win32api
|
||||||
import win32file
|
|
||||||
import win32security
|
import win32security
|
||||||
|
|
||||||
FULL_CONTROL = 2032127
|
FULL_CONTROL = 2032127
|
||||||
|
@ -125,7 +124,7 @@ def test_get_file_descriptor_for_new_secure_file__perm_linux(test_path):
|
||||||
|
|
||||||
@pytest.mark.skipif(not is_windows_os(), reason="Tests Windows (not Posix) permissions.")
|
@pytest.mark.skipif(not is_windows_os(), reason="Tests Windows (not Posix) permissions.")
|
||||||
def test_get_file_descriptor_for_new_secure_file__perm_windows(test_path):
|
def test_get_file_descriptor_for_new_secure_file__perm_windows(test_path):
|
||||||
win32file.CloseHandle(get_file_descriptor_for_new_secure_file(test_path))
|
os.close(get_file_descriptor_for_new_secure_file(test_path))
|
||||||
|
|
||||||
acl, user_sid = _get_acl_and_sid_from_path(test_path)
|
acl, user_sid = _get_acl_and_sid_from_path(test_path)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue