lib/repo: Search a list of paths in gpgkeypath for gpg keys
This allows specifying gpgpath as list of paths that can point to a file or a directory. If a directory path is given, paths to all regular files in the directory are added to the remote as gpg ascii keys. If the path is not a directory, the file is directly added (whether regular file, empty - errors will be reported later when verifying gpg keys e.g. when pulling). Adding the gpgkeypath property looks like: ostree --repo=repo remote add --set=gpgpath="/path/key1.asc,/path/keys.d" R1 https://example.com/some/remote/ostree/repo Closes #773 Closes: #1773 Approved by: cgwalters
This commit is contained in:
1 parent
244d9a7ec1
commit
05e8c7ef6a
7 files changed
+307
-23
No files matched your search
@@ -101,6 +101,107 @@ ot_keyfile_get_value_with_default (GKeyFile *keyfile,
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Read the value of key as a string. If the value string contains
|
||||
* one of the separators and none of the others, read the
|
||||
* string as a NULL-terminated array out_value. If the value string contains
|
||||
* none of the separators, read the string as a single entry into a
|
||||
* NULL-terminated array out_value. If the value string contains multiple of
|
||||
* the separators, an error is given.
|
||||
* Returns TRUE on success, FALSE on error. */
|
||||
gboolean
|
||||
ot_keyfile_get_string_as_list (GKeyFile *keyfile,
|
||||
const char *section,
|
||||
const char *key,
|
||||
const char *separators,
|
||||
char ***out_value,
|
||||
GError **error)
|
||||
{
|
||||
guint sep_count = 0;
|
||||
gchar sep = '\0';
|
||||
g_autofree char *value_str = NULL;
|
||||
g_autofree char **value_list = NULL;
|
||||
|
||||
g_return_val_if_fail (keyfile != NULL, FALSE);
|
||||
g_return_val_if_fail (section != NULL, FALSE);
|
||||
g_return_val_if_fail (key != NULL, FALSE);
|
||||
g_return_val_if_fail (separators != NULL, FALSE);
|
||||
|
||||
if (!ot_keyfile_get_value_with_default (keyfile, section, key, NULL,
|
||||
&value_str, error))
|
||||
return FALSE;
|
||||
|
||||
if (value_str)
|
||||
{
|
||||
for (size_t i = 0; i < strlen (separators) && sep_count <= 1; i++)
|
||||
{
|
||||
if (strchr (value_str, separators[i]))
|
||||
{
|
||||
sep_count++;
|
||||
sep = separators[i];
|
||||
}
|
||||
}
|
||||
|
||||
if (sep_count == 0)
|
||||
{
|
||||
value_list = g_new (gchar *, 2);
|
||||
value_list[0] = g_steal_pointer (&value_str);
|
||||
value_list[1] = NULL;
|
||||
}
|
||||
else if (sep_count == 1)
|
||||
{
|
||||
if (!ot_keyfile_get_string_list_with_default (keyfile, section, key,
|
||||
sep, NULL, &value_list, error))
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
return glnx_throw (error, "key value list contains more than one separator");
|
||||
}
|
||||
}
|
||||
|
||||
ot_transfer_out_value (out_value, &value_list);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
ot_keyfile_get_string_list_with_default (GKeyFile *keyfile,
|
||||
const char *section,
|
||||
const char *key,
|
||||
char separator,
|
||||
char **default_value,
|
||||
char ***out_value,
|
||||
GError **error)
|
||||
{
|
||||
g_autoptr(GError) temp_error = NULL;
|
||||
|
||||
g_return_val_if_fail (keyfile != NULL, FALSE);
|
||||
g_return_val_if_fail (section != NULL, FALSE);
|
||||
g_return_val_if_fail (key != NULL, FALSE);
|
||||
|
||||
g_key_file_set_list_separator (keyfile, separator);
|
||||
|
||||
g_autofree char **ret_value = g_key_file_get_string_list (keyfile, section,
|
||||
key, NULL, &temp_error);
|
||||
|
||||
if (temp_error)
|
||||
{
|
||||
if (g_error_matches (temp_error, G_KEY_FILE_ERROR,
|
||||
G_KEY_FILE_ERROR_KEY_NOT_FOUND))
|
||||
{
|
||||
g_clear_error (&temp_error);
|
||||
ret_value = default_value;
|
||||
}
|
||||
else
|
||||
{
|
||||
g_propagate_error (error, g_steal_pointer (&temp_error));
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
ot_transfer_out_value (out_value, &ret_value);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
ot_keyfile_copy_group (GKeyFile *source_keyfile,
|
||||
GKeyFile *target_keyfile,
|
||||
|
||||
@@ -44,6 +44,23 @@ ot_keyfile_get_value_with_default (GKeyFile *keyfile,
|
||||
char **out_value,
|
||||
GError **error);
|
||||
|
||||
gboolean
|
||||
ot_keyfile_get_string_as_list (GKeyFile *keyfile,
|
||||
const char *section,
|
||||
const char *key,
|
||||
const char *separators,
|
||||
char ***out_value_list,
|
||||
GError **error);
|
||||
|
||||
gboolean
|
||||
ot_keyfile_get_string_list_with_default (GKeyFile *keyfile,
|
||||
const char *section,
|
||||
const char *key,
|
||||
char separator,
|
||||
char **default_value,
|
||||
char ***out_value,
|
||||
GError **error);
|
||||
|
||||
gboolean
|
||||
ot_keyfile_copy_group (GKeyFile *source_keyfile,
|
||||
GKeyFile *target_keyfile,
|
||||
|
||||
Reference in new issue
Block a user