]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
gpt: add helpers for deriving data partition from verity or verity sig designator
authorLennart Poettering <lennart@poettering.net>
Wed, 30 Nov 2022 17:55:40 +0000 (18:55 +0100)
committerLennart Poettering <lennart@poettering.net>
Tue, 6 Dec 2022 15:41:06 +0000 (16:41 +0100)
let's add the inverse of the existing partition_verity_of() and
partition_verity_sig_of()

src/shared/gpt.c
src/shared/gpt.h
src/test/test-gpt.c

index 99795530bd94741fd6277f6788e3758b1d05e96b..3e1a385124dd5de1796bd533e23e187cd79bc738 100644 (file)
@@ -58,6 +58,33 @@ PartitionDesignator partition_verity_sig_of(PartitionDesignator p) {
         }
 }
 
+PartitionDesignator partition_verity_to_data(PartitionDesignator d) {
+        switch (d) {
+
+        case PARTITION_ROOT_VERITY:
+                return PARTITION_ROOT;
+
+        case PARTITION_USR_VERITY:
+                return PARTITION_USR;
+
+        default:
+                return _PARTITION_DESIGNATOR_INVALID;
+        }
+}
+
+PartitionDesignator partition_verity_sig_to_data(PartitionDesignator d) {
+        switch (d) {
+
+        case PARTITION_ROOT_VERITY_SIG:
+                return PARTITION_ROOT;
+
+        case PARTITION_USR_VERITY_SIG:
+                return PARTITION_USR;
+
+        default:
+                return _PARTITION_DESIGNATOR_INVALID;
+        }
+}
 
 static const char *const partition_designator_table[_PARTITION_DESIGNATOR_MAX] = {
         [PARTITION_ROOT]                      = "root",
index 03af12c9e3d0cdd66f6901b113ea660b8b576b2a..bebfbc61167437fb29531c5d3fc10b142ffe384d 100644 (file)
@@ -32,6 +32,8 @@ bool partition_designator_is_versioned(PartitionDesignator d);
 
 PartitionDesignator partition_verity_of(PartitionDesignator p);
 PartitionDesignator partition_verity_sig_of(PartitionDesignator p);
+PartitionDesignator partition_verity_to_data(PartitionDesignator d);
+PartitionDesignator partition_verity_sig_to_data(PartitionDesignator d);
 
 const char* partition_designator_to_string(PartitionDesignator d) _const_;
 PartitionDesignator partition_designator_from_string(const char *name) _pure_;
index 377b79f1556d36cad898eca2e69187df27c0b87e..b8a54055c2b4e5ab65f3ed6c49e74300a18112ba 100644 (file)
@@ -46,4 +46,22 @@ TEST(gpt_types_against_architectures) {
                         }
 }
 
+TEST(verity_mappings) {
+        for (PartitionDesignator p = 0; p < _PARTITION_DESIGNATOR_MAX; p++) {
+                PartitionDesignator q;
+
+                q = partition_verity_of(p);
+                assert_se(q < 0 || partition_verity_to_data(q) == p);
+
+                q = partition_verity_sig_of(p);
+                assert_se(q < 0 || partition_verity_sig_to_data(q) == p);
+
+                q = partition_verity_to_data(p);
+                assert_se(q < 0 || partition_verity_of(q) == p);
+
+                q = partition_verity_sig_to_data(p);
+                assert_se(q < 0 || partition_verity_sig_of(q) == p);
+        }
+}
+
 DEFINE_TEST_MAIN(LOG_INFO);