Fix smb-server xattr: use PathBuf for absolute paths

This commit is contained in:
Warren
2026-06-22 15:39:37 +08:00
parent 5b0086f6f0
commit 0c4459ae66

View File

@@ -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)?