diff options
author | Colin Walters <walters@verbum.org> | 2022-05-25 11:33:10 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-25 11:33:10 -0400 |
commit | 2363d3ad981764762c47277942b1e3a709e50d2b (patch) | |
tree | 75e653bac5116d6359eb501cd56e0afdb5e23c5c /src/libostree | |
parent | cdfc2ff5bf3e19250e6b31e4e23c4422e8201ac8 (diff) | |
parent | 248b2936ace89631aba79a90cfe8f81b329d63bf (diff) | |
download | ostree-2363d3ad981764762c47277942b1e3a709e50d2b.tar.gz |
Merge pull request #2605 from saqibali-2k/pr/bls-append
ostree-systroot-deploy: parse bls-append-except-default key
Diffstat (limited to 'src/libostree')
-rw-r--r-- | src/libostree/ostree-sysroot-deploy.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/libostree/ostree-sysroot-deploy.c b/src/libostree/ostree-sysroot-deploy.c index 96cc0753..3a4f8d41 100644 --- a/src/libostree/ostree-sysroot-deploy.c +++ b/src/libostree/ostree-sysroot-deploy.c @@ -2082,6 +2082,50 @@ install_deployment_kernel (OstreeSysroot *sysroot, g_autofree char *options_key = ostree_kernel_args_to_string (kargs); ostree_bootconfig_parser_set (bootconfig, "options", options_key); + g_autoptr(GError) local_error = NULL; + GKeyFile *config = ostree_repo_get_config (repo); + gchar **read_values = g_key_file_get_string_list (config, "sysroot", "bls-append-except-default", NULL, &local_error); + /* We can ignore not found errors */ + if (!read_values) + { + gboolean not_found = g_error_matches (local_error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND) || \ + g_error_matches (local_error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND); + if (not_found) + { + g_clear_error (&local_error); + } + else + { + g_propagate_error (error, g_steal_pointer (&local_error)); + return FALSE; + } + } + + /* Only append to this BLS config if: + * - this is not the default deployment + */ + /* If deployment was prepended, it is the new default */ + gboolean is_new_default = (ostree_deployment_get_index (deployment) == 0); + gboolean allow_append = !is_new_default; + if (allow_append) + { + /* get all key value pairs in bls-append */ + for (char **iter = read_values; iter && *iter; iter++) + { + const char *key_value = *iter; + const char *sep = strchr (key_value, '='); + if (sep == NULL) + { + glnx_throw (error, "bls-append-except-default key must be of the form \"key1=value1;key2=value2...\""); + return FALSE; + } + g_autofree char *key = g_strndup (key_value, sep - key_value); + g_autofree char *value = g_strdup (sep + 1); + ostree_bootconfig_parser_set (bootconfig, key, value); + } + + } + glnx_autofd int bootconf_dfd = -1; if (!glnx_opendirat (sysroot->boot_fd, bootconfdir, TRUE, &bootconf_dfd, error)) return FALSE; |