28
28
#include "gkm/gkm-file-tracker.h"
29
29
#include "gkm/gkm-serializable.h"
31
#include "egg/egg-armor.h"
31
32
#include "egg/egg-error.h"
32
33
#include "egg/egg-openssl.h"
139
parsed_pem_block (GQuark type, const guchar *data, gsize n_data,
140
GHashTable *headers, gpointer user_data)
141
parsed_pem_block (GQuark type,
142
149
static GQuark PEM_CERTIFICATE;
143
150
static volatile gsize quarks_inited = 0;
206
212
g_list_free (objects);
208
214
/* Try and parse the PEM */
209
num = egg_openssl_pem_parse (data, n_data, parsed_pem_block, &ctx);
215
egg_armor_parse (data, n_data, parsed_pem_block, &ctx);
211
217
/* If no PEM data, try to parse directly as DER */
212
218
if (ctx.count == 0) {
262
268
GkmRootsModule *self = GKM_ROOTS_MODULE (base);
263
269
if (g_str_equal (name, "directory")) {
264
g_free (self->directory);
265
self->directory = g_strdup (value);
271
self->path = g_strdup (value);
272
self->is_directory = TRUE;
274
} else if (g_str_equal (name, "file")) {
276
self->path = g_strdup (value);
277
self->is_directory = FALSE;
279
gkm_roots_module_constructor (GType type, guint n_props, GObjectConstructParam *props)
291
gkm_roots_module_constructed (GObject *obj)
281
GkmRootsModule *self = GKM_ROOTS_MODULE (G_OBJECT_CLASS (gkm_roots_module_parent_class)->constructor(type, n_props, props));
293
GkmRootsModule *self;
294
const gchar *exclude;
282
295
GkmManager *manager;
284
g_return_val_if_fail (self, NULL);
286
#ifdef ROOT_CERTIFICATES
287
if (!self->directory)
288
self->directory = g_strdup (ROOT_CERTIFICATES);
290
if (self->directory) {
291
self->tracker = gkm_file_tracker_new (self->directory, "*", "*.0");
299
G_OBJECT_CLASS (gkm_roots_module_parent_class)->constructed (obj);
301
self = GKM_ROOTS_MODULE (obj);
305
self->path = g_strdup (ROOT_CA_FILE);
306
self->is_directory = FALSE;
309
#ifdef ROOT_CA_DIRECTORY
311
self->path = g_strdup (ROOT_CA_DIRECTORY);
312
self->is_directory = TRUE;
317
if (self->is_directory) {
318
directory = g_strdup (self->path);
319
basename = g_strdup ("*");
322
directory = g_path_get_dirname (self->path);
323
basename = g_path_get_basename (self->path);
327
self->tracker = gkm_file_tracker_new (directory, basename, exclude);
292
328
g_signal_connect (self->tracker, "file-added", G_CALLBACK (file_load), self);
293
329
g_signal_connect (self->tracker, "file-changed", G_CALLBACK (file_load), self);
294
330
g_signal_connect (self->tracker, "file-removed", G_CALLBACK (file_remove), self);
297
336
manager = gkm_module_get_manager (GKM_MODULE (self));
298
337
gkm_manager_add_property_index (manager, "unique", TRUE);
299
338
gkm_manager_add_property_index (manager, "path", FALSE);
301
return G_OBJECT (self);
305
342
gkm_roots_module_init (GkmRootsModule *self)
307
344
self->certificates = g_hash_table_new_full (g_direct_hash, g_direct_equal, g_object_unref, NULL);
344
380
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
345
381
GkmModuleClass *module_class = GKM_MODULE_CLASS (klass);
347
gobject_class->constructor = gkm_roots_module_constructor;
383
gobject_class->constructed = gkm_roots_module_constructed;
348
384
gobject_class->dispose = gkm_roots_module_dispose;
349
385
gobject_class->finalize = gkm_roots_module_finalize;