From 6d996b72d7e047aab392ec5a52df82bf85845c05 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Wed, 20 Apr 2011 13:58:40 +0200 Subject: rename Settings.{cpp,h} to abrt_conf.{c,h} This makes abrt-action-save-package-data twice as small, amd loses libstdc++.so.6 dependency --- src/daemon/abrt_conf.c | 167 +++++++++++++++++++++++++++++++++++++++++++++++++ src/daemon/abrt_conf.h | 43 +++++++++++++ 2 files changed, 210 insertions(+) create mode 100644 src/daemon/abrt_conf.c create mode 100644 src/daemon/abrt_conf.h diff --git a/src/daemon/abrt_conf.c b/src/daemon/abrt_conf.c new file mode 100644 index 00000000..0eb83fbe --- /dev/null +++ b/src/daemon/abrt_conf.c @@ -0,0 +1,167 @@ +/* + Copyright (C) 2010 ABRT team + Copyright (C) 2010 RedHat Inc + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ +#include "abrtlib.h" +#include "abrt_conf.h" + +bool g_settings_bOpenGPGCheck = false; +GList * g_settings_setOpenGPGPublicKeys = NULL; +GList * g_settings_setBlackListedPkgs = NULL; +GList * g_settings_setBlackListedPaths = NULL; +char * g_settings_sWatchCrashdumpArchiveDir = NULL; +unsigned int g_settings_nMaxCrashReportsSize = 1000; +bool g_settings_bProcessUnpackaged = false; + + +void free_settings() +{ + list_free_with_free(g_settings_setOpenGPGPublicKeys); + g_settings_setOpenGPGPublicKeys = NULL; + + list_free_with_free(g_settings_setBlackListedPkgs); + g_settings_setBlackListedPkgs = NULL; + + list_free_with_free(g_settings_setBlackListedPaths); + g_settings_setBlackListedPaths = NULL; + + free(g_settings_sWatchCrashdumpArchiveDir); + g_settings_sWatchCrashdumpArchiveDir = NULL; +} + +static GList *parse_list(const char* list) +{ + struct strbuf *item = strbuf_new(); + GList *l = NULL; + + char *trim_item = NULL; + + for (unsigned ii = 0; list[ii]; ii++) + { + if (list[ii] == ',') + { + trim_item = strtrim(item->buf); + l = g_list_append(l, xstrdup(trim_item)); + strbuf_clear(item); + } + else + strbuf_append_char(item, list[ii]); + } + + if (item->len > 0) + { + trim_item = strtrim(item->buf); + l = g_list_append(l, xstrdup(trim_item)); + } + + strbuf_free(item); + + return l; +} + +static void ParseCommon(map_string_h *settings, const char *conf_filename) +{ + char *value; + + value = g_hash_table_lookup(settings, "OpenGPGCheck"); + if (value) + { + g_settings_bOpenGPGCheck = string_to_bool(value); + g_hash_table_remove(settings, "OpenGPGCheck"); + } + + value = g_hash_table_lookup(settings, "BlackList"); + if (value) + { + g_settings_setBlackListedPkgs = parse_list(value); + g_hash_table_remove(settings, "BlackList"); + } + + value = g_hash_table_lookup(settings, "BlackListedPaths"); + if (value) + { + g_settings_setBlackListedPaths = parse_list(value); + g_hash_table_remove(settings, "BlackListedPaths"); + } + + value = g_hash_table_lookup(settings, "WatchCrashdumpArchiveDir"); + if (value) + { + g_settings_sWatchCrashdumpArchiveDir = xstrdup(value); + g_hash_table_remove(settings, "WatchCrashdumpArchiveDir"); + } + + value = g_hash_table_lookup(settings, "MaxCrashReportsSize"); + if (value) + { +//fixme: dont die + g_settings_nMaxCrashReportsSize = xatoi_positive(value); + g_hash_table_remove(settings, "MaxCrashReportsSize"); + } + + value = g_hash_table_lookup(settings, "ProcessUnpackaged"); + if (value) + { + g_settings_bProcessUnpackaged = string_to_bool(value); + g_hash_table_remove(settings, "ProcessUnpackaged"); + } + + GHashTableIter iter; + char *name; + /*char *value; - already declared */ + g_hash_table_iter_init(&iter, settings); + while (g_hash_table_iter_next(&iter, (void**)&name, (void**)&value)) + { + error_msg("Unrecognized variable '%s' in '%s'", name, conf_filename); + } +} + +static void LoadGPGKeys() +{ + FILE *fp = fopen(CONF_DIR"/gpg_keys", "r"); + if (fp) + { + /* every line is one key + * FIXME: make it more robust, it doesn't handle comments + */ + char *line; + while ((line = xmalloc_fgetline(fp)) != NULL) + { + if (line[0] == '/') // probably the beginning of a path, so let's handle it as a key + g_settings_setOpenGPGPublicKeys = g_list_append(g_settings_setOpenGPGPublicKeys, line); + else + free(line); + } + fclose(fp); + } +} + +int load_settings() +{ + free_settings(); + + map_string_h *settings = new_map_string(); + if (!load_conf_file(CONF_DIR"/abrt.conf", settings, /*skip key w/o values:*/ false)) + error_msg("Can't open '%s'", CONF_DIR"/abrt.conf"); + + ParseCommon(settings, CONF_DIR"/abrt.conf"); + free_map_string(settings); + + LoadGPGKeys(); + + return 0; +} diff --git a/src/daemon/abrt_conf.h b/src/daemon/abrt_conf.h new file mode 100644 index 00000000..c01f8c4a --- /dev/null +++ b/src/daemon/abrt_conf.h @@ -0,0 +1,43 @@ +/* + Copyright (C) 2010 ABRT team + Copyright (C) 2010 RedHat Inc + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ +#ifndef SETTINGS_H_ +#define SETTINGS_H_ + +#include "abrt_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern GList * g_settings_setOpenGPGPublicKeys; +extern GList * g_settings_setBlackListedPkgs; +extern GList * g_settings_setBlackListedPaths; +extern unsigned int g_settings_nMaxCrashReportsSize; +extern bool g_settings_bOpenGPGCheck; +extern bool g_settings_bProcessUnpackaged; +extern char * g_settings_sWatchCrashdumpArchiveDir; + +int load_settings(); +void free_settings(); + +#ifdef __cplusplus +} +#endif + +#endif -- cgit