lib/sign: read ed25519 public keys from well known places
If not provided key of file name with keys for remote, then try to use system defaults: - /etc/ostree/trusted.ed25519 - /etc/ostree/trusted.ed25519.d/* - /usr/share/ostree/trusted.ed25519 - /usr/share/ostree/trusted.ed25519.d/* Signed-off-by: Denis Pynkin <denis.pynkin@collabora.com>
This commit is contained in:
parent
073876d9b2
commit
94447617db
|
|
@ -479,39 +479,20 @@ err:
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
static gboolean
|
||||||
ostree_sign_ed25519_load_pk (OstreeSign *self,
|
_load_pk_from_file (OstreeSign *self,
|
||||||
GVariant *options,
|
const gchar *filename,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
g_debug ("%s enter", __FUNCTION__);
|
g_debug ("%s enter", __FUNCTION__);
|
||||||
|
|
||||||
OstreeSignEd25519 *sign = ostree_sign_ed25519_get_instance_private(OSTREE_SIGN_ED25519(self));
|
|
||||||
|
|
||||||
g_autoptr (GFile) keyfile = NULL;
|
g_autoptr (GFile) keyfile = NULL;
|
||||||
g_autoptr (GFileInputStream) key_stream_in = NULL;
|
g_autoptr (GFileInputStream) key_stream_in = NULL;
|
||||||
g_autoptr (GDataInputStream) key_data_in = NULL;
|
g_autoptr (GDataInputStream) key_data_in = NULL;
|
||||||
|
|
||||||
const gchar *filename = NULL;
|
|
||||||
|
|
||||||
/* Clear already loaded keys */
|
|
||||||
if (sign->public_keys != NULL)
|
|
||||||
{
|
|
||||||
g_list_free_full (sign->public_keys, g_object_unref);
|
|
||||||
sign->public_keys = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Read filename or use will-known if not provided */
|
|
||||||
if (! g_variant_lookup (options, "filename", "&s", &filename))
|
|
||||||
{
|
|
||||||
/* TODO: define well-known places to read */
|
|
||||||
/* TODO: scan directories */
|
|
||||||
filename = "/etc/ostree/trusted.ed25519";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!g_file_test (filename, G_FILE_TEST_IS_REGULAR))
|
if (!g_file_test (filename, G_FILE_TEST_IS_REGULAR))
|
||||||
{
|
{
|
||||||
g_debug ("Can't open file '%s' with pulic keys", filename);
|
g_debug ("Can't open file '%s' with public keys", filename);
|
||||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||||
"File object '%s' is not a regular file", filename);
|
"File object '%s' is not a regular file", filename);
|
||||||
goto err;
|
goto err;
|
||||||
|
|
@ -533,3 +514,75 @@ err:
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
ostree_sign_ed25519_load_pk (OstreeSign *self,
|
||||||
|
GVariant *options,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
g_debug ("%s enter", __FUNCTION__);
|
||||||
|
|
||||||
|
gboolean ret = FALSE;
|
||||||
|
|
||||||
|
/* Default paths there to find files with public keys */
|
||||||
|
const gchar *default_dirs[] =
|
||||||
|
{
|
||||||
|
"/etc/ostree/trusted.ed25519.d",
|
||||||
|
DATADIR "/ostree/trusted.ed25519.d"
|
||||||
|
};
|
||||||
|
const gchar *default_files[] =
|
||||||
|
{
|
||||||
|
"/etc/ostree/trusted.ed25519",
|
||||||
|
DATADIR "/ostree/trusted.ed25519"
|
||||||
|
};
|
||||||
|
|
||||||
|
OstreeSignEd25519 *sign = ostree_sign_ed25519_get_instance_private(OSTREE_SIGN_ED25519(self));
|
||||||
|
|
||||||
|
const gchar *filename = NULL;
|
||||||
|
|
||||||
|
/* Clear already loaded keys */
|
||||||
|
if (sign->public_keys != NULL)
|
||||||
|
{
|
||||||
|
g_list_free_full (sign->public_keys, g_object_unref);
|
||||||
|
sign->public_keys = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Read only file provided */
|
||||||
|
if (g_variant_lookup (options, "filename", "&s", &filename))
|
||||||
|
return _load_pk_from_file (self, filename, error);
|
||||||
|
|
||||||
|
/* Scan all well-known files and directories */
|
||||||
|
for (gint i=0; i < G_N_ELEMENTS(default_files); i++)
|
||||||
|
if (!_load_pk_from_file (self, default_files[i], error))
|
||||||
|
{
|
||||||
|
g_debug ("Problem with loading ed25519 public keys from `%s`", default_files[i]);
|
||||||
|
g_clear_error(error);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ret = TRUE;
|
||||||
|
|
||||||
|
/* Scan all well-known files and directories */
|
||||||
|
for (gint i=0; i < G_N_ELEMENTS(default_dirs); i++)
|
||||||
|
{
|
||||||
|
g_autoptr (GDir) dir = g_dir_open (default_dirs[i], 0, error);
|
||||||
|
if (dir == NULL)
|
||||||
|
{
|
||||||
|
g_clear_error (error);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
const gchar *entry = NULL;
|
||||||
|
while ((entry = g_dir_read_name (dir)) != NULL)
|
||||||
|
{
|
||||||
|
filename = g_build_filename (default_dirs[i], entry, NULL);
|
||||||
|
if (!_load_pk_from_file (self, filename, error))
|
||||||
|
{
|
||||||
|
g_debug ("Problem with loading ed25519 public keys from `%s`", filename);
|
||||||
|
g_clear_error(error);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ret = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue