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();
|
let xattr_name = name.to_string();
|
||||||
|
|
||||||
spawn_blocking(move || {
|
spawn_blocking(move || {
|
||||||
let full_path = root.join(&rel);
|
// Get absolute path using as_std_path()
|
||||||
xattr::get(full_path.as_std_path(), &xattr_name)
|
let full_path = root.as_std_path().join(&rel);
|
||||||
.map_err(|e| SmbError::Io(e.into()))
|
|
||||||
|
// 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
|
.await
|
||||||
.map_err(join_to_io)?
|
.map_err(join_to_io)?
|
||||||
@@ -454,8 +460,8 @@ impl ShareBackend for LocalFsBackend {
|
|||||||
let value = value.to_vec();
|
let value = value.to_vec();
|
||||||
|
|
||||||
spawn_blocking(move || {
|
spawn_blocking(move || {
|
||||||
let full_path = root.join(&rel);
|
let full_path = root.as_std_path().join(&rel);
|
||||||
xattr::set(full_path.as_std_path(), &xattr_name, &value)
|
xattr::set(&full_path, &xattr_name, &value)
|
||||||
.map_err(|e| SmbError::Io(e.into()))
|
.map_err(|e| SmbError::Io(e.into()))
|
||||||
})
|
})
|
||||||
.await
|
.await
|
||||||
@@ -472,8 +478,8 @@ impl ShareBackend for LocalFsBackend {
|
|||||||
let xattr_name = name.to_string();
|
let xattr_name = name.to_string();
|
||||||
|
|
||||||
spawn_blocking(move || {
|
spawn_blocking(move || {
|
||||||
let full_path = root.join(&rel);
|
let full_path = root.as_std_path().join(&rel);
|
||||||
xattr::remove(full_path.as_std_path(), &xattr_name)
|
xattr::remove(&full_path, &xattr_name)
|
||||||
.map_err(|e| SmbError::Io(e.into()))
|
.map_err(|e| SmbError::Io(e.into()))
|
||||||
})
|
})
|
||||||
.await
|
.await
|
||||||
@@ -485,10 +491,16 @@ impl ShareBackend for LocalFsBackend {
|
|||||||
let root = Arc::clone(&self.root);
|
let root = Arc::clone(&self.root);
|
||||||
|
|
||||||
spawn_blocking(move || {
|
spawn_blocking(move || {
|
||||||
let full_path = root.join(&rel);
|
let full_path = root.as_std_path().join(&rel);
|
||||||
xattr::list(full_path.as_std_path())
|
|
||||||
.map(|attrs| attrs.into_iter().map(|s| s.to_string()).collect())
|
// xattr::list returns iterator of OsString
|
||||||
.map_err(|e| SmbError::Io(e.into()))
|
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
|
.await
|
||||||
.map_err(join_to_io)?
|
.map_err(join_to_io)?
|
||||||
|
|||||||
Reference in New Issue
Block a user