From 1c6568fb16bb4f54c71417a07575272b49d66c16 Mon Sep 17 00:00:00 2001 From: Runeville Date: Sat, 29 Aug 2026 15:38:40 +0700 Subject: [PATCH 1/4] add share_access to FileCreateArgs --- crates/smb/src/resource.rs | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/crates/smb/src/resource.rs b/crates/smb/src/resource.rs index 7a1f36e..8dc6a04 100644 --- a/crates/smb/src/resource.rs +++ b/crates/smb/src/resource.rs @@ -37,6 +37,7 @@ pub struct FileCreateArgs { pub attributes: FileAttributes, pub options: CreateOptions, pub desired_access: FileAccessMask, + pub share_access: ShareAccessFlags, } impl FileCreateArgs { @@ -46,6 +47,7 @@ impl FileCreateArgs { attributes: FileAttributes::new(), options: CreateOptions::new(), desired_access: access, + share_access: ShareAccessFlags::new(), } } @@ -57,6 +59,7 @@ impl FileCreateArgs { attributes, options, desired_access: FileAccessMask::new().with_generic_all(true), + share_access: ShareAccessFlags::new(), } } @@ -69,6 +72,7 @@ impl FileCreateArgs { attributes, options, desired_access: FileAccessMask::new().with_generic_all(true), + share_access: ShareAccessFlags::new(), } } @@ -81,6 +85,7 @@ impl FileCreateArgs { desired_access: FileAccessMask::new() .with_generic_read(true) .with_generic_write(true), + share_access: ShareAccessFlags::new(), } } } @@ -102,15 +107,6 @@ impl Resource { share_type: ShareType, is_dfs: bool, ) -> crate::Result { - let share_access = if share_type == ShareType::Disk { - ShareAccessFlags::new() - .with_read(true) - .with_write(true) - .with_delete(true) - } else { - ShareAccessFlags::new() - }; - if share_type == ShareType::Print && create_args.disposition != CreateDisposition::Create { return Err(Error::InvalidArgument( "Printer can only accept CreateDisposition::Create.".to_string(), @@ -129,7 +125,7 @@ impl Resource { impersonation_level: ImpersonationLevel::Impersonation, desired_access: create_args.desired_access, file_attributes: create_args.attributes, - share_access, + share_access: create_args.share_access, create_disposition: create_args.disposition, create_options: create_args.options, name: name.into(), From 0059264e4d81aedae6741dcd28442fe2b695cac1 Mon Sep 17 00:00:00 2001 From: Runeville Date: Sat, 29 Aug 2026 15:44:15 +0700 Subject: [PATCH 2/4] fix --- crates/smb/src/tree.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/crates/smb/src/tree.rs b/crates/smb/src/tree.rs index f86ff12..b300c45 100644 --- a/crates/smb/src/tree.rs +++ b/crates/smb/src/tree.rs @@ -152,6 +152,7 @@ impl Tree { options: CreateOptions::new(), desired_access, attributes: FileAttributes::new(), + share_access: ShareAccessFlags::new(), }, ) .await @@ -172,6 +173,7 @@ impl Tree { options: CreateOptions::new().with_directory_file(true), desired_access, attributes: FileAttributes::new().with_directory(true), + share_access: ShareAccessFlags::new(), }, ) .await From 336f392f99c9b4423eb3786fed5878b399517dec Mon Sep 17 00:00:00 2001 From: Runeville Date: Sat, 29 Aug 2026 15:55:30 +0700 Subject: [PATCH 3/4] fix --- crates/smb/src/tree.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/smb/src/tree.rs b/crates/smb/src/tree.rs index b300c45..bfc558c 100644 --- a/crates/smb/src/tree.rs +++ b/crates/smb/src/tree.rs @@ -8,7 +8,7 @@ use crate::FileCreateArgs; use crate::connection::connection_info::ConnectionInfo; use smb_fscc::{FileAccessMask, FileAttributes}; use smb_msg::{ - CreateOptions, RequestContent, ShareFlags, ShareType, + CreateOptions, RequestContent, ShareAccessFlags, ShareFlags, ShareType, create::CreateDisposition, tree_connect::{TreeConnectRequest, TreeDisconnectRequest}, }; From 79fd11703cf9f4972132effb367cbadec73fcde3 Mon Sep 17 00:00:00 2001 From: Runeville Date: Sat, 29 Aug 2026 16:17:21 +0700 Subject: [PATCH 4/4] fix --- crates/smb/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/smb/src/lib.rs b/crates/smb/src/lib.rs index be14231..e75ff48 100644 --- a/crates/smb/src/lib.rs +++ b/crates/smb/src/lib.rs @@ -42,7 +42,7 @@ pub use tree::{DfsRootTreeRef, Tree}; pub use smb_dtyp::*; pub use smb_fscc::*; -pub use smb_msg::*; +pub use smb_msg::{create::ShareAccessFlags, *}; pub use smb_transport as transport; /// SMB Result type