From bd421853897b432a2877da549eb7dbc4a67503e3 Mon Sep 17 00:00:00 2001 From: James Booth Date: Thu, 24 Sep 2015 01:06:53 +0100 Subject: Added /tls revoke --- src/config/tlscerts.c | 41 +++++++++++++++++++++++++++++++++++++++++ src/config/tlscerts.h | 6 ++++++ 2 files changed, 47 insertions(+) (limited to 'src/config') diff --git a/src/config/tlscerts.c b/src/config/tlscerts.c index 7d2220cf..3d0a0b24 100644 --- a/src/config/tlscerts.c +++ b/src/config/tlscerts.c @@ -41,6 +41,7 @@ #include "config/tlscerts.h" #include "log.h" #include "common.h" +#include "tools/autocomplete.h" static gchar *tlscerts_loc; static GKeyFile *tlscerts; @@ -48,6 +49,8 @@ static GKeyFile *tlscerts; static gchar* _get_tlscerts_file(void); static void _save_tlscerts(void); +static Autocomplete certs_ac; + void tlscerts_init(void) { @@ -60,6 +63,16 @@ tlscerts_init(void) tlscerts = g_key_file_new(); g_key_file_load_from_file(tlscerts, tlscerts_loc, G_KEY_FILE_KEEP_COMMENTS, NULL); + + certs_ac = autocomplete_new(); + gsize len = 0; + gchar **groups = g_key_file_get_groups(tlscerts, &len); + + int i = 0; + for (i = 0; i < g_strv_length(groups); i++) { + autocomplete_add(certs_ac, groups[i]); + } + g_strfreev(groups); } gboolean @@ -146,6 +159,8 @@ tlscerts_add(TLSCertificate *cert) return; } + autocomplete_add(certs_ac, cert->fingerprint); + if (cert->domain) { g_key_file_set_string(tlscerts, cert->fingerprint, "domain", cert->domain); } @@ -165,6 +180,31 @@ tlscerts_add(TLSCertificate *cert) _save_tlscerts(); } +gboolean +tlscerts_revoke(const char * const fingerprint) +{ + gboolean result = g_key_file_remove_group(tlscerts, fingerprint, NULL); + if (result) { + autocomplete_remove(certs_ac, fingerprint); + } + + _save_tlscerts(); + + return result; +} + +char * +tlscerts_complete(const char * const prefix) +{ + return autocomplete_complete(certs_ac, prefix, TRUE); +} + +void +tlscerts_reset_ac(void) +{ + autocomplete_reset(certs_ac); +} + void tlscerts_free(TLSCertificate *cert) { @@ -183,6 +223,7 @@ tlscerts_close(void) { g_key_file_free(tlscerts); tlscerts = NULL; + autocomplete_free(certs_ac); } static gchar * diff --git a/src/config/tlscerts.h b/src/config/tlscerts.h index 56e81dd6..b8a15c5b 100644 --- a/src/config/tlscerts.h +++ b/src/config/tlscerts.h @@ -54,10 +54,16 @@ gboolean tlscerts_exists(const char * const fingerprint); void tlscerts_add(TLSCertificate *cert); +gboolean tlscerts_revoke(const char * const fingerprint); + void tlscerts_free(TLSCertificate *cert); GList* tlscerts_list(void); +char* tlscerts_complete(const char * const prefix); + +void tlscerts_reset_ac(void); + void tlscerts_close(void); #endif -- cgit 1.4.1-2-gfad0