static void remove_each_certificate (gpointer key, gpointer value, gpointer user_data) { GkmRootsModule *self = user_data; g_assert (GKM_IS_ROOTS_MODULE (self)); if (!g_hash_table_remove (self->certificates, value)) g_return_if_reached (); }
static void file_remove (GkmFileTracker *tracker, const gchar *path, GkmRootsModule *self) { GList *objects, *l; GkmManager *manager; g_return_if_fail (path); g_return_if_fail (GKM_IS_ROOTS_MODULE (self)); manager = gkm_module_get_manager (GKM_MODULE (self)); g_return_if_fail (manager); objects = gkm_manager_find_by_string_property (manager, "path", path); for (l = objects; l; l = g_list_next (l)) if (!g_hash_table_remove (self->certificates, l->data)) g_return_if_reached (); g_list_free (objects); }
static GkmCertificate* add_certificate_for_data (GkmRootsModule *self, const guchar *data, gsize n_data, const gchar *path) { GkmCertificate *cert; GkmManager *manager; gchar *hash, *unique; g_assert (GKM_IS_ROOTS_MODULE (self)); g_assert (data); g_assert (path); manager = gkm_module_get_manager (GKM_MODULE (self)); g_return_val_if_fail (manager, NULL); /* Hash the certificate */ hash = g_compute_checksum_for_data (G_CHECKSUM_MD5, data, n_data); unique = g_strdup_printf ("%s:%s", path, hash); g_free (hash); /* Try and find a certificate */ cert = GKM_CERTIFICATE (gkm_manager_find_one_by_string_property (manager, "unique", unique)); if (cert != NULL) { g_free (unique); return cert; } /* Create a new certificate object */ cert = GKM_CERTIFICATE (gkm_roots_certificate_new (GKM_MODULE (self), unique, path)); g_free (unique); if (!gkm_serializable_load (GKM_SERIALIZABLE (cert), NULL, data, n_data)) { g_message ("couldn't parse certificate(s): %s", path); g_object_unref (cert); return NULL; } /* Make the certificate show up */ gkm_object_expose (GKM_OBJECT (cert), TRUE); /* And add to our wonderful table */ g_hash_table_insert (self->certificates, cert, cert); return cert; }