mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-30 16:59:52 +00:00
build(deps): bump libunftp from 0.21.0 to 0.22.0 in the dependencies group across 1 directory (#1756)
Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: houseme <housemecn@gmail.com>
This commit is contained in:
Generated
+17
-23
@@ -4771,9 +4771,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libunftp"
|
name = "libunftp"
|
||||||
version = "0.21.0"
|
version = "0.22.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8270fae0f77279620962f533153fa727a9cf9485dbb79d47eed3086d42b17264"
|
checksum = "3186f219c64999ae9a2900c78ebfaf4a6b4acc3b2bbf5afe5e027e5ca5978593"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"bitflags 2.10.0",
|
"bitflags 2.10.0",
|
||||||
@@ -4787,11 +4787,10 @@ dependencies = [
|
|||||||
"libc",
|
"libc",
|
||||||
"md-5 0.10.6",
|
"md-5 0.10.6",
|
||||||
"moka",
|
"moka",
|
||||||
"nix 0.29.0",
|
"nix 0.30.1",
|
||||||
"prometheus",
|
"prometheus",
|
||||||
"proxy-protocol",
|
"proxy-protocol",
|
||||||
"rustls",
|
"rustls",
|
||||||
"rustls-pemfile",
|
|
||||||
"slog",
|
"slog",
|
||||||
"slog-stdlog",
|
"slog-stdlog",
|
||||||
"thiserror 2.0.18",
|
"thiserror 2.0.18",
|
||||||
@@ -4801,7 +4800,7 @@ dependencies = [
|
|||||||
"tracing",
|
"tracing",
|
||||||
"tracing-attributes",
|
"tracing-attributes",
|
||||||
"uuid",
|
"uuid",
|
||||||
"x509-parser 0.17.0",
|
"x509-parser",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -5141,6 +5140,18 @@ dependencies = [
|
|||||||
"memoffset",
|
"memoffset",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "nix"
|
||||||
|
version = "0.30.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags 2.10.0",
|
||||||
|
"cfg-if",
|
||||||
|
"cfg_aliases",
|
||||||
|
"libc",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nom"
|
name = "nom"
|
||||||
version = "7.1.3"
|
version = "7.1.3"
|
||||||
@@ -6421,7 +6432,7 @@ dependencies = [
|
|||||||
"ring",
|
"ring",
|
||||||
"rustls-pki-types",
|
"rustls-pki-types",
|
||||||
"time",
|
"time",
|
||||||
"x509-parser 0.18.1",
|
"x509-parser",
|
||||||
"yasna",
|
"yasna",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -10278,23 +10289,6 @@ version = "0.6.2"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9"
|
checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "x509-parser"
|
|
||||||
version = "0.17.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "4569f339c0c402346d4a75a9e39cf8dad310e287eef1ff56d4c68e5067f53460"
|
|
||||||
dependencies = [
|
|
||||||
"asn1-rs",
|
|
||||||
"data-encoding",
|
|
||||||
"der-parser",
|
|
||||||
"lazy_static",
|
|
||||||
"nom 7.1.3",
|
|
||||||
"oid-registry",
|
|
||||||
"rusticata-macros",
|
|
||||||
"thiserror 2.0.18",
|
|
||||||
"time",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "x509-parser"
|
name = "x509-parser"
|
||||||
version = "0.18.1"
|
version = "0.18.1"
|
||||||
|
|||||||
+1
-1
@@ -274,7 +274,7 @@ opentelemetry-semantic-conventions = { version = "0.31.0", features = ["semconv_
|
|||||||
opentelemetry-stdout = { version = "0.31.0" }
|
opentelemetry-stdout = { version = "0.31.0" }
|
||||||
|
|
||||||
# FTP and SFTP
|
# FTP and SFTP
|
||||||
libunftp = { version = "0.21.0", features = ["experimental"] }
|
libunftp = { version = "0.22.0", features = ["experimental"] }
|
||||||
suppaftp = { version = "8.0.1", features = ["tokio", "tokio-rustls-aws-lc-rs"] }
|
suppaftp = { version = "8.0.1", features = ["tokio", "tokio-rustls-aws-lc-rs"] }
|
||||||
rcgen = "0.14.7"
|
rcgen = "0.14.7"
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ use super::driver::FtpsDriver;
|
|||||||
use crate::common::client::s3::StorageBackend;
|
use crate::common::client::s3::StorageBackend;
|
||||||
use crate::common::session::{Protocol, ProtocolPrincipal, SessionContext};
|
use crate::common::session::{Protocol, ProtocolPrincipal, SessionContext};
|
||||||
use crate::constants::{network::DEFAULT_SOURCE_IP, paths::ROOT_PATH};
|
use crate::constants::{network::DEFAULT_SOURCE_IP, paths::ROOT_PATH};
|
||||||
use libunftp::auth::{AuthenticationError, UserDetail};
|
use libunftp::auth::{AuthenticationError, Authenticator, Principal, UserDetail, UserDetailError, UserDetailProvider};
|
||||||
use libunftp::options::FtpsRequired;
|
use libunftp::options::FtpsRequired;
|
||||||
use std::fmt::{Debug, Display, Formatter};
|
use std::fmt::{Debug, Display, Formatter};
|
||||||
use std::net::IpAddr;
|
use std::net::IpAddr;
|
||||||
@@ -78,10 +78,11 @@ where
|
|||||||
info!("Initializing FTPS server on {}", self.config.bind_addr);
|
info!("Initializing FTPS server on {}", self.config.bind_addr);
|
||||||
|
|
||||||
let storage_clone = self.storage.clone();
|
let storage_clone = self.storage.clone();
|
||||||
let mut server_builder = libunftp::ServerBuilder::with_authenticator(
|
let mut server_builder = libunftp::ServerBuilder::with_user_detail_provider(
|
||||||
Box::new(move || FtpsDriver::new(storage_clone.clone())),
|
Box::new(move || FtpsDriver::new(storage_clone.clone())),
|
||||||
Arc::new(FtpsAuthenticator::new()),
|
Arc::new(FtpsUserDetailProvider),
|
||||||
);
|
)
|
||||||
|
.authenticator(Arc::new(FtpsAuthenticator::new()));
|
||||||
|
|
||||||
// Configure passive ports for data connections
|
// Configure passive ports for data connections
|
||||||
if let Some(passive_ports) = &self.config.passive_ports {
|
if let Some(passive_ports) = &self.config.passive_ports {
|
||||||
@@ -195,6 +196,49 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// FTPS user detail provider implementation
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct FtpsUserDetailProvider;
|
||||||
|
|
||||||
|
#[async_trait::async_trait]
|
||||||
|
impl UserDetailProvider for FtpsUserDetailProvider {
|
||||||
|
type User = FtpsUser;
|
||||||
|
|
||||||
|
async fn provide_user_detail(&self, principal: &Principal) -> Result<Self::User, UserDetailError> {
|
||||||
|
use rustfs_iam::get;
|
||||||
|
|
||||||
|
// Access IAM system
|
||||||
|
let iam_sys = get().map_err(|e| {
|
||||||
|
error!("IAM system unavailable during FTPS user detail fetch: {}", e);
|
||||||
|
UserDetailError::ImplPropagated("Internal authentication service unavailable".to_string(), Some(Box::new(e)))
|
||||||
|
})?;
|
||||||
|
|
||||||
|
let (user_identity, _is_valid) = iam_sys.check_key(&principal.username).await.map_err(|e| {
|
||||||
|
error!("IAM check_key failed for {}: {}", principal.username, e);
|
||||||
|
UserDetailError::ImplPropagated("Authentication verification failed".to_string(), Some(Box::new(e)))
|
||||||
|
})?;
|
||||||
|
|
||||||
|
let identity = user_identity.ok_or_else(|| {
|
||||||
|
error!("User identity missing for {}", principal.username);
|
||||||
|
UserDetailError::UserNotFound {
|
||||||
|
username: principal.username.clone(),
|
||||||
|
}
|
||||||
|
})?;
|
||||||
|
|
||||||
|
let source_ip: IpAddr = DEFAULT_SOURCE_IP.parse().unwrap();
|
||||||
|
|
||||||
|
let session_context = SessionContext::new(ProtocolPrincipal::new(Arc::new(identity.clone())), Protocol::Ftps, source_ip);
|
||||||
|
|
||||||
|
let ftps_user = FtpsUser {
|
||||||
|
username: principal.username.clone(),
|
||||||
|
name: identity.credentials.name.clone(),
|
||||||
|
session_context,
|
||||||
|
};
|
||||||
|
|
||||||
|
Ok(ftps_user)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// FTPS authenticator implementation
|
/// FTPS authenticator implementation
|
||||||
#[derive(Debug, Default)]
|
#[derive(Debug, Default)]
|
||||||
pub struct FtpsAuthenticator;
|
pub struct FtpsAuthenticator;
|
||||||
@@ -207,9 +251,9 @@ impl FtpsAuthenticator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[async_trait::async_trait]
|
#[async_trait::async_trait]
|
||||||
impl libunftp::auth::Authenticator<FtpsUser> for FtpsAuthenticator {
|
impl Authenticator for FtpsAuthenticator {
|
||||||
/// Authenticate FTP user against RustFS IAM system
|
/// Authenticate FTP user against RustFS IAM system
|
||||||
async fn authenticate(&self, username: &str, creds: &libunftp::auth::Credentials) -> Result<FtpsUser, AuthenticationError> {
|
async fn authenticate(&self, username: &str, creds: &libunftp::auth::Credentials) -> Result<Principal, AuthenticationError> {
|
||||||
use rustfs_credentials::Credentials as S3Credentials;
|
use rustfs_credentials::Credentials as S3Credentials;
|
||||||
use rustfs_iam::get;
|
use rustfs_iam::get;
|
||||||
|
|
||||||
@@ -252,17 +296,9 @@ impl libunftp::auth::Authenticator<FtpsUser> for FtpsAuthenticator {
|
|||||||
return Err(AuthenticationError::BadPassword);
|
return Err(AuthenticationError::BadPassword);
|
||||||
}
|
}
|
||||||
|
|
||||||
let source_ip: IpAddr = DEFAULT_SOURCE_IP.parse().unwrap();
|
|
||||||
|
|
||||||
let session_context = SessionContext::new(ProtocolPrincipal::new(Arc::new(identity.clone())), Protocol::Ftps, source_ip);
|
|
||||||
|
|
||||||
let ftps_user = FtpsUser {
|
|
||||||
username: username.to_string(),
|
|
||||||
name: identity.credentials.name.clone(),
|
|
||||||
session_context,
|
|
||||||
};
|
|
||||||
|
|
||||||
info!("FTPS user '{}' authenticated successfully", username);
|
info!("FTPS user '{}' authenticated successfully", username);
|
||||||
Ok(ftps_user)
|
Ok(Principal {
|
||||||
|
username: username.to_string(),
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user