Fix smb-server xattr: use PathBuf for absolute paths
This commit is contained in:
34
vendor/smb-server/src/fs/local.rs
vendored
34
vendor/smb-server/src/fs/local.rs
vendored
@@ -435,9 +435,15 @@ impl ShareBackend for LocalFsBackend {
|
||||
let xattr_name = name.to_string();
|
||||
|
||||
spawn_blocking(move || {
|
||||
let full_path = root.join(&rel);
|
||||
xattr::get(full_path.as_std_path(), &xattr_name)
|
||||
.map_err(|e| SmbError::Io(e.into()))
|
||||
// Get absolute path using as_std_path()
|
||||
let full_path = root.as_std_path().join(&rel);
|
||||
|
||||
// Use xattr::get which returns Option<Vec<u8>>
|
||||
match xattr::get(&full_path, &xattr_name) {
|
||||
Ok(Some(data)) => Ok(data),
|
||||
Ok(None) => Err(SmbError::NotFound),
|
||||
Err(e) => Err(SmbError::Io(e.into())),
|
||||
}
|
||||
})
|
||||
.await
|
||||
.map_err(join_to_io)?
|
||||
@@ -454,8 +460,8 @@ impl ShareBackend for LocalFsBackend {
|
||||
let value = value.to_vec();
|
||||
|
||||
spawn_blocking(move || {
|
||||
let full_path = root.join(&rel);
|
||||
xattr::set(full_path.as_std_path(), &xattr_name, &value)
|
||||
let full_path = root.as_std_path().join(&rel);
|
||||
xattr::set(&full_path, &xattr_name, &value)
|
||||
.map_err(|e| SmbError::Io(e.into()))
|
||||
})
|
||||
.await
|
||||
@@ -472,8 +478,8 @@ impl ShareBackend for LocalFsBackend {
|
||||
let xattr_name = name.to_string();
|
||||
|
||||
spawn_blocking(move || {
|
||||
let full_path = root.join(&rel);
|
||||
xattr::remove(full_path.as_std_path(), &xattr_name)
|
||||
let full_path = root.as_std_path().join(&rel);
|
||||
xattr::remove(&full_path, &xattr_name)
|
||||
.map_err(|e| SmbError::Io(e.into()))
|
||||
})
|
||||
.await
|
||||
@@ -485,10 +491,16 @@ impl ShareBackend for LocalFsBackend {
|
||||
let root = Arc::clone(&self.root);
|
||||
|
||||
spawn_blocking(move || {
|
||||
let full_path = root.join(&rel);
|
||||
xattr::list(full_path.as_std_path())
|
||||
.map(|attrs| attrs.into_iter().map(|s| s.to_string()).collect())
|
||||
.map_err(|e| SmbError::Io(e.into()))
|
||||
let full_path = root.as_std_path().join(&rel);
|
||||
|
||||
// xattr::list returns iterator of OsString
|
||||
let attrs: Vec<String> = xattr::list(&full_path)
|
||||
.map_err(|e| SmbError::Io(e.into()))?
|
||||
.into_iter()
|
||||
.filter_map(|s| s.into_string().ok())
|
||||
.collect();
|
||||
|
||||
Ok(attrs)
|
||||
})
|
||||
.await
|
||||
.map_err(join_to_io)?
|
||||
|
||||
Reference in New Issue
Block a user