mirror of
https://git.proxmox.com/git/fwupd
synced 2025-08-08 12:31:49 +00:00
Add a 'created' property on the HSI security attribute
This commit is contained in:
parent
dbdd3740a3
commit
a085b4dd68
@ -30,6 +30,7 @@ typedef struct {
|
|||||||
gchar *name;
|
gchar *name;
|
||||||
gchar *plugin;
|
gchar *plugin;
|
||||||
gchar *url;
|
gchar *url;
|
||||||
|
guint64 created;
|
||||||
FwupdSecurityAttrLevel level;
|
FwupdSecurityAttrLevel level;
|
||||||
FwupdSecurityAttrResult result;
|
FwupdSecurityAttrResult result;
|
||||||
FwupdSecurityAttrFlags flags;
|
FwupdSecurityAttrFlags flags;
|
||||||
@ -483,6 +484,40 @@ fwupd_security_attr_set_url(FwupdSecurityAttr *self, const gchar *url)
|
|||||||
g_free(priv->url);
|
g_free(priv->url);
|
||||||
priv->url = g_strdup(url);
|
priv->url = g_strdup(url);
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* fwupd_security_attr_get_created:
|
||||||
|
* @self: a #FwupdSecurityAttr
|
||||||
|
*
|
||||||
|
* Gets when the attribute was created.
|
||||||
|
*
|
||||||
|
* Returns: the UNIX time, or 0 if unset
|
||||||
|
*
|
||||||
|
* Since: 1.7.1
|
||||||
|
**/
|
||||||
|
guint64
|
||||||
|
fwupd_security_attr_get_created(FwupdSecurityAttr *self)
|
||||||
|
{
|
||||||
|
FwupdSecurityAttrPrivate *priv = GET_PRIVATE(self);
|
||||||
|
g_return_val_if_fail(FWUPD_IS_SECURITY_ATTR(self), 0);
|
||||||
|
return priv->created;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fwupd_security_attr_set_created:
|
||||||
|
* @self: a #FwupdSecurityAttr
|
||||||
|
* @created: the UNIX time
|
||||||
|
*
|
||||||
|
* Sets when the attribute was created.
|
||||||
|
*
|
||||||
|
* Since: 1.7.1
|
||||||
|
**/
|
||||||
|
void
|
||||||
|
fwupd_security_attr_set_created(FwupdSecurityAttr *self, guint64 created)
|
||||||
|
{
|
||||||
|
FwupdSecurityAttrPrivate *priv = GET_PRIVATE(self);
|
||||||
|
g_return_if_fail(FWUPD_IS_SECURITY_ATTR(self));
|
||||||
|
priv->created = created;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* fwupd_security_attr_get_name:
|
* fwupd_security_attr_get_name:
|
||||||
@ -688,6 +723,12 @@ fwupd_security_attr_to_variant(FwupdSecurityAttr *self)
|
|||||||
FWUPD_RESULT_KEY_APPSTREAM_ID,
|
FWUPD_RESULT_KEY_APPSTREAM_ID,
|
||||||
g_variant_new_string(priv->appstream_id));
|
g_variant_new_string(priv->appstream_id));
|
||||||
}
|
}
|
||||||
|
if (priv->created > 0) {
|
||||||
|
g_variant_builder_add(&builder,
|
||||||
|
"{sv}",
|
||||||
|
FWUPD_RESULT_KEY_CREATED,
|
||||||
|
g_variant_new_uint64(priv->created));
|
||||||
|
}
|
||||||
if (priv->name != NULL) {
|
if (priv->name != NULL) {
|
||||||
g_variant_builder_add(&builder,
|
g_variant_builder_add(&builder,
|
||||||
"{sv}",
|
"{sv}",
|
||||||
@ -802,6 +843,10 @@ fwupd_security_attr_from_key_value(FwupdSecurityAttr *self, const gchar *key, GV
|
|||||||
fwupd_security_attr_set_appstream_id(self, g_variant_get_string(value, NULL));
|
fwupd_security_attr_set_appstream_id(self, g_variant_get_string(value, NULL));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (g_strcmp0(key, FWUPD_RESULT_KEY_CREATED) == 0) {
|
||||||
|
fwupd_security_attr_set_created(self, g_variant_get_uint64(value));
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (g_strcmp0(key, FWUPD_RESULT_KEY_NAME) == 0) {
|
if (g_strcmp0(key, FWUPD_RESULT_KEY_NAME) == 0) {
|
||||||
fwupd_security_attr_set_name(self, g_variant_get_string(value, NULL));
|
fwupd_security_attr_set_name(self, g_variant_get_string(value, NULL));
|
||||||
return;
|
return;
|
||||||
@ -934,6 +979,9 @@ fwupd_security_attr_from_json(FwupdSecurityAttr *self, JsonNode *json_node, GErr
|
|||||||
fwupd_security_attr_set_level(
|
fwupd_security_attr_set_level(
|
||||||
self,
|
self,
|
||||||
json_object_get_int_member_with_default(obj, FWUPD_RESULT_KEY_HSI_LEVEL, 0));
|
json_object_get_int_member_with_default(obj, FWUPD_RESULT_KEY_HSI_LEVEL, 0));
|
||||||
|
fwupd_security_attr_set_created(
|
||||||
|
self,
|
||||||
|
json_object_get_int_member_with_default(obj, FWUPD_RESULT_KEY_CREATED, 0));
|
||||||
|
|
||||||
/* also optional */
|
/* also optional */
|
||||||
if (json_object_has_member(obj, FWUPD_RESULT_KEY_HSI_RESULT)) {
|
if (json_object_has_member(obj, FWUPD_RESULT_KEY_HSI_RESULT)) {
|
||||||
@ -989,6 +1037,8 @@ fwupd_security_attr_to_json(FwupdSecurityAttr *self, JsonBuilder *builder)
|
|||||||
g_return_if_fail(builder != NULL);
|
g_return_if_fail(builder != NULL);
|
||||||
|
|
||||||
fwupd_common_json_add_string(builder, FWUPD_RESULT_KEY_APPSTREAM_ID, priv->appstream_id);
|
fwupd_common_json_add_string(builder, FWUPD_RESULT_KEY_APPSTREAM_ID, priv->appstream_id);
|
||||||
|
if (priv->created > 0)
|
||||||
|
fwupd_common_json_add_int(builder, FWUPD_RESULT_KEY_CREATED, priv->created);
|
||||||
fwupd_common_json_add_int(builder, FWUPD_RESULT_KEY_HSI_LEVEL, priv->level);
|
fwupd_common_json_add_int(builder, FWUPD_RESULT_KEY_HSI_LEVEL, priv->level);
|
||||||
fwupd_common_json_add_string(builder,
|
fwupd_common_json_add_string(builder,
|
||||||
FWUPD_RESULT_KEY_HSI_RESULT,
|
FWUPD_RESULT_KEY_HSI_RESULT,
|
||||||
@ -1027,6 +1077,21 @@ fwupd_security_attr_to_json(FwupdSecurityAttr *self, JsonBuilder *builder)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
fwupd_pad_kv_unx(GString *str, const gchar *key, guint64 value)
|
||||||
|
{
|
||||||
|
g_autoptr(GDateTime) date = NULL;
|
||||||
|
g_autofree gchar *tmp = NULL;
|
||||||
|
|
||||||
|
/* ignore */
|
||||||
|
if (value == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
date = g_date_time_new_from_unix_utc((gint64)value);
|
||||||
|
tmp = g_date_time_format(date, "%F");
|
||||||
|
fwupd_pad_kv_str(str, key, tmp);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* fwupd_security_attr_to_string:
|
* fwupd_security_attr_to_string:
|
||||||
* @self: a #FwupdSecurityAttr
|
* @self: a #FwupdSecurityAttr
|
||||||
@ -1047,6 +1112,8 @@ fwupd_security_attr_to_string(FwupdSecurityAttr *self)
|
|||||||
|
|
||||||
str = g_string_new("");
|
str = g_string_new("");
|
||||||
fwupd_pad_kv_str(str, FWUPD_RESULT_KEY_APPSTREAM_ID, priv->appstream_id);
|
fwupd_pad_kv_str(str, FWUPD_RESULT_KEY_APPSTREAM_ID, priv->appstream_id);
|
||||||
|
if (priv->created > 0)
|
||||||
|
fwupd_pad_kv_unx(str, FWUPD_RESULT_KEY_CREATED, priv->created);
|
||||||
fwupd_pad_kv_int(str, FWUPD_RESULT_KEY_HSI_LEVEL, priv->level);
|
fwupd_pad_kv_int(str, FWUPD_RESULT_KEY_HSI_LEVEL, priv->level);
|
||||||
fwupd_pad_kv_str(str,
|
fwupd_pad_kv_str(str,
|
||||||
FWUPD_RESULT_KEY_HSI_RESULT,
|
FWUPD_RESULT_KEY_HSI_RESULT,
|
||||||
@ -1089,6 +1156,7 @@ fwupd_security_attr_init(FwupdSecurityAttr *self)
|
|||||||
FwupdSecurityAttrPrivate *priv = GET_PRIVATE(self);
|
FwupdSecurityAttrPrivate *priv = GET_PRIVATE(self);
|
||||||
priv->obsoletes = g_ptr_array_new_with_free_func(g_free);
|
priv->obsoletes = g_ptr_array_new_with_free_func(g_free);
|
||||||
priv->guids = g_ptr_array_new_with_free_func(g_free);
|
priv->guids = g_ptr_array_new_with_free_func(g_free);
|
||||||
|
priv->created = (guint64)g_get_real_time() / G_USEC_PER_SEC;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -142,6 +142,10 @@ const gchar *
|
|||||||
fwupd_security_attr_get_url(FwupdSecurityAttr *self);
|
fwupd_security_attr_get_url(FwupdSecurityAttr *self);
|
||||||
void
|
void
|
||||||
fwupd_security_attr_set_url(FwupdSecurityAttr *self, const gchar *url);
|
fwupd_security_attr_set_url(FwupdSecurityAttr *self, const gchar *url);
|
||||||
|
guint64
|
||||||
|
fwupd_security_attr_get_created(FwupdSecurityAttr *self);
|
||||||
|
void
|
||||||
|
fwupd_security_attr_set_created(FwupdSecurityAttr *self, guint64 created);
|
||||||
GPtrArray *
|
GPtrArray *
|
||||||
fwupd_security_attr_get_obsoletes(FwupdSecurityAttr *self);
|
fwupd_security_attr_get_obsoletes(FwupdSecurityAttr *self);
|
||||||
void
|
void
|
||||||
|
@ -829,6 +829,9 @@ fwupd_security_attr_func(void)
|
|||||||
fwupd_security_attr_add_metadata(attr1, "KEY", "VALUE");
|
fwupd_security_attr_add_metadata(attr1, "KEY", "VALUE");
|
||||||
g_assert_cmpstr(fwupd_security_attr_get_metadata(attr1, "KEY"), ==, "VALUE");
|
g_assert_cmpstr(fwupd_security_attr_get_metadata(attr1, "KEY"), ==, "VALUE");
|
||||||
|
|
||||||
|
/* remove this from the output */
|
||||||
|
fwupd_security_attr_set_created(attr1, 0);
|
||||||
|
|
||||||
str1 = fwupd_security_attr_to_string(attr1);
|
str1 = fwupd_security_attr_to_string(attr1);
|
||||||
ret = fu_test_compare_lines(str1,
|
ret = fu_test_compare_lines(str1,
|
||||||
" AppstreamId: org.fwupd.hsi.baz\n"
|
" AppstreamId: org.fwupd.hsi.baz\n"
|
||||||
|
@ -715,6 +715,8 @@ LIBFWUPD_1.7.1 {
|
|||||||
fwupd_client_add_hint;
|
fwupd_client_add_hint;
|
||||||
fwupd_security_attr_flag_from_string;
|
fwupd_security_attr_flag_from_string;
|
||||||
fwupd_security_attr_from_json;
|
fwupd_security_attr_from_json;
|
||||||
|
fwupd_security_attr_get_created;
|
||||||
fwupd_security_attr_result_from_string;
|
fwupd_security_attr_result_from_string;
|
||||||
|
fwupd_security_attr_set_created;
|
||||||
local: *;
|
local: *;
|
||||||
} LIBFWUPD_1.7.0;
|
} LIBFWUPD_1.7.0;
|
||||||
|
@ -3338,7 +3338,9 @@ fu_security_attr_func(gconstpointer user_data)
|
|||||||
g_autoptr(JsonParser) parser = json_parser_new();
|
g_autoptr(JsonParser) parser = json_parser_new();
|
||||||
|
|
||||||
fwupd_security_attr_set_plugin(attr1, "foo");
|
fwupd_security_attr_set_plugin(attr1, "foo");
|
||||||
|
fwupd_security_attr_set_created(attr1, 0);
|
||||||
fwupd_security_attr_set_plugin(attr2, "bar");
|
fwupd_security_attr_set_plugin(attr2, "bar");
|
||||||
|
fwupd_security_attr_set_created(attr2, 0);
|
||||||
fu_security_attrs_append(attrs1, attr1);
|
fu_security_attrs_append(attrs1, attr1);
|
||||||
fu_security_attrs_append(attrs1, attr2);
|
fu_security_attrs_append(attrs1, attr2);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user