Add a FirmwareBaseURI parameter to the remote configs

This allows somebody to mirror the CDN without resigning the metadata files.

Fixes: https://github.com/hughsie/fwupd/issues/186
This commit is contained in:
Richard Hughes 2017-08-22 10:22:20 +01:00
parent 0dea1efb92
commit c6afb51e32
7 changed files with 229 additions and 37 deletions

View File

@ -0,0 +1,6 @@
[fwupd Remote]
Enabled=true
Type=download
Keyring=gpg
MetadataURI=https://s3.amazonaws.com/lvfsbucket/downloads/firmware.xml.gz
FirmwareBaseURI=https://my.fancy.cdn/

View File

@ -32,7 +32,9 @@ struct _FwupdRemote
FwupdRemoteKind kind; FwupdRemoteKind kind;
FwupdKeyringKind keyring_kind; FwupdKeyringKind keyring_kind;
gchar *id; gchar *id;
gchar *firmware_base_uri;
gchar *metadata_uri; gchar *metadata_uri;
gchar *metadata_uri_sig;
gchar *username; gchar *username;
gchar *password; gchar *password;
gchar *filename; gchar *filename;
@ -135,13 +137,20 @@ fwupd_remote_set_metadata_uri (FwupdRemote *self, const gchar *metadata_uri)
/* generate the signature URI too */ /* generate the signature URI too */
suffix = fwupd_remote_get_suffix_for_keyring_kind (self->keyring_kind); suffix = fwupd_remote_get_suffix_for_keyring_kind (self->keyring_kind);
if (suffix != NULL) { if (suffix != NULL) {
g_autofree gchar *url_asc = g_strconcat (metadata_uri, suffix, NULL); self->metadata_uri_sig = g_strconcat (metadata_uri, suffix, NULL);
self->uri_asc = fwupd_remote_build_uri (self, url_asc, NULL); self->uri_asc = fwupd_remote_build_uri (self, self->metadata_uri_sig, NULL);
basename_asc = g_path_get_basename (soup_uri_get_path (self->uri_asc)); basename_asc = g_path_get_basename (soup_uri_get_path (self->uri_asc));
self->filename_asc = g_strdup_printf ("%s-%s", self->id, basename_asc); self->filename_asc = g_strdup_printf ("%s-%s", self->id, basename_asc);
} }
} }
/* note, this has to be set after MetadataURI */
static void
fwupd_remote_set_firmware_base_uri (FwupdRemote *self, const gchar *firmware_base_uri)
{
self->firmware_base_uri = g_strdup (firmware_base_uri);
}
/** /**
* fwupd_remote_kind_from_string: * fwupd_remote_kind_from_string:
* @kind: a string, e.g. "download" * @kind: a string, e.g. "download"
@ -222,6 +231,7 @@ fwupd_remote_load_from_filename (FwupdRemote *self,
GError **error) GError **error)
{ {
const gchar *group = "fwupd Remote"; const gchar *group = "fwupd Remote";
g_autofree gchar *firmware_base_uri = NULL;
g_autofree gchar *id = NULL; g_autofree gchar *id = NULL;
g_autofree gchar *keyring_kind = NULL; g_autofree gchar *keyring_kind = NULL;
g_autofree gchar *metadata_uri = NULL; g_autofree gchar *metadata_uri = NULL;
@ -326,6 +336,11 @@ fwupd_remote_load_from_filename (FwupdRemote *self,
fwupd_remote_set_filename_cache (self, filename_cache); fwupd_remote_set_filename_cache (self, filename_cache);
} }
/* the base URI is optional */
firmware_base_uri = g_key_file_get_string (kf, group, "FirmwareBaseURI", NULL);
if (firmware_base_uri != NULL)
fwupd_remote_set_firmware_base_uri (self, firmware_base_uri);
/* dep logic */ /* dep logic */
order_before = g_key_file_get_string (kf, group, "OrderBefore", NULL); order_before = g_key_file_get_string (kf, group, "OrderBefore", NULL);
if (order_before != NULL) if (order_before != NULL)
@ -510,7 +525,8 @@ fwupd_remote_get_filename_asc (FwupdRemote *self)
* @url: the URL to use * @url: the URL to use
* @error: the #GError, or %NULL * @error: the #GError, or %NULL
* *
* Builds a URI for the URL using the username and password set for the remote. * Builds a URI for the URL using the username and password set for the remote,
* including any basename URI substitution.
* *
* Returns: (transfer full): a #SoupURI, or %NULL for error * Returns: (transfer full): a #SoupURI, or %NULL for error
* *
@ -525,14 +541,38 @@ fwupd_remote_build_uri (FwupdRemote *self, const gchar *url, GError **error)
g_return_val_if_fail (url != NULL, NULL); g_return_val_if_fail (url != NULL, NULL);
g_return_val_if_fail (error == NULL || *error == NULL, NULL); g_return_val_if_fail (error == NULL || *error == NULL, NULL);
/* create URI */ /* create URI, substituting if required */
uri = soup_uri_new (url); if (self->firmware_base_uri != NULL) {
if (uri == NULL) { g_autoptr(SoupURI) uri_tmp = NULL;
g_set_error (error, g_autofree gchar *basename = NULL;
FWUPD_ERROR, g_autofree gchar *url2 = NULL;
FWUPD_ERROR_INVALID_FILE, uri_tmp = soup_uri_new (url);
"Failed to parse URI '%s'", url); if (uri_tmp == NULL) {
return NULL; g_set_error (error,
FWUPD_ERROR,
FWUPD_ERROR_INVALID_FILE,
"Failed to parse URI '%s'", url);
return NULL;
}
basename = g_path_get_basename (soup_uri_get_path (uri_tmp));
url2 = g_build_filename (self->firmware_base_uri, basename, NULL);
uri = soup_uri_new (url2);
if (uri == NULL) {
g_set_error (error,
FWUPD_ERROR,
FWUPD_ERROR_INVALID_FILE,
"Failed to parse URI '%s'", url2);
return NULL;
}
} else {
uri = soup_uri_new (url);
if (uri == NULL) {
g_set_error (error,
FWUPD_ERROR,
FWUPD_ERROR_INVALID_FILE,
"Failed to parse URI '%s'", url);
return NULL;
}
} }
/* set the username and password from the metadata URI */ /* set the username and password from the metadata URI */
@ -543,6 +583,28 @@ fwupd_remote_build_uri (FwupdRemote *self, const gchar *url, GError **error)
return uri; return uri;
} }
/**
* fwupd_remote_build_firmware_uri:
* @self: A #FwupdRemote
* @url: the URL to use
* @error: the #GError, or %NULL
*
* Builds a URI for the URL using the username and password set for the remote,
* including any basename URI substitution.
*
* Returns: (transfer full): a URI, or %NULL for error
*
* Since: 0.9.7
**/
gchar *
fwupd_remote_build_firmware_uri (FwupdRemote *self, const gchar *url, GError **error)
{
g_autoptr(SoupURI) uri = fwupd_remote_build_uri (self, url, error);
if (uri == NULL)
return NULL;
return soup_uri_to_string (uri, FALSE);
}
/** /**
* fwupd_remote_get_uri: * fwupd_remote_get_uri:
* @self: A #FwupdRemote * @self: A #FwupdRemote
@ -577,6 +639,57 @@ fwupd_remote_get_uri_asc (FwupdRemote *self)
return self->uri_asc; return self->uri_asc;
} }
/**
* fwupd_remote_get_metadata_uri:
* @self: A #FwupdRemote
*
* Gets the URI for the remote metadata.
*
* Returns: (transfer none): a URI, or %NULL for invalid.
*
* Since: 0.9.7
**/
const gchar *
fwupd_remote_get_metadata_uri (FwupdRemote *self)
{
g_return_val_if_fail (FWUPD_IS_REMOTE (self), NULL);
return self->metadata_uri;
}
/**
* fwupd_remote_get_metadata_uri_sig:
* @self: A #FwupdRemote
*
* Gets the URI for the remote metadata signature.
*
* Returns: (transfer none): a URI, or %NULL for invalid.
*
* Since: 0.9.7
**/
const gchar *
fwupd_remote_get_metadata_uri_sig (FwupdRemote *self)
{
g_return_val_if_fail (FWUPD_IS_REMOTE (self), NULL);
return self->metadata_uri_sig;
}
/**
* fwupd_remote_get_firmware_base_uri:
* @self: A #FwupdRemote
*
* Gets the base URI for firmware.
*
* Returns: (transfer none): a URI, or %NULL for unset.
*
* Since: 0.9.7
**/
const gchar *
fwupd_remote_get_firmware_base_uri (FwupdRemote *self)
{
g_return_val_if_fail (FWUPD_IS_REMOTE (self), NULL);
return self->firmware_base_uri;
}
/** /**
* fwupd_remote_get_enabled: * fwupd_remote_get_enabled:
* @self: A #FwupdRemote * @self: A #FwupdRemote
@ -630,6 +743,10 @@ fwupd_remote_to_variant_builder (FwupdRemote *self, GVariantBuilder *builder)
g_variant_builder_add (builder, "{sv}", "Url", g_variant_builder_add (builder, "{sv}", "Url",
g_variant_new_string (self->metadata_uri)); g_variant_new_string (self->metadata_uri));
} }
if (self->firmware_base_uri != NULL) {
g_variant_builder_add (builder, "{sv}", "FirmwareBaseUri",
g_variant_new_string (self->firmware_base_uri));
}
if (self->priority != 0) { if (self->priority != 0) {
g_variant_builder_add (builder, "{sv}", "Priority", g_variant_builder_add (builder, "{sv}", "Priority",
g_variant_new_int32 (self->priority)); g_variant_new_int32 (self->priority));
@ -688,6 +805,8 @@ fwupd_remote_set_from_variant_iter (FwupdRemote *self, GVariantIter *iter)
self->priority = g_variant_get_int32 (value); self->priority = g_variant_get_int32 (value);
} else if (g_strcmp0 (key, "ModificationTime") == 0) { } else if (g_strcmp0 (key, "ModificationTime") == 0) {
self->mtime = g_variant_get_uint64 (value); self->mtime = g_variant_get_uint64 (value);
} else if (g_strcmp0 (key, "FirmwareBaseUri") == 0) {
fwupd_remote_set_firmware_base_uri (self, g_variant_get_string (value, NULL));
} }
} }
} }
@ -805,6 +924,7 @@ fwupd_remote_finalize (GObject *obj)
g_free (self->id); g_free (self->id);
g_free (self->metadata_uri); g_free (self->metadata_uri);
g_free (self->firmware_base_uri);
g_free (self->username); g_free (self->username);
g_free (self->password); g_free (self->password);
g_free (self->filename); g_free (self->filename);

View File

@ -50,17 +50,27 @@ const gchar *fwupd_remote_get_username (FwupdRemote *self);
const gchar *fwupd_remote_get_password (FwupdRemote *self); const gchar *fwupd_remote_get_password (FwupdRemote *self);
const gchar *fwupd_remote_get_filename_cache (FwupdRemote *self); const gchar *fwupd_remote_get_filename_cache (FwupdRemote *self);
const gchar *fwupd_remote_get_filename_cache_sig (FwupdRemote *self); const gchar *fwupd_remote_get_filename_cache_sig (FwupdRemote *self);
const gchar *fwupd_remote_get_firmware_base_uri (FwupdRemote *self);
const gchar *fwupd_remote_get_metadata_uri (FwupdRemote *self);
const gchar *fwupd_remote_get_metadata_uri_sig (FwupdRemote *self);
gboolean fwupd_remote_get_enabled (FwupdRemote *self); gboolean fwupd_remote_get_enabled (FwupdRemote *self);
gint fwupd_remote_get_priority (FwupdRemote *self); gint fwupd_remote_get_priority (FwupdRemote *self);
guint64 fwupd_remote_get_age (FwupdRemote *self); guint64 fwupd_remote_get_age (FwupdRemote *self);
FwupdRemoteKind fwupd_remote_get_kind (FwupdRemote *self); FwupdRemoteKind fwupd_remote_get_kind (FwupdRemote *self);
FwupdKeyringKind fwupd_remote_get_keyring_kind (FwupdRemote *self); FwupdKeyringKind fwupd_remote_get_keyring_kind (FwupdRemote *self);
SoupURI *fwupd_remote_get_uri (FwupdRemote *self); gchar *fwupd_remote_build_firmware_uri (FwupdRemote *self,
SoupURI *fwupd_remote_get_uri_asc (FwupdRemote *self); const gchar *url,
GError **error);
SoupURI *fwupd_remote_build_uri (FwupdRemote *self, SoupURI *fwupd_remote_build_uri (FwupdRemote *self,
const gchar *url, const gchar *url,
GError **error); GError **error);
/* deprecated */
SoupURI *fwupd_remote_get_uri (FwupdRemote *self)
G_DEPRECATED_FOR(fwupd_remote_get_metadata_uri);
SoupURI *fwupd_remote_get_uri_asc (FwupdRemote *self)
G_DEPRECATED_FOR(fwupd_remote_get_metadata_uri_sig);
G_END_DECLS G_END_DECLS
#endif /* __FWUPD_REMOTE_H */ #endif /* __FWUPD_REMOTE_H */

