mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 14:11:52 +00:00
bcachefs: bch2_acl_to_text()
We can now print out acls from bch2_xattr_to_text(), when the xattr contains an acl. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
197763a70b
commit
a9a7bbab14
@ -2,6 +2,7 @@
|
||||
obj-$(CONFIG_BCACHEFS_FS) += bcachefs.o
|
||||
|
||||
bcachefs-y := \
|
||||
acl.o \
|
||||
alloc_background.o \
|
||||
alloc_foreground.o \
|
||||
backpointers.o \
|
||||
@ -81,5 +82,4 @@ bcachefs-y := \
|
||||
varint.o \
|
||||
xattr.o
|
||||
|
||||
bcachefs-$(CONFIG_BCACHEFS_POSIX_ACL) += acl.o
|
||||
obj-$(CONFIG_MEAN_AND_VARIANCE_UNIT_TEST) += mean_and_variance_test.o
|
||||
|
@ -1,18 +1,71 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
#ifdef CONFIG_BCACHEFS_POSIX_ACL
|
||||
|
||||
#include "bcachefs.h"
|
||||
|
||||
#include <linux/fs.h>
|
||||
#include "acl.h"
|
||||
#include "xattr.h"
|
||||
|
||||
#include <linux/posix_acl.h>
|
||||
|
||||
static const char * const acl_types[] = {
|
||||
[ACL_USER_OBJ] = "user_obj",
|
||||
[ACL_USER] = "user",
|
||||
[ACL_GROUP_OBJ] = "group_obj",
|
||||
[ACL_GROUP] = "group",
|
||||
[ACL_MASK] = "mask",
|
||||
[ACL_OTHER] = "other",
|
||||
NULL,
|
||||
};
|
||||
|
||||
void bch2_acl_to_text(struct printbuf *out, const void *value, size_t size)
|
||||
{
|
||||
const void *p, *end = value + size;
|
||||
|
||||
if (!value ||
|
||||
size < sizeof(bch_acl_header) ||
|
||||
((bch_acl_header *)value)->a_version != cpu_to_le32(BCH_ACL_VERSION))
|
||||
return;
|
||||
|
||||
p = value + sizeof(bch_acl_header);
|
||||
while (p < end) {
|
||||
const bch_acl_entry *in = p;
|
||||
unsigned tag = le16_to_cpu(in->e_tag);
|
||||
|
||||
prt_str(out, acl_types[tag]);
|
||||
|
||||
switch (tag) {
|
||||
case ACL_USER_OBJ:
|
||||
case ACL_GROUP_OBJ:
|
||||
case ACL_MASK:
|
||||
case ACL_OTHER:
|
||||
p += sizeof(bch_acl_entry_short);
|
||||
break;
|
||||
case ACL_USER:
|
||||
prt_printf(out, " uid %u", le32_to_cpu(in->e_id));
|
||||
p += sizeof(bch_acl_entry);
|
||||
break;
|
||||
case ACL_GROUP:
|
||||
prt_printf(out, " gid %u", le32_to_cpu(in->e_id));
|
||||
p += sizeof(bch_acl_entry);
|
||||
break;
|
||||
}
|
||||
|
||||
prt_printf(out, " %o", le16_to_cpu(in->e_perm));
|
||||
|
||||
if (p != end)
|
||||
prt_char(out, ' ');
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_BCACHEFS_POSIX_ACL
|
||||
|
||||
#include "fs.h"
|
||||
|
||||
#include <linux/fs.h>
|
||||
#include <linux/posix_acl_xattr.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
#include "acl.h"
|
||||
#include "fs.h"
|
||||
#include "xattr.h"
|
||||
|
||||
static inline size_t bch2_acl_size(unsigned nr_short, unsigned nr_long)
|
||||
{
|
||||
return sizeof(bch_acl_header) +
|
||||
|
@ -7,8 +7,6 @@ struct bch_hash_info;
|
||||
struct bch_inode_info;
|
||||
struct posix_acl;
|
||||
|
||||
#ifdef CONFIG_BCACHEFS_POSIX_ACL
|
||||
|
||||
#define BCH_ACL_VERSION 0x0001
|
||||
|
||||
typedef struct {
|
||||
@ -26,6 +24,10 @@ typedef struct {
|
||||
__le32 a_version;
|
||||
} bch_acl_header;
|
||||
|
||||
void bch2_acl_to_text(struct printbuf *, const void *, size_t);
|
||||
|
||||
#ifdef CONFIG_BCACHEFS_POSIX_ACL
|
||||
|
||||
struct posix_acl *bch2_get_acl(struct mnt_idmap *, struct dentry *, int);
|
||||
|
||||
int bch2_set_acl_trans(struct btree_trans *, subvol_inum,
|
||||
|
@ -1,6 +1,7 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
#include "bcachefs.h"
|
||||
#include "acl.h"
|
||||
#include "bkey_methods.h"
|
||||
#include "btree_update.h"
|
||||
#include "extents.h"
|
||||
@ -130,6 +131,13 @@ void bch2_xattr_to_text(struct printbuf *out, struct bch_fs *c,
|
||||
xattr.v->x_name,
|
||||
le16_to_cpu(xattr.v->x_val_len),
|
||||
(char *) xattr_val(xattr.v));
|
||||
|
||||
if (xattr.v->x_type == KEY_TYPE_XATTR_INDEX_POSIX_ACL_ACCESS ||
|
||||
xattr.v->x_type == KEY_TYPE_XATTR_INDEX_POSIX_ACL_DEFAULT) {
|
||||
prt_char(out, ' ');
|
||||
bch2_acl_to_text(out, xattr_val(xattr.v),
|
||||
le16_to_cpu(xattr.v->x_val_len));
|
||||
}
|
||||
}
|
||||
|
||||
static int bch2_xattr_get_trans(struct btree_trans *trans, struct bch_inode_info *inode,
|
||||
|
Loading…
Reference in New Issue
Block a user