# 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](https://github.com/remotefs-rs/remotefs-rs), providing support for the SMB protocol. --- ## Get started ๐Ÿš€ First of all, add `remotefs-smb` to your project dependencies: ```toml 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: ```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 ) | |----------------|----------------|----------------| | 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](https://img.shields.io/badge/Ko--fi-F16061?style=for-the-badge&logo=ko-fi&logoColor=white)](https://ko-fi.com/veeso) [![PayPal](https://img.shields.io/badge/PayPal-00457C?style=for-the-badge&logo=paypal&logoColor=white)](https://www.paypal.me/chrisintin) --- ## 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](CONTRIBUTING.md) --- ## Changelog โณ View remotefs' changelog [HERE](CHANGELOG.md) --- ## Powered by ๐Ÿ’ช remotefs-smb is powered by these aweseome projects: - [pavao](https://github.com/veeso/pavao) --- ## License ๐Ÿ“ƒ remotefs-smb is licensed under the MIT license. You can read the entire license [HERE](LICENSE)