]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
machine: parse and store extension-release
authorLuca Boccassi <luca.boccassi@microsoft.com>
Wed, 27 Jan 2021 12:59:45 +0000 (12:59 +0000)
committerLuca Boccassi <luca.boccassi@microsoft.com>
Wed, 17 Feb 2021 21:45:31 +0000 (21:45 +0000)
Follow the same pattern as os-release parsing, and store the key-value
pairs in a strv if found

src/shared/discover-image.c
src/shared/discover-image.h

index 1f5e4c6f86b345b211f9bd0600418023a33d48c2..fbce201e297eee79afc51702031e34c1187536da 100644 (file)
@@ -71,6 +71,7 @@ static Image *image_free(Image *i) {
         free(i->hostname);
         strv_free(i->machine_info);
         strv_free(i->os_release);
+        strv_free(i->extension_release);
 
         return mfree(i);
 }
@@ -1129,7 +1130,7 @@ int image_read_metadata(Image *i) {
 
         case IMAGE_SUBVOLUME:
         case IMAGE_DIRECTORY: {
-                _cleanup_strv_free_ char **machine_info = NULL, **os_release = NULL;
+                _cleanup_strv_free_ char **machine_info = NULL, **os_release = NULL, **extension_release = NULL;
                 sd_id128_t machine_id = SD_ID128_NULL;
                 _cleanup_free_ char *hostname = NULL;
                 _cleanup_free_ char *path = NULL;
@@ -1176,10 +1177,15 @@ int image_read_metadata(Image *i) {
                 if (r < 0)
                         log_debug_errno(r, "Failed to read os-release in image, ignoring: %m");
 
+                r = load_extension_release_pairs(i->path, i->name, &extension_release);
+                if (r < 0)
+                        log_debug_errno(r, "Failed to read extension-release in image, ignoring: %m");
+
                 free_and_replace(i->hostname, hostname);
                 i->machine_id = machine_id;
                 strv_free_and_replace(i->machine_info, machine_info);
                 strv_free_and_replace(i->os_release, os_release);
+                strv_free_and_replace(i->extension_release, extension_release);
 
                 break;
         }
@@ -1205,6 +1211,7 @@ int image_read_metadata(Image *i) {
                 i->machine_id = m->machine_id;
                 strv_free_and_replace(i->machine_info, m->machine_info);
                 strv_free_and_replace(i->os_release, m->os_release);
+                strv_free_and_replace(i->extension_release, m->extension_release);
 
                 break;
         }
index a266d4abdb9fa360e8854a3facb606dae03f2f92..af67d167c4988a621afc5778c7222bb8eb2a8ac0 100644 (file)
@@ -50,6 +50,7 @@ typedef struct Image {
         sd_id128_t machine_id;
         char **machine_info;
         char **os_release;
+        char **extension_release;
 
         bool metadata_valid:1;
         bool discoverable:1;  /* true if we know for sure that image_find() would find the image given just the short name */