Unverified Commit fa204a65 authored by Christian Brauner's avatar Christian Brauner
Browse files

samples/vfs: add STATMOUNT_MNT_{G,U}IDMAP

parent a496dfec
Loading
Loading
Loading
Loading
+13 −1
Original line number Diff line number Diff line
@@ -42,7 +42,11 @@ struct statmount {
	__u32 opt_array;	/* [str] Array of nul terminated fs options */
	__u32 opt_sec_num;	/* Number of 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 */
};

@@ -158,6 +162,14 @@ struct mnt_ns_info {
#define STATX_MNT_ID_UNIQUE 0x00004000U /* Want/got extended stx_mount_id */
#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
#define MOUNT_ATTR_RDONLY	0x00000001 /* Mount read-only */
#endif
+24 −2
Original line number Diff line number Diff line
@@ -128,14 +128,16 @@ int main(int argc, char *argv[])
					      STATMOUNT_MNT_POINT |
					      STATMOUNT_MNT_NS_ID |
					      STATMOUNT_MNT_OPTS |
					      STATMOUNT_FS_TYPE, 0);
					      STATMOUNT_FS_TYPE |
					      STATMOUNT_MNT_UIDMAP |
					      STATMOUNT_MNT_GIDMAP, 0);
			if (!stmnt) {
				printf("Failed to statmount(%" PRIu64 ") in mount namespace(%" PRIu64 ")\n",
				       (uint64_t)last_mnt_id, (uint64_t)info.mnt_ns_id);
				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_parent_id,
			       (stmnt->mask & STATMOUNT_FS_TYPE)   ? stmnt->str + stmnt->fs_type   : "",
@@ -143,6 +145,26 @@ int main(int argc, char *argv[])
			       (stmnt->mask & STATMOUNT_MNT_POINT) ? stmnt->str + stmnt->mnt_point : "",
			       (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);
		}
	}