pxar: fcaps in fuse
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
This commit is contained in:
parent
ec8f042459
commit
cf1bd08131
|
@ -26,6 +26,8 @@ use pxar::accessor::{self, EntryRangeInfo, ReadAt};
|
||||||
use proxmox_fuse::requests::{self, FuseRequest};
|
use proxmox_fuse::requests::{self, FuseRequest};
|
||||||
use proxmox_fuse::{EntryParam, Fuse, ReplyBufState, Request, ROOT_ID};
|
use proxmox_fuse::{EntryParam, Fuse, ReplyBufState, Request, ROOT_ID};
|
||||||
|
|
||||||
|
use crate::tools::xattr;
|
||||||
|
|
||||||
/// We mark inodes for regular files this way so we know how to access them.
|
/// We mark inodes for regular files this way so we know how to access them.
|
||||||
const NON_DIRECTORY_INODE: u64 = 1u64 << 63;
|
const NON_DIRECTORY_INODE: u64 = 1u64 << 63;
|
||||||
|
|
||||||
|
@ -594,18 +596,29 @@ impl SessionImpl {
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn listxattrs(&self, inode: u64) -> Result<Vec<pxar::format::XAttr>, Error> {
|
async fn listxattrs(&self, inode: u64) -> Result<Vec<pxar::format::XAttr>, Error> {
|
||||||
// FIXME: Special cases:
|
|
||||||
// b"security.capability
|
|
||||||
// b"system.posix_acl_access
|
|
||||||
// b"system.posix_acl_default
|
|
||||||
|
|
||||||
let lookup = self.get_lookup(inode)?;
|
let lookup = self.get_lookup(inode)?;
|
||||||
Ok(self
|
let metadata = self
|
||||||
.open_entry(&lookup)
|
.open_entry(&lookup)
|
||||||
.await?
|
.await?
|
||||||
.into_entry()
|
.into_entry()
|
||||||
.into_metadata()
|
.into_metadata();
|
||||||
.xattrs)
|
|
||||||
|
let mut xattrs = metadata.xattrs;
|
||||||
|
|
||||||
|
use pxar::format::XAttr;
|
||||||
|
|
||||||
|
if let Some(fcaps) = metadata.fcaps {
|
||||||
|
xattrs.push(XAttr::new(xattr::xattr_name_fcaps().to_bytes(), fcaps.data));
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Special cases:
|
||||||
|
// b"system.posix_acl_access
|
||||||
|
// b"system.posix_acl_default
|
||||||
|
//
|
||||||
|
// For these we need to be able to create posix acl format entries, at that point we could
|
||||||
|
// just ditch libacl as well...
|
||||||
|
|
||||||
|
Ok(xattrs)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn listxattrs_into(
|
async fn listxattrs_into(
|
||||||
|
@ -627,12 +640,6 @@ impl SessionImpl {
|
||||||
async fn getxattr(&self, inode: u64, xattr: &OsStr) -> Result<pxar::format::XAttr, Error> {
|
async fn getxattr(&self, inode: u64, xattr: &OsStr) -> Result<pxar::format::XAttr, Error> {
|
||||||
// TODO: pxar::Accessor could probably get a more optimized method to fetch a specific
|
// TODO: pxar::Accessor could probably get a more optimized method to fetch a specific
|
||||||
// xattr for an entry...
|
// xattr for an entry...
|
||||||
|
|
||||||
// FIXME: Special cases:
|
|
||||||
// b"security.capability
|
|
||||||
// b"system.posix_acl_access
|
|
||||||
// b"system.posix_acl_default
|
|
||||||
|
|
||||||
let xattrs = self.listxattrs(inode).await?;
|
let xattrs = self.listxattrs(inode).await?;
|
||||||
for entry in xattrs {
|
for entry in xattrs {
|
||||||
if entry.name().to_bytes() == xattr.as_bytes() {
|
if entry.name().to_bytes() == xattr.as_bytes() {
|
||||||
|
|
Loading…
Reference in New Issue