View File

@ -111,8 +111,8 @@ fwupd_remote_download_func (void)
g_assert_cmpint (fwupd_remote_get_keyring_kind (remote), ==, FWUPD_KEYRING_KIND_GPG); g_assert_cmpint (fwupd_remote_get_keyring_kind (remote), ==, FWUPD_KEYRING_KIND_GPG);
g_assert_cmpint (fwupd_remote_get_priority (remote), ==, 0); g_assert_cmpint (fwupd_remote_get_priority (remote), ==, 0);
g_assert (fwupd_remote_get_enabled (remote)); g_assert (fwupd_remote_get_enabled (remote));
g_assert (fwupd_remote_get_uri (remote) != NULL); g_assert (fwupd_remote_get_metadata_uri (remote) != NULL);
g_assert (fwupd_remote_get_uri_asc (remote) != NULL); g_assert (fwupd_remote_get_metadata_uri_sig (remote) != NULL);
g_assert_cmpstr (fwupd_remote_get_filename (remote), ==, "lvfs-firmware.xml.gz"); g_assert_cmpstr (fwupd_remote_get_filename (remote), ==, "lvfs-firmware.xml.gz");
g_assert_cmpstr (fwupd_remote_get_filename_asc (remote), ==, "lvfs-firmware.xml.gz.asc"); g_assert_cmpstr (fwupd_remote_get_filename_asc (remote), ==, "lvfs-firmware.xml.gz.asc");
g_assert_cmpstr (fwupd_remote_get_filename_cache (remote), ==, g_assert_cmpstr (fwupd_remote_get_filename_cache (remote), ==,
@ -121,6 +121,34 @@ fwupd_remote_download_func (void)
LOCALSTATEDIR "/lib/fwupd/remotes.d/lvfs/metadata.xml.gz.asc"); LOCALSTATEDIR "/lib/fwupd/remotes.d/lvfs/metadata.xml.gz.asc");
} }
/* verify we used the FirmwareBaseURI just for firmware */
static void
fwupd_remote_baseuri_func (void)
{
gboolean ret;
g_autofree gchar *firmware_uri = NULL;
g_autofree gchar *fn = NULL;
g_autoptr(FwupdRemote) remote = NULL;
g_autoptr(GError) error = NULL;
remote = fwupd_remote_new ();
fn = g_build_filename (TESTDATADIR, "tests", "firmware-base-uri.conf", NULL);
ret = fwupd_remote_load_from_filename (remote, fn, NULL, &error);
g_assert_no_error (error);
g_assert (ret);
g_assert_cmpint (fwupd_remote_get_kind (remote), ==, FWUPD_REMOTE_KIND_DOWNLOAD);
g_assert_cmpint (fwupd_remote_get_keyring_kind (remote), ==, FWUPD_KEYRING_KIND_GPG);
g_assert_cmpint (fwupd_remote_get_priority (remote), ==, 0);
g_assert (fwupd_remote_get_enabled (remote));
g_assert_cmpstr (fwupd_remote_get_metadata_uri (remote), ==,
"https://s3.amazonaws.com/lvfsbucket/downloads/firmware.xml.gz");
g_assert_cmpstr (fwupd_remote_get_metadata_uri_sig (remote), ==,
"https://s3.amazonaws.com/lvfsbucket/downloads/firmware.xml.gz.asc");
firmware_uri = fwupd_remote_build_firmware_uri (remote, "http://bbc.co.uk/firmware.cab", &error);
g_assert_no_error (error);
g_assert_cmpstr (firmware_uri, ==, "https://my.fancy.cdn/firmware.cab");
}
static void static void
fwupd_remote_local_func (void) fwupd_remote_local_func (void)
{ {
@ -137,8 +165,8 @@ fwupd_remote_local_func (void)
g_assert_cmpint (fwupd_remote_get_kind (remote), ==, FWUPD_REMOTE_KIND_LOCAL); g_assert_cmpint (fwupd_remote_get_kind (remote), ==, FWUPD_REMOTE_KIND_LOCAL);
g_assert_cmpint (fwupd_remote_get_keyring_kind (remote), ==, FWUPD_KEYRING_KIND_NONE); g_assert_cmpint (fwupd_remote_get_keyring_kind (remote), ==, FWUPD_KEYRING_KIND_NONE);
g_assert (fwupd_remote_get_enabled (remote)); g_assert (fwupd_remote_get_enabled (remote));
g_assert (fwupd_remote_get_uri (remote) == NULL); g_assert (fwupd_remote_get_metadata_uri (remote) == NULL);
g_assert (fwupd_remote_get_uri_asc (remote) == NULL); g_assert (fwupd_remote_get_metadata_uri_sig (remote) == NULL);
g_assert_cmpstr (fwupd_remote_get_filename (remote), ==, NULL); g_assert_cmpstr (fwupd_remote_get_filename (remote), ==, NULL);
g_assert_cmpstr (fwupd_remote_get_filename_asc (remote), ==, NULL); g_assert_cmpstr (fwupd_remote_get_filename_asc (remote), ==, NULL);
g_assert_cmpstr (fwupd_remote_get_filename_cache (remote), ==, "@datadir@/fwupd/remotes.d/fwupd/metadata.xml"); g_assert_cmpstr (fwupd_remote_get_filename_cache (remote), ==, "@datadir@/fwupd/remotes.d/fwupd/metadata.xml");
@ -256,7 +284,7 @@ fwupd_client_remotes_func (void)
g_assert (remote2 != NULL); g_assert (remote2 != NULL);
g_assert_cmpstr (fwupd_remote_get_id (remote2), ==, "lvfs"); g_assert_cmpstr (fwupd_remote_get_id (remote2), ==, "lvfs");
g_assert (fwupd_remote_get_enabled (remote2)); g_assert (fwupd_remote_get_enabled (remote2));
g_assert (fwupd_remote_get_uri (remote2) != NULL); g_assert (fwupd_remote_get_metadata_uri (remote2) != NULL);
/* check we set an error when unfound */ /* check we set an error when unfound */
remote3 = fwupd_client_get_remote_by_id (client, "XXXX", NULL, &error); remote3 = fwupd_client_get_remote_by_id (client, "XXXX", NULL, &error);
@ -317,6 +345,7 @@ main (int argc, char **argv)
g_test_add_func ("/fwupd/enums", fwupd_enums_func); g_test_add_func ("/fwupd/enums", fwupd_enums_func);
g_test_add_func ("/fwupd/result", fwupd_result_func); g_test_add_func ("/fwupd/result", fwupd_result_func);
g_test_add_func ("/fwupd/remote{download}", fwupd_remote_download_func); g_test_add_func ("/fwupd/remote{download}", fwupd_remote_download_func);
g_test_add_func ("/fwupd/remote{base-uri}", fwupd_remote_baseuri_func);
g_test_add_func ("/fwupd/remote{local}", fwupd_remote_local_func); g_test_add_func ("/fwupd/remote{local}", fwupd_remote_local_func);
if (fwupd_has_system_bus ()) { if (fwupd_has_system_bus ()) {
g_test_add_func ("/fwupd/client{remotes}", fwupd_client_remotes_func); g_test_add_func ("/fwupd/client{remotes}", fwupd_client_remotes_func);

View File

@ -122,6 +122,7 @@ if get_option('enable-tests')
c_args : [ c_args : [
cargs, cargs,
'-DLOCALSTATEDIR="' + localstatedir + '"', '-DLOCALSTATEDIR="' + localstatedir + '"',
'-DTESTDATADIR="' + testdatadir + '"',
'-DFU_SELF_TEST_REMOTES_DIR="' + testdatadir + '"', '-DFU_SELF_TEST_REMOTES_DIR="' + testdatadir + '"',
], ],
) )

View File

@ -229,11 +229,25 @@ fu_engine_get_sysconfig_dir (void)
} }
static void static void
fu_engine_set_release_from_item (FwupdRelease *rel, AsRelease *release) fu_engine_set_release_from_appstream (FuEngine *self, FwupdRelease *rel,
AsApp *app, AsRelease *release)
{ {
AsChecksum *csum; AsChecksum *csum;
FwupdRemote *remote = NULL;
const gchar *remote_id;
const gchar *tmp; const gchar *tmp;
/* find the remote */
remote_id = as_app_get_metadata_item (app, "fwupd::RemoteID");
if (remote_id != NULL) {
remote = fu_config_get_remote_by_id (self->config, remote_id);
if (remote == NULL)
g_warning ("failed to find remote %s", remote_id);
} else {
g_warning ("no fwupd::RemoteID set on %s",
as_app_get_unique_id (app));
}
tmp = as_release_get_version (release); tmp = as_release_get_version (release);
if (tmp != NULL) if (tmp != NULL)
fwupd_release_set_version (rel, tmp); fwupd_release_set_version (rel, tmp);
@ -241,8 +255,14 @@ fu_engine_set_release_from_item (FwupdRelease *rel, AsRelease *release)
if (tmp != NULL) if (tmp != NULL)
fwupd_release_set_description (rel, tmp); fwupd_release_set_description (rel, tmp);
tmp = as_release_get_location_default (release); tmp = as_release_get_location_default (release);
if (tmp != NULL) if (tmp != NULL) {
fwupd_release_set_uri (rel, tmp); g_autofree gchar *uri = NULL;
if (remote != NULL)
uri = fwupd_remote_build_firmware_uri (remote, tmp, NULL);
if (uri == NULL)
uri = g_strdup (tmp);
fwupd_release_set_uri (rel, uri);
}
csum = as_release_get_checksum_by_target (release, AS_CHECKSUM_TARGET_CONTENT); csum = as_release_get_checksum_by_target (release, AS_CHECKSUM_TARGET_CONTENT);
if (csum != NULL) { if (csum != NULL) {
tmp = as_checksum_get_filename (csum); tmp = as_checksum_get_filename (csum);
@ -1681,7 +1701,9 @@ fu_engine_get_updates_item_update (FuEngine *self, FuDeviceItem *item)
fu_device_set_unique_id (item->device, tmp); fu_device_set_unique_id (item->device, tmp);
/* add release information */ /* add release information */
fu_engine_set_release_from_item (fwupd_result_get_release (FWUPD_RESULT (item->device)), release); fu_engine_set_release_from_appstream (self,
fwupd_result_get_release (FWUPD_RESULT (item->device)),
app, release);
/* get the list of releases newer than the one installed */ /* get the list of releases newer than the one installed */
updates_list = g_ptr_array_new (); updates_list = g_ptr_array_new ();
@ -1833,7 +1855,7 @@ fu_engine_get_result_from_app (FuEngine *self, AsApp *app, GError **error)
fwupd_release_set_vendor (rel, as_app_get_developer_name (app, NULL)); fwupd_release_set_vendor (rel, as_app_get_developer_name (app, NULL));
fwupd_result_set_unique_id (res, as_app_get_unique_id (app)); fwupd_result_set_unique_id (res, as_app_get_unique_id (app));
fwupd_release_set_appstream_id (rel, as_app_get_id (app)); fwupd_release_set_appstream_id (rel, as_app_get_id (app));
fu_engine_set_release_from_item (rel, release); fu_engine_set_release_from_appstream (self, rel, app, release);
return g_steal_pointer (&res); return g_steal_pointer (&res);
} }
@ -2032,7 +2054,7 @@ fu_engine_get_releases (FuEngine *self, const gchar *device_id, GError **error)
for (guint j = 0; j < releases_tmp->len; j++) { for (guint j = 0; j < releases_tmp->len; j++) {
AsRelease *release = g_ptr_array_index (releases_tmp, j); AsRelease *release = g_ptr_array_index (releases_tmp, j);
FwupdRelease *rel = fwupd_release_new (); FwupdRelease *rel = fwupd_release_new ();
fu_engine_set_release_from_item (rel, release); fu_engine_set_release_from_appstream (self, rel, app, release);
g_ptr_array_add (releases, g_object_ref (rel)); g_ptr_array_add (releases, g_object_ref (rel));
} }
} }

