mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-04 20:19:47 +08:00
samples/vfs: add STATMOUNT_MNT_{G,U}IDMAP
Illustrate how to use STATMOUNT_MNT_{G,U}IDMAP. Link: https://lore.kernel.org/r/20250204-work-mnt_idmap-statmount-v2-4-007720f39f2e@kernel.org Reviewed-by: Jeff Layton <jlayton@kernel.org> Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
parent
a496dfecbc
commit
fa204a65f1
@ -42,7 +42,11 @@ struct statmount {
|
|||||||
__u32 opt_array; /* [str] Array of nul terminated fs options */
|
__u32 opt_array; /* [str] Array of nul terminated fs options */
|
||||||
__u32 opt_sec_num; /* Number of security options */
|
__u32 opt_sec_num; /* Number of security options */
|
||||||
__u32 opt_sec_array; /* [str] Array of nul terminated security options */
|
__u32 opt_sec_array; /* [str] Array of nul terminated security options */
|
||||||
__u64 __spare2[46];
|
__u32 mnt_uidmap_num; /* Number of uid mappings */
|
||||||
|
__u32 mnt_uidmap; /* [str] Array of uid mappings */
|
||||||
|
__u32 mnt_gidmap_num; /* Number of gid mappings */
|
||||||
|
__u32 mnt_gidmap; /* [str] Array of gid mappings */
|
||||||
|
__u64 __spare2[44];
|
||||||
char str[]; /* Variable size part containing strings */
|
char str[]; /* Variable size part containing strings */
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -158,6 +162,14 @@ struct mnt_ns_info {
|
|||||||
#define STATX_MNT_ID_UNIQUE 0x00004000U /* Want/got extended stx_mount_id */
|
#define STATX_MNT_ID_UNIQUE 0x00004000U /* Want/got extended stx_mount_id */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef STATMOUNT_MNT_UIDMAP
|
||||||
|
#define STATMOUNT_MNT_UIDMAP 0x00002000U /* Want/got uidmap... */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef STATMOUNT_MNT_GIDMAP
|
||||||
|
#define STATMOUNT_MNT_GIDMAP 0x00004000U /* Want/got gidmap... */
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef MOUNT_ATTR_RDONLY
|
#ifndef MOUNT_ATTR_RDONLY
|
||||||
#define MOUNT_ATTR_RDONLY 0x00000001 /* Mount read-only */
|
#define MOUNT_ATTR_RDONLY 0x00000001 /* Mount read-only */
|
||||||
#endif
|
#endif
|
||||||
|
@ -128,14 +128,16 @@ next:
|
|||||||
STATMOUNT_MNT_POINT |
|
STATMOUNT_MNT_POINT |
|
||||||
STATMOUNT_MNT_NS_ID |
|
STATMOUNT_MNT_NS_ID |
|
||||||
STATMOUNT_MNT_OPTS |
|
STATMOUNT_MNT_OPTS |
|
||||||
STATMOUNT_FS_TYPE, 0);
|
STATMOUNT_FS_TYPE |
|
||||||
|
STATMOUNT_MNT_UIDMAP |
|
||||||
|
STATMOUNT_MNT_GIDMAP, 0);
|
||||||
if (!stmnt) {
|
if (!stmnt) {
|
||||||
printf("Failed to statmount(%" PRIu64 ") in mount namespace(%" PRIu64 ")\n",
|
printf("Failed to statmount(%" PRIu64 ") in mount namespace(%" PRIu64 ")\n",
|
||||||
(uint64_t)last_mnt_id, (uint64_t)info.mnt_ns_id);
|
(uint64_t)last_mnt_id, (uint64_t)info.mnt_ns_id);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("mnt_id:\t\t%" PRIu64 "\nmnt_parent_id:\t%" PRIu64 "\nfs_type:\t%s\nmnt_root:\t%s\nmnt_point:\t%s\nmnt_opts:\t%s\n\n",
|
printf("mnt_id:\t\t%" PRIu64 "\nmnt_parent_id:\t%" PRIu64 "\nfs_type:\t%s\nmnt_root:\t%s\nmnt_point:\t%s\nmnt_opts:\t%s\n",
|
||||||
(uint64_t)stmnt->mnt_id,
|
(uint64_t)stmnt->mnt_id,
|
||||||
(uint64_t)stmnt->mnt_parent_id,
|
(uint64_t)stmnt->mnt_parent_id,
|
||||||
(stmnt->mask & STATMOUNT_FS_TYPE) ? stmnt->str + stmnt->fs_type : "",
|
(stmnt->mask & STATMOUNT_FS_TYPE) ? stmnt->str + stmnt->fs_type : "",
|
||||||
@ -143,6 +145,26 @@ next:
|
|||||||
(stmnt->mask & STATMOUNT_MNT_POINT) ? stmnt->str + stmnt->mnt_point : "",
|
(stmnt->mask & STATMOUNT_MNT_POINT) ? stmnt->str + stmnt->mnt_point : "",
|
||||||
(stmnt->mask & STATMOUNT_MNT_OPTS) ? stmnt->str + stmnt->mnt_opts : "");
|
(stmnt->mask & STATMOUNT_MNT_OPTS) ? stmnt->str + stmnt->mnt_opts : "");
|
||||||
|
|
||||||
|
if (stmnt->mask & STATMOUNT_MNT_UIDMAP) {
|
||||||
|
const char *idmap = stmnt->str + stmnt->mnt_uidmap;
|
||||||
|
|
||||||
|
for (size_t idx = 0; idx < stmnt->mnt_uidmap_num; idx++) {
|
||||||
|
printf("mnt_uidmap[%lu]:\t%s\n", idx, idmap);
|
||||||
|
idmap += strlen(idmap) + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stmnt->mask & STATMOUNT_MNT_GIDMAP) {
|
||||||
|
const char *idmap = stmnt->str + stmnt->mnt_gidmap;
|
||||||
|
|
||||||
|
for (size_t idx = 0; idx < stmnt->mnt_gidmap_num; idx++) {
|
||||||
|
printf("mnt_gidmap[%lu]:\t%s\n", idx, idmap);
|
||||||
|
idmap += strlen(idmap) + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
free(stmnt);
|
free(stmnt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user