summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2016-12-15 17:17:43 +0100
committerLennart Poettering <lennart@poettering.net>2016-12-21 19:09:30 +0100
commitbe30ad41ffd796ba40a5026b4963c17f04cc334d (patch)
tree56f7744a8d8fc0d3cf6bfdcc1223199f5cbfc94a /src
parentgpt-auto-generator: support LUKS encrypted root partitions (diff)
downloadsystemd-be30ad41ffd796ba40a5026b4963c17f04cc334d.tar.xz
systemd-be30ad41ffd796ba40a5026b4963c17f04cc334d.zip
dissect: return the GPT partition UUID, too
This is useful as we can match up the EFI UUID with the one the firmware supposedly used.
Diffstat (limited to 'src')
-rw-r--r--src/dissect/dissect.c3
-rw-r--r--src/shared/dissect-image.c4
-rw-r--r--src/shared/dissect-image.h1
3 files changed, 8 insertions, 0 deletions
diff --git a/src/dissect/dissect.c b/src/dissect/dissect.c
index aa06894037..78ec88fa35 100644
--- a/src/dissect/dissect.c
+++ b/src/dissect/dissect.c
@@ -221,6 +221,9 @@ int main(int argc, char *argv[]) {
p->rw ? "writable" : "read-only",
partition_designator_to_string(i));
+ if (!sd_id128_is_null(p->uuid))
+ printf(" (UUID " SD_ID128_FORMAT_STR ")", SD_ID128_FORMAT_VAL(p->uuid));
+
if (p->fstype)
printf(" of type %s", p->fstype);
diff --git a/src/shared/dissect-image.c b/src/shared/dissect-image.c
index 10d53eab45..5b6e78dd3d 100644
--- a/src/shared/dissect-image.c
+++ b/src/shared/dissect-image.c
@@ -95,6 +95,7 @@ int dissect_image(int fd, const void *root_hash, size_t root_hash_size, DissectI
_cleanup_blkid_free_probe_ blkid_probe b = NULL;
_cleanup_udev_unref_ struct udev *udev = NULL;
_cleanup_free_ char *generic_node = NULL;
+ sd_id128_t generic_uuid = SD_ID128_NULL;
const char *pttype = NULL;
struct udev_list_entry *first, *item;
blkid_partlist pl;
@@ -427,6 +428,7 @@ int dissect_image(int fd, const void *root_hash, size_t root_hash_size, DissectI
else {
generic_nr = nr;
generic_rw = !(pflags & GPT_FLAG_READ_ONLY);
+ generic_uuid = id;
generic_node = strdup(node);
if (!generic_node)
return -ENOMEM;
@@ -457,6 +459,7 @@ int dissect_image(int fd, const void *root_hash, size_t root_hash_size, DissectI
.architecture = architecture,
.node = n,
.fstype = t,
+ .uuid = id,
};
n = t = NULL;
@@ -507,6 +510,7 @@ int dissect_image(int fd, const void *root_hash, size_t root_hash_size, DissectI
.partno = generic_nr,
.architecture = _ARCHITECTURE_INVALID,
.node = generic_node,
+ .uuid = generic_uuid,
};
generic_node = NULL;
diff --git a/src/shared/dissect-image.h b/src/shared/dissect-image.h
index b424dac665..76104e5780 100644
--- a/src/shared/dissect-image.h
+++ b/src/shared/dissect-image.h
@@ -32,6 +32,7 @@ struct DissectedPartition {
bool rw:1;
int partno; /* -1 if there was no partition and the images contains a file system directly */
int architecture; /* Intended architecture: either native, secondary or unset (-1). */
+ sd_id128_t uuid; /* Partition entry UUID as reported by the GPT */
char *fstype;
char *node;
char *decrypted_node;