View File

@ -782,20 +782,22 @@ fu_util_download_metadata_for_remote (FuUtilPrivate *priv,
g_autofree gchar *cache_dir = NULL; g_autofree gchar *cache_dir = NULL;
g_autofree gchar *filename = NULL; g_autofree gchar *filename = NULL;
g_autofree gchar *filename_asc = NULL; g_autofree gchar *filename_asc = NULL;
g_autoptr(SoupURI) uri = NULL;
g_autoptr(SoupURI) uri_sig = NULL;
/* download the metadata */ /* download the metadata */
cache_dir = g_build_filename (g_get_user_cache_dir (), "fwupdmgr", NULL); cache_dir = g_build_filename (g_get_user_cache_dir (), "fwupdmgr", NULL);
filename = g_build_filename (cache_dir, fwupd_remote_get_filename (remote), NULL); filename = g_build_filename (cache_dir, fwupd_remote_get_filename (remote), NULL);
if (!fu_common_mkdir_parent (filename, error)) if (!fu_common_mkdir_parent (filename, error))
return FALSE; return FALSE;
if (!fu_util_download_file (priv, fwupd_remote_get_uri (remote), uri = soup_uri_new (fwupd_remote_get_metadata_uri (remote));
filename, NULL, error)) if (!fu_util_download_file (priv, uri, filename, NULL, error))
return FALSE; return FALSE;
/* download the signature */ /* download the signature */
filename_asc = g_build_filename (cache_dir, fwupd_remote_get_filename_asc (remote), NULL); filename_asc = g_build_filename (cache_dir, fwupd_remote_get_filename_asc (remote), NULL);
if (!fu_util_download_file (priv, fwupd_remote_get_uri_asc (remote), uri_sig = soup_uri_new (fwupd_remote_get_metadata_uri_sig (remote));
filename_asc, NULL, error)) if (!fu_util_download_file (priv, uri_sig, filename_asc, NULL, error))
return FALSE; return FALSE;
/* send all this to fwupd */ /* send all this to fwupd */
@ -1098,7 +1100,6 @@ fu_util_get_remotes (FuUtilPrivate *priv, gchar **values, GError **error)
FwupdRemote *remote = g_ptr_array_index (remotes, i); FwupdRemote *remote = g_ptr_array_index (remotes, i);
FwupdRemoteKind kind = fwupd_remote_get_kind (remote); FwupdRemoteKind kind = fwupd_remote_get_kind (remote);
FwupdKeyringKind keyring_kind = fwupd_remote_get_keyring_kind (remote); FwupdKeyringKind keyring_kind = fwupd_remote_get_keyring_kind (remote);
SoupURI *uri;
const gchar *tmp; const gchar *tmp;
gint priority; gint priority;
gdouble age; gdouble age;
@ -1184,17 +1185,20 @@ fu_util_get_remotes (FuUtilPrivate *priv, gchar **values, GError **error)
/* TRANSLATORS: locatation of the local file */ /* TRANSLATORS: locatation of the local file */
fu_util_print_data (_("Location Signature"), tmp); fu_util_print_data (_("Location Signature"), tmp);
} }
uri = fwupd_remote_get_uri (remote); tmp = fwupd_remote_get_metadata_uri (remote);
if (uri != NULL) { if (tmp != NULL) {
g_autofree gchar *uri_str = soup_uri_to_string (uri, FALSE);
/* TRANSLATORS: remote URI */ /* TRANSLATORS: remote URI */
fu_util_print_data (_("Metadata URI"), uri_str); fu_util_print_data (_("Metadata URI"), tmp);
} }
uri = fwupd_remote_get_uri_asc (remote); tmp = fwupd_remote_get_metadata_uri_sig (remote);
if (uri != NULL) { if (tmp != NULL) {
g_autofree gchar *uri_str = soup_uri_to_string (uri, FALSE);
/* TRANSLATORS: remote URI */ /* TRANSLATORS: remote URI */
fu_util_print_data (_("Metadata URI Signature"), uri_str); fu_util_print_data (_("Metadata URI Signature"), tmp);
}
tmp = fwupd_remote_get_firmware_base_uri (remote);
if (tmp != NULL) {
/* TRANSLATORS: remote URI */
fu_util_print_data (_("Firmware Base URI"), tmp);
} }
/* newline */ /* newline */