Skip to content

Commit b8afea8

Browse files
committed
Release libunftp v0.21.1
- Upgrade major and minor dependencies - Update the changelog - Bump libunftp version to 0.21.1 - README improvements
1 parent 2d9d3eb commit b8afea8

File tree

13 files changed

+70
-43
lines changed

13 files changed

+70
-43
lines changed

CHANGELOG.md

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
# Changelog
22

3-
### libunftp upcoming (unreleased)
3+
### libunftp 0.22.0
44

5+
- Compile against Rust 1.92.0 in CI
6+
- [#547](https://github.com/bolcom/libunftp/pull/547) Put metrics and proxy-protocol functionality behind features (`prometheus` and `proxy_protocol`).
7+
- [#548](https://github.com/bolcom/libunftp/pull/548) Fix error message typos
58
- [#541](https://github.com/bolcom/libunftp/pull/541) Initial MLSD (Machine List Directory) command implementation (RFC 3659)
6-
- [#541](https://github.com/bolcom/libunftp/pull/541)Fix MLST output formatting
7-
- [#541](https://github.com/bolcom/libunftp/pull/541)Fix: MLSx facts must have a terminating semicolon according to RFC 3659 section 7.2
8-
- [#541](https://github.com/bolcom/libunftp/pull/541)Fix wrong use of metadata.uid() instead of metadata.gid()
9+
- [#541](https://github.com/bolcom/libunftp/pull/541) Fix MLST output formatting
10+
- [#541](https://github.com/bolcom/libunftp/pull/541) Fix MLSx facts must have a terminating semicolon according to RFC 3659 section 7.2
11+
- [#541](https://github.com/bolcom/libunftp/pull/541) Fix wrong use of metadata.uid() instead of metadata.gid()
912
- [#540](https://github.com/bolcom/libunftp/pull/540) Fix build with "ring" instead of "aws_lc_rs" feature
1013
- Implement 550 error code for RNFR command
11-
- Bump dependencies (async-trait pinned to =0.1.88)
12-
- [#545](https://github.com/bolcom/libunftp/pull/545) Make Clippy happy
14+
- Bump dependencies
1315

1416
### unftp-sbe-gcs v0.2.8
1517

Cargo.toml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "libunftp"
3-
version = "0.21.0" # remember to update html_root_url
3+
version = "0.21.1" # remember to update html_root_url
44
authors = [
55
"Agoston Horvath <ahorvath@bol.com>",
66
"Dávid Kosztka <dkosztka@bol.com>",
@@ -42,21 +42,21 @@ aws_lc_rs = ["rustls/aws_lc_rs", "rustls/logging", "rustls/std", "rustls/tls12"]
4242
prometheus = ["dep:prometheus"]
4343
proxy_protocol = ["dep:proxy-protocol"]
4444
experimental = []
45-
default = ["aws_lc_rs"]
45+
default = ["aws_lc_rs", "prometheus", "proxy_protocol"]
4646
all = ["aws_lc_rs", "prometheus", "proxy_protocol"]
4747

4848
[dependencies]
4949
async-trait = "=0.1.88"
5050
bitflags = "2.10.0"
5151
bytes = "1.11.0"
5252
chrono = { version = "0.4.42", default-features = false, features = ["clock", "std"] }
53-
derive_more = { version = "2.1.0", features = ["display"] }
53+
derive_more = { version = "2.1.1", features = ["display"] }
5454
futures-util = { version = "0.3.31", default-features = false, features = ["alloc", "sink"] }
5555
getrandom = "0.3.4"
5656
lazy_static = "1.5.0"
5757
md-5 = "0.10.6"
58-
moka = { version = "0.12.11", default-features = false, features = ["sync"] }
59-
nix = { version = "0.29.0", default-features = false, features = ["fs"] }
58+
moka = { version = "0.12.12", default-features = false, features = ["sync"] }
59+
nix = { version = "0.30.1", default-features = false, features = ["fs"] }
6060
prometheus = { version = "0.14.0", default-features = false, optional = true }
6161
proxy-protocol = { version = "0.5.0", optional = true }
6262
rustls = { version = "0.23.35", default-features = false }
@@ -69,12 +69,12 @@ tokio-util = { version = "0.7.17", features = ["codec"] }
6969
tracing = { version = "0.1.44", default-features = false }
7070
tracing-attributes = "0.1.31"
7171
uuid = { version = "1.19.0", features = ["v4"] }
72-
x509-parser = "0.17.0"
72+
x509-parser = "0.18.0"
7373
dashmap = "6.1.0"
7474
libc = "0.2"
7575

7676
[dev-dependencies]
77-
libunftp = { path = ".", features = ["all"] }
77+
libunftp = { path = "." }
7878
pretty_assertions = "1.4.1"
7979
tokio = { version = "1.48.0", features = ["macros", "rt-multi-thread"] }
8080
unftp-sbe-fs = { path = "../libunftp/crates/unftp-sbe-fs" }

README.md

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@ When you need to FTP, but don't want to.
1010

1111
![logo](logo.png)
1212

13-
[**Website**](https://unftp.rs) | [**API Docs**](https://docs.rs/libunftp) | [**unFTP
14-
**](https://github.com/bolcom/unFTP)
13+
[**Website**](https://unftp.rs) | [**API Docs**](https://docs.rs/libunftp) | [**unFTP**](https://github.com/bolcom/unFTP)
1514

1615
The libunftp library drives [unFTP](https://github.com/bolcom/unFTP). It's an extensible, async, cloud orientated FTP(S)
1716
server implementation in [Rust](https://rust-lang.org) brought to you by the [bol.com techlab](https://techlab.bol.com).
@@ -25,27 +24,31 @@ possible.
2524

2625
Feature highlights:
2726

28-
* 39 Supported FTP commands (see [commands directory](./src/server/controlchan/commands)) and growing
27+
* 41 Supported FTP commands (see [commands directory](./src/server/controlchan/commands)) and growing
2928
* Ability to implement own storage back-ends
3029
* Ability to implement own authentication back-ends
3130
* Explicit FTPS (TLS)
3231
* Mutual TLS (Client certificates)
3332
* TLS session resumption
34-
* Prometheus integration
33+
* Prometheus integration (enabled by default, can be disabled)
3534
* Structured Logging
36-
* [Proxy Protocol](https://www.haproxy.com/blog/haproxy/proxy-protocol/) support
35+
* [Proxy Protocol](https://www.haproxy.com/blog/haproxy/proxy-protocol/) support (enabled by default, can be disabled)
3736
* Automatic session timeouts
3837
* Per user IP allow lists
3938
* Configurable cryptographic providers (ring or aws-lc-rs)
4039

4140
Known storage back-ends:
4241

42+
* [unftp-sbe-fatfs](https://crates.io/crates/unftp-sbe-fatfs) - Provides read-only access to FAT filesystem images
4343
* [unftp-sbe-fs](https://crates.io/crates/unftp-sbe-fs) - Stores files on the local filesystem
4444
* [unftp-sbe-gcs](https://crates.io/crates/unftp-sbe-gcs) - Stores files in Google Cloud Storage
45+
* [unftp-sbe-iso](https://crates.io/crates/unftp-sbe-iso) - Provides FTP access to ISO 9660 files
46+
* [unftp-sbe-opendal](https://crates.io/crates/unftp-sbe-opendal) - Provides access to various storage services through Apache OpenDAL (supports S3, Azure Blob Storage, and more)
47+
* [unftp-sbe-restrict](https://crates.io/crates/unftp-sbe-restrict) - Wraps another storage back-end in order to restrict
48+
the FTP operations a user can do i.e. provide authorization.
4549
* [unftp-sbe-rooter](https://crates.io/crates/unftp-sbe-rooter) - Wraps another storage back-end in order to root a user
4650
to a specific home directory.
47-
* [unftp-sbe-restrict](https://crates.io/crates/unftp-sbe-rooter) - Wraps another storage back-end in order to restrict
48-
the FTP operations a user can do i.e. provide authorization.
51+
* [unftp-sbe-webdav](https://crates.io/crates/unftp-sbe-webdav) - A WebDAV storage back-end providing translation between FTP & WebDAV
4952

5053
Known authentication back-ends:
5154

@@ -65,16 +68,38 @@ To use a specific provider, enable the corresponding feature in your `Cargo.toml
6568

6669
```toml
6770
[dependencies]
68-
libunftp = { version = "0.21.0", features = ["ring"] } # Use ring
71+
libunftp = { version = "0.21.1", features = ["ring"] } # Use ring
6972
# or
70-
libunftp = { version = "0.21.0", features = ["aws_lc_rs"] } # Use aws-lc-rs (default)
73+
libunftp = { version = "0.21.1", features = ["aws_lc_rs"] } # Use aws-lc-rs (default)
7174
```
7275

7376
The default provider is `aws-lc-rs` for backward compatibility. Choose the provider that best fits your needs:
7477

7578
- [`ring`](https://crates.io/crates/ring): More widely used, good for general-purpose applications
7679
- [`aws-lc-rs`](https://crates.io/crates/aws-lc-rs): Optimized for AWS environments, good for cloud deployments
7780

81+
## Optional Features
82+
83+
The following feature flags are included in the default features but can be disabled to reduce dependencies:
84+
85+
- `prometheus`: Enables Prometheus metrics integration. When enabled, you can collect metrics about FTP operations, sessions, and transfers using the `.metrics()` method on the server builder. **Enabled by default.**
86+
87+
- `proxy_protocol`: Enables [Proxy Protocol](https://www.haproxy.com/blog/haproxy/proxy-protocol/) support. This allows the server to receive client connection information (IP address and port) when behind a proxy or load balancer. **Enabled by default.**
88+
89+
To disable these features and reduce dependencies, use `default-features = false` and explicitly enable only what you need:
90+
91+
```toml
92+
[dependencies]
93+
libunftp = { version = "0.21.1", default-features = false, features = ["aws_lc_rs"] }
94+
```
95+
96+
Or enable all features explicitly:
97+
98+
```toml
99+
[dependencies]
100+
libunftp = { version = "0.21.1", features = ["all"] }
101+
```
102+
78103
## Prerequisites
79104

80105
You'll need [Rust](https://rust-lang.org) 1.85.0 or higher to build libunftp.
@@ -93,7 +118,7 @@ add. Here we choose the [file system back-end](https://crates.io/crates/unftp-sb
93118

94119
```toml
95120
[dependencies]
96-
libunftp = "0.21.0"
121+
libunftp = "0.21.1"
97122
unftp-sbe-fs = "0.2"
98123
tokio = { version = "1", features = ["full"] }
99124
```

crates/unftp-auth-jsonfile/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ base64 = "0.22.1"
2323
bytes = "1.11.0"
2424
ipnet = "2.11.0"
2525
iprange = "0.6.7"
26-
libunftp = { version = "0.21.0", path = "../../", default-features = false }
26+
libunftp = { version = "0.21.1", path = "../../", default-features = false }
2727
ring = "0.17.14"
2828
serde = { version = "1.0.228", features = ["derive"] }
29-
serde_json = "1.0.145"
29+
serde_json = "1.0.146"
3030
tokio = { version = "1.48.0", features = ["rt", "time"] }
3131
tracing = { version = "0.1.44", default-features = false }
3232
tracing-attributes = "0.1.31"

crates/unftp-auth-pam/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ readme = "README.md"
2020

2121
[dependencies]
2222
async-trait = "=0.1.88"
23-
libunftp = { version = "0.21.0", path = "../../", default-features = false }
23+
libunftp = { version = "0.21.1", path = "../../", default-features = false }
2424
tracing = { version = "0.1.44", default-features = false }
2525
tracing-attributes = "0.1.31"
2626

crates/unftp-auth-rest/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,11 @@ http-body-util = "0.1.3"
2323
hyper = { version = "1.8.1", features = ["client", "http1"] }
2424
hyper-rustls = "0.27.7"
2525
hyper-util = "0.1.19"
26-
libunftp = { version = "0.21.0", path = "../../", default-features = false }
26+
libunftp = { version = "0.21.1", path = "../../", default-features = false }
2727
percent-encoding = "2.3.2"
2828
regex = "1.12.2"
2929
serde = { version = "1.0.228", features = ["derive"] }
30-
serde_json = "1.0.145"
30+
serde_json = "1.0.146"
3131
tokio = { version = "1.48.0", features = ["rt", "net", "sync", "io-util", "time"] }
3232
tracing = { version = "0.1.44", default-features = false }
3333
tracing-attributes = "0.1.31"

crates/unftp-sbe-fs/Cargo.toml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@ default = ["aws_lc_rs"]
2626
[dependencies]
2727
async-trait = "=0.1.88"
2828
cfg-if = "1.0"
29-
cap-std = "3.4"
29+
cap-std = "4.0"
3030
futures = { version = "0.3.31", default-features = false, features = ["std"] }
3131
lazy_static = "1.5.0"
32-
libunftp = { version = "0.21.0", path = "../../", default-features = false }
32+
libunftp = { version = "0.21.1", path = "../../", default-features = false }
3333
path_abs = "0.5.1"
3434
tokio = { version = "1.48.0", features = ["rt", "net", "sync", "io-util", "time", "fs"] }
3535
tokio-stream = "0.1.17"
@@ -41,13 +41,13 @@ async_ftp = "6.0.0"
4141
async-trait = "=0.1.88"
4242
chrono = "0.4.42"
4343
more-asserts = "0.3.1"
44-
nix = { version = "0.29.0", default-features = false, features = ["user"] }
44+
nix = { version = "0.30.1", default-features = false, features = ["user"] }
4545
pretty_assertions = "1.4.1"
4646
pretty_env_logger = "0.5.0"
4747
regex = "1.12.2"
48-
rstest = "0.25.0"
48+
rstest = "0.26.1"
4949
serde = { version = "1.0.228", features = ["derive"] }
50-
serde_json = "1.0.145"
50+
serde_json = "1.0.146"
5151
slog-async = "2.8.0"
5252
slog-term = "2.9.2"
5353
tempfile = "3.23.0"

crates/unftp-sbe-fs/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ Add the libunftp and tokio crates to your project's dependencies in `Cargo.toml`
2121

2222
```toml
2323
[dependencies]
24-
libunftp = "0.21.0"
24+
libunftp = "0.21.1"
2525
unftp-sbe-fs = "0.2.6"
2626
tokio = { version = "1", features = ["full"] }
2727
```

crates/unftp-sbe-gcs/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@ http-body-util = "0.1.3"
2727
hyper = { version = "1.8.1", features = ["client", "http1"] }
2828
hyper-rustls = "0.27.7"
2929
hyper-util = "0.1.19"
30-
libunftp = { version = "0.21.0", path = "../../", default-features = false }
30+
libunftp = { version = "0.21.1", path = "../../", default-features = false }
3131
mime = "0.3.17"
3232
percent-encoding = "2.3.2"
3333
serde = { version = "1.0.228", features = ["derive"] }
34-
serde_json = "1.0.145"
34+
serde_json = "1.0.146"
3535
time = "0.3.44"
3636
tokio = { version = "1.48.0", features = ["rt", "net", "sync", "io-util", "time", "fs"] }
3737
tokio-stream = "0.1.17"

crates/unftp-sbe-gcs/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ Add the needed dependencies to Cargo.toml:
1515

1616
```toml
1717
[dependencies]
18-
libunftp = "0.21.0"
18+
libunftp = "0.21.1"
1919
unftp-sbe-gcs = "0.2.7"
2020
tokio = { version = "1", features = ["full"] }
2121
```

0 commit comments

Comments
 (0)