image-policy: add support for restricting to specific filesystems
This commit is contained in:
@@ -207,6 +207,20 @@ static PartitionPolicyFlags policy_flag_from_string_one(const char *s) {
|
||||
return PARTITION_POLICY_GROWFS_ON;
|
||||
if (streq(s, "growfs-off"))
|
||||
return PARTITION_POLICY_GROWFS_OFF;
|
||||
if (streq(s, "btrfs"))
|
||||
return PARTITION_POLICY_BTRFS;
|
||||
if (streq(s, "erofs"))
|
||||
return PARTITION_POLICY_EROFS;
|
||||
if (streq(s, "ext4"))
|
||||
return PARTITION_POLICY_EXT4;
|
||||
if (streq(s, "f2fs"))
|
||||
return PARTITION_POLICY_F2FS;
|
||||
if (streq(s, "squashfs"))
|
||||
return PARTITION_POLICY_SQUASHFS;
|
||||
if (streq(s, "vfat"))
|
||||
return PARTITION_POLICY_VFAT;
|
||||
if (streq(s, "xfs"))
|
||||
return PARTITION_POLICY_XFS;
|
||||
|
||||
return _PARTITION_POLICY_FLAGS_INVALID;
|
||||
}
|
||||
@@ -389,7 +403,7 @@ int image_policy_from_string(const char *s, bool graceful, ImagePolicy **ret) {
|
||||
|
||||
int partition_policy_flags_to_string(PartitionPolicyFlags flags, bool simplify, char **ret) {
|
||||
_cleanup_free_ char *buf = NULL;
|
||||
const char *l[CONST_LOG2U(_PARTITION_POLICY_MASK + 1) + 1]; /* one string per known flag at most */
|
||||
const char *l[CONST_LOG2U(_PARTITION_POLICY_MASK + _PARTITION_POLICY_FSTYPE_MASK + 1) + 1]; /* one string per known flag at most */
|
||||
size_t m = 0;
|
||||
|
||||
assert(ret);
|
||||
@@ -449,6 +463,23 @@ int partition_policy_flags_to_string(PartitionPolicyFlags flags, bool simplify,
|
||||
l[m++] = "growfs-on";
|
||||
}
|
||||
|
||||
/* These flags must translate to the literal fstype name of each filesystem, as accepted by
|
||||
* `mount -t`. */
|
||||
if (flags & PARTITION_POLICY_BTRFS)
|
||||
l[m++] = "btrfs";
|
||||
if (flags & PARTITION_POLICY_EROFS)
|
||||
l[m++] = "erofs";
|
||||
if (flags & PARTITION_POLICY_EXT4)
|
||||
l[m++] = "ext4";
|
||||
if (flags & PARTITION_POLICY_F2FS)
|
||||
l[m++] = "f2fs";
|
||||
if (flags & PARTITION_POLICY_SQUASHFS)
|
||||
l[m++] = "squashfs";
|
||||
if (flags & PARTITION_POLICY_VFAT)
|
||||
l[m++] = "vfat";
|
||||
if (flags & PARTITION_POLICY_XFS)
|
||||
l[m++] = "xfs";
|
||||
|
||||
if (m == 0)
|
||||
buf = strdup("-");
|
||||
else {
|
||||
@@ -461,7 +492,7 @@ int partition_policy_flags_to_string(PartitionPolicyFlags flags, bool simplify,
|
||||
return -ENOMEM;
|
||||
|
||||
*ret = TAKE_PTR(buf);
|
||||
return 0;
|
||||
return (int) m;
|
||||
}
|
||||
|
||||
static bool partition_policy_flags_extended_equal(PartitionPolicyFlags a, PartitionPolicyFlags b) {
|
||||
|
||||
@@ -36,6 +36,19 @@ typedef enum PartitionPolicyFlags {
|
||||
|
||||
_PARTITION_POLICY_MASK = _PARTITION_POLICY_USE_MASK|_PARTITION_POLICY_READ_ONLY_MASK|_PARTITION_POLICY_GROWFS_MASK,
|
||||
|
||||
/* Policies can impose filesystem type requirements on images. These flags translate to the literal
|
||||
* fstype name of each filesystem. */
|
||||
PARTITION_POLICY_BTRFS = 1 << 11,
|
||||
PARTITION_POLICY_EROFS = 1 << 12,
|
||||
PARTITION_POLICY_EXT4 = 1 << 13,
|
||||
PARTITION_POLICY_F2FS = 1 << 14,
|
||||
PARTITION_POLICY_SQUASHFS = 1 << 15,
|
||||
PARTITION_POLICY_VFAT = 1 << 16,
|
||||
PARTITION_POLICY_XFS = 1 << 17,
|
||||
_PARTITION_POLICY_FSTYPE_MASK = PARTITION_POLICY_BTRFS|PARTITION_POLICY_EROFS|PARTITION_POLICY_EXT4|
|
||||
PARTITION_POLICY_F2FS|PARTITION_POLICY_SQUASHFS|
|
||||
PARTITION_POLICY_VFAT|PARTITION_POLICY_XFS,
|
||||
|
||||
_PARTITION_POLICY_FLAGS_INVALID = -EINVAL,
|
||||
_PARTITION_POLICY_FLAGS_ERRNO_MAX = -ERRNO_MAX, /* Ensure the whole errno range fits into this enum */
|
||||
} PartitionPolicyFlags;
|
||||
|
||||
Reference in New Issue
Block a user