remotefs SMB

Changelog ยท Get started ยท Documentation

~ Remotefs SMB client ~

Developed by @veeso

Current version: 0.2.0 (13/05/2023)

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:

toml remotefs-smb = "^0.2"

these features are supported:

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:

sh brew install samba

Debian based systems ๐Ÿง

Install libsmbclient with apt:

sh 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:

sh 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:

sh 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

rust // 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

rust // 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 ) | |----------------|----------------|----------------| | appendfile | Yes | Yes | | append | No | Yes | | changedir | Yes | Yes | | copy | No | Yes | | createdir | Yes | Yes | | createfile | Yes | Yes | | create | No | Yes | | exec | No | No | | exists | Yes | Yes | | listdir | Yes | Yes | | mov | Yes | Yes | | openfile | Yes | Yes | | open | No | Yes | | pwd | Yes | Yes | | removedirall | Yes | Yes | | removedir | Yes | Yes | | removefile | 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