remotefs-smb

Crates.ioremotefs-smb
lib.rsremotefs-smb
version0.3.0
sourcesrc
created_at2022-05-27 14:52:50.712851
updated_at2024-09-30 09:45:38.864058
descriptionremotefs SMB client library
homepagehttps://veeso.github.io/remotefs-rs-smb/
repositoryhttps://github.com/remotefs-rs/remotefs-rs-smb
max_upload_size
id595096
size84,593
Christian Visintin (veeso)

documentation

https://docs.rs/remotefs-smb

README

remotefs SMB

Changelog ยท Get started ยท Documentation

~ Remotefs SMB client ~

Developed by @veeso

Current version: 0.3.0 (30/09/2024)

License-MIT Repo stars Downloads counter Latest version Ko-fi

Linux CI MacOS CI Windows CI Coveralls Docs


About remotefs-smb โ˜๏ธ

remotefs-smb is a client implementation for remotefs, providing support for the SMB protocol.


Get started ๐Ÿš€

First of all, add remotefs-smb to your project dependencies:

remotefs = "0.3"
remotefs-smb = "^0.3"

these features are supported:

  • find: enable find() method on client (enabled by default)
  • no-log: disable logging. By default, this library will log via the log crate.

Install dependencies (UNIX based only)

remotefs-smb relies on pavao, which requires the libsmbclient library, which can be installed with the following instructions:

MacOS ๐ŸŽ

Install samba with brew:

brew install samba

Debian based systems ๐Ÿง

Install libsmbclient with apt:

apt install -y libsmbclient-dev libsmbclient

โš ๏ธ libsmbclient-dev is required only on the machine where you build the application

RedHat based systems ๐Ÿง

Install libsmbclient with dnf:

dnf install libsmbclient-devel libsmbclient

โš ๏ธ libsmbclient-devel is required only on the machine where you build the application

Build from sources ๐Ÿ“

Install libsmbclient building from sources:

wget -O samba.tar.gz https://github.com/samba-team/samba/archive/refs/tags/samba-4.16.1.tar.gz
mkdir -p samba/
tar  xzvf samba.tar.gz -C samba/ --strip-components=1
rm samba.tar.gz
cd samba/
./configure
make
make install
cd ..
rm -rf samba/

Client implementation

UNIX client

// import remotefs trait and client
use remotefs::{RemoteFs, fs::UnixPex};
use remotefs_smb::{SmbFs, SmbOptions, SmbCredentials};
use std::path::Path;
let mut client = SmbFs::try_new(
    SmbCredentials::default()
        .server("smb://localhost:3445")
        .share("/temp")
        .username("test")
        .password("test")
        .workgroup("pavao"),
    SmbOptions::default()
        .case_sensitive(true)
        .one_share_per_server(true),
)
.unwrap();
// connect
assert!(client.connect().is_ok());
// get working directory
println!("Wrkdir: {}", client.pwd().ok().unwrap().display());
// make directory
assert!(client.create_dir(Path::new("/cargo"), UnixPex::from(0o755)).is_ok());
// change working directory
assert!(client.change_dir(Path::new("/cargo")).is_ok());
// disconnect
assert!(client.disconnect().is_ok());

Windows client

// import remotefs trait and client
use remotefs::{RemoteFs, fs::UnixPex};
use remotefs_smb::{SmbFs, SmbCredentials};
use std::path::Path;
let mut client = SmbFs::new(
    SmbCredentials::new("localhost:3445", "temp")
        .username("test")
        .password("test")
);
// connect
assert!(client.connect().is_ok());
// get working directory
println!("Wrkdir: {}", client.pwd().ok().unwrap().display());
// make directory
assert!(client.create_dir(Path::new("\\cargo"), UnixPex::from(0o755)).is_ok());
// change working directory
assert!(client.change_dir(Path::new("\\cargo")).is_ok());
// disconnect
assert!(client.disconnect().is_ok());

Client compatibility table โœ”๏ธ

The following table states the compatibility for the client client and the remote file system trait method.

Note: connect(), disconnect() and is_connected() MUST always be supported, and are so omitted in the table.

Client/Method Support (UNIX) Support (Win )
append_file Yes Yes
append No Yes
change_dir Yes Yes
copy No Yes
create_dir Yes Yes
create_file Yes Yes
create No Yes
exec No No
exists Yes Yes
list_dir Yes Yes
mov Yes Yes
open_file Yes Yes
open No Yes
pwd Yes Yes
remove_dir_all Yes Yes
remove_dir Yes Yes
remove_file Yes Yes
setstat No Yes
stat Yes Yes
symlink Yes Yes

Support the developer โ˜•

If you like remotefs-smb and you're grateful for the work I've done, please consider a little donation ๐Ÿฅณ

You can make a donation with one of these platforms:

ko-fi PayPal


Contributing and issues ๐Ÿค๐Ÿป

Contributions, bug reports, new features, and questions are welcome! ๐Ÿ˜‰ If you have any questions or concerns, or you want to suggest a new feature, or you want just want to improve remotefs, feel free to open an issue or a PR.

Please follow our contributing guidelines


Changelog โณ

View remotefs' changelog HERE


Powered by ๐Ÿ’ช

remotefs-smb is powered by these aweseome projects:


License ๐Ÿ“ƒ

remotefs-smb is licensed under the MIT license.

You can read the entire license HERE

Commit count: 26

cargo fmt