Compare commits

..

No commits in common. "d10934454435647d3c16f277322c09183adf2e35" and "a613ec77ff50a02858593665429315e49fce9155" have entirely different histories.

4 changed files with 17 additions and 22 deletions

View File

@ -1169,6 +1169,7 @@ auto remote_server::winfsp_create(PWSTR file_name, UINT32 create_options,
utils::unix_error_to_windows((res < 0) ? errno : 0)); utils::unix_error_to_windows((res < 0) ? errno : 0));
} }
fmt::println("{}|{}|{}", file_path, exists, ret);
RAISE_REMOTE_FUSE_SERVER_EVENT(function_name, file_path, ret); RAISE_REMOTE_FUSE_SERVER_EVENT(function_name, file_path, ret);
return ret; return ret;
} }

View File

@ -188,6 +188,8 @@ auto remote_client::winfsp_create(PWSTR file_name, UINT32 create_options,
DECODE_OR_IGNORE(&response, normalized_name); DECODE_OR_IGNORE(&response, normalized_name);
DECODE_OR_IGNORE(&response, exists); DECODE_OR_IGNORE(&response, exists);
fmt::println("{}|{}", exists, ret);
if (exists == 0U) { if (exists == 0U) {
*file_desc = reinterpret_cast<PVOID>(handle); *file_desc = reinterpret_cast<PVOID>(handle);
set_open_info(to_handle(*file_desc), set_open_info(to_handle(*file_desc),

View File

@ -1061,7 +1061,7 @@ auto remote_server::winfsp_get_security_by_name(PWSTR file_name,
auto file_path = utils::string::from_utf8(utils::path::combine( auto file_path = utils::string::from_utf8(utils::path::combine(
mount_location_, {utils::string::to_utf8(file_name)})); mount_location_, {utils::string::to_utf8(file_name)}));
auto ret{STATUS_BUFFER_OVERFLOW}; auto ret = STATUS_BUFFER_OVERFLOW;
if ((descriptor_size == nullptr) || if ((descriptor_size == nullptr) ||
(*descriptor_size <= std::numeric_limits<SIZE_T>::max())) { (*descriptor_size <= std::numeric_limits<SIZE_T>::max())) {
auto *descriptor = descriptor_size == nullptr auto *descriptor = descriptor_size == nullptr

View File

@ -168,32 +168,24 @@ auto remote_winfsp_drive::GetSecurityByName(PWSTR file_name, PUINT32 attributes,
PSECURITY_DESCRIPTOR descriptor, PSECURITY_DESCRIPTOR descriptor,
SIZE_T *descriptor_size) SIZE_T *descriptor_size)
-> NTSTATUS { -> NTSTATUS {
std::uint64_t sds{
(descriptor_size == nullptr) ? 0U : *descriptor_size,
};
std::wstring string_descriptor; std::wstring string_descriptor;
auto ret{ std::uint64_t sds = (descriptor_size == nullptr) ? 0 : *descriptor_size;
remote_instance_->winfsp_get_security_by_name( auto ret = remote_instance_->winfsp_get_security_by_name(
file_name, attributes, descriptor_size ? &sds : nullptr, file_name, attributes, descriptor_size ? &sds : nullptr,
string_descriptor), string_descriptor);
}; *descriptor_size = static_cast<SIZE_T>(sds);
if ((ret == STATUS_SUCCESS) && *descriptor_size) {
if ((ret == STATUS_SUCCESS) && (descriptor_size != nullptr)) { PSECURITY_DESCRIPTOR sd{nullptr};
*descriptor_size = static_cast<SIZE_T>(sds); ULONG sz2{0U};
PSECURITY_DESCRIPTOR desc{nullptr};
ULONG size{0U};
if (::ConvertStringSecurityDescriptorToSecurityDescriptorW( if (::ConvertStringSecurityDescriptorToSecurityDescriptorW(
string_descriptor.data(), SDDL_REVISION_1, &desc, &size)) { string_descriptor.data(), SDDL_REVISION_1, &sd, &sz2)) {
if (size > *descriptor_size) { if (sz2 > *descriptor_size) {
ret = STATUS_BUFFER_TOO_SMALL; ret = STATUS_BUFFER_TOO_SMALL;
} else { } else {
::CopyMemory(descriptor, desc, size); ::CopyMemory(descriptor, sd, sz2);
} }
*descriptor_size = sz2;
*descriptor_size = size; ::LocalFree(sd);
::LocalFree(desc);
} else { } else {
ret = FspNtStatusFromWin32(::GetLastError()); ret = FspNtStatusFromWin32(::GetLastError());
} }