This is an automated email from the git hooks/post-receive script.
rharwood pushed a change to branch master in repository gssproxy.
from 657d3c8 Handle outdated encrypted ccaches new c0d8538 Fix silent crash with duplicate config sections
The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference.
Summary of changes: proxy/configure.ac | 125 ++++++++++++++++++++++++++++++++++++++++++++++++++ proxy/src/gp_config.c | 27 +++++------ 2 files changed, 137 insertions(+), 15 deletions(-)
This is an automated email from the git hooks/post-receive script.
rharwood pushed a commit to branch master in repository gssproxy.
commit c0d85387fc38f9554d601ec2ddb111031a694387 Author: Alexander Scheel ascheel@redhat.com Date: Wed Aug 9 15:00:26 2017 -0400
Fix silent crash with duplicate config sections
Signed-off-by: Alexander Scheel ascheel@redhat.com Reviewed-by: Simo Sorce simo@redhat.com Resolves: #194 Merges: #202 --- proxy/configure.ac | 125 ++++++++++++++++++++++++++++++++++++++++++++++++++ proxy/src/gp_config.c | 27 +++++------ 2 files changed, 137 insertions(+), 15 deletions(-)
diff --git a/proxy/configure.ac b/proxy/configure.ac index 81323ee..0af44ab 100644 --- a/proxy/configure.ac +++ b/proxy/configure.ac @@ -113,6 +113,131 @@ fi AC_SUBST(INI_LIBS) AC_SUBST(INI_CFLAGS)
+AC_CHECK_LIB(ref_array, ref_array_destroy, [], + [AC_MSG_WARN([ref_array library must support ref_array_destroy])], + [$INI_CONFIG_LIBS]) + +AC_RUN_IFELSE([AC_LANG_SOURCE([[ +/* See: https://pagure.io/SSSD/ding-libs/pull-request/3172 */ +#include <linux/limits.h> +#include <string.h> +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <stdint.h> +#include <ini_configobj.h> +#include <ini_config.h> + +static int write_to_file(char *path, char *text) +{ + FILE *f = fopen(path, "w"); + int bytes = 0; + if (f == NULL) + return 1; + + bytes = fprintf(f, "%s", text); + if (bytes != strlen(text)) + return 1; + + return fclose(f); +} + +int main(void) +{ + char base_path[PATH_MAX]; + char augment_path[PATH_MAX]; + + char config_base[] = + "[section]\n" + "key1 = first\n" + "key2 = exists\n"; + + char config_augment[] = + "[section]\n" + "key1 = augment\n" + "key3 = exists\n"; + + char *builddir; + + struct ini_cfgobj *in_cfg, *result_cfg; + struct ini_cfgfile *file_ctx; + + uint32_t merge_flags = INI_MS_DETECT | INI_MS_PRESERVE; + + int ret; + + builddir = getenv("builddir"); + if (builddir == NULL) { + builddir = strdup("."); + } + + snprintf(base_path, PATH_MAX, "%s/tmp_augment_base.conf", builddir); + snprintf(augment_path, PATH_MAX, "%s/tmp_augment_augment.conf", builddir); + + ret = write_to_file(base_path, config_base); + if (ret != 0) { + ret = 1; + goto cleanup; + } + + ret = write_to_file(augment_path, config_augment); + if (ret != 0) { + goto cleanup; + } + + /* Match only augment.conf */ + const char *m_patterns[] = { "^tmp_augment_augment.conf$", NULL }; + + /* Match all sections */ + const char *m_sections[] = { ".*", NULL }; + + /* Create config collection */ + ret = ini_config_create(&in_cfg); + if (ret != EOK) + goto cleanup; + + /* Open base.conf */ + ret = ini_config_file_open(base_path, 0, &file_ctx); + if (ret != EOK) + goto cleanup; + + /* Seed in_cfg with base.conf */ + ret = ini_config_parse(file_ctx, 1, 0, 0, in_cfg); + if (ret != EOK) + goto cleanup; + + /* Update base.conf with augment.conf */ + ret = ini_config_augment(in_cfg, + builddir, + m_patterns, + m_sections, + NULL, + INI_STOP_ON_NONE, + 0, + INI_PARSE_NOSPACE|INI_PARSE_NOTAB, + merge_flags, + &result_cfg, + NULL, + NULL); + /* We always expect EEXIST due to DETECT being set. */ + if (ret != EEXIST) + goto cleanup; + + ret = 0; + +cleanup: + remove(base_path); + remove(augment_path); + + /* Per autoconf guidelines */ + if (ret != 0) + ret = 1; + + return ret; +} +]])] +,, [AC_MSG_ERROR(["ini_config library must support extended INI_MS_DETECT. See: https://pagure.io/SSSD/ding-libs/pull-request/3172"])]) + AX_PTHREAD(,[AC_MSG_ERROR([Could not find Pthreads support])])
LIBS="$PTHREAD_LIBS $LIBS" diff --git a/proxy/src/gp_config.c b/proxy/src/gp_config.c index 721598f..78474ed 100644 --- a/proxy/src/gp_config.c +++ b/proxy/src/gp_config.c @@ -753,7 +753,7 @@ static int gp_config_from_file(const char *config_file, 0, /* metadata_flags, FIXME */ &file_ctx); if (ret) { - GPDEBUG("Failed to open config file: %d (%s)\n", + GPERROR("Failed to open config file: %d (%s)\n", ret, gp_strerror(ret)); ini_config_destroy(ini_config); return ret; @@ -767,7 +767,7 @@ static int gp_config_from_file(const char *config_file, if (ret) { char **errors = NULL; /* we had a parsing failure */ - GPDEBUG("Failed to parse config file: %d (%s)\n", + GPERROR("Failed to parse config file: %d (%s)\n", ret, gp_strerror(ret)); if (ini_config_error_count(ini_config)) { ini_config_get_errors(ini_config, &errors); @@ -816,26 +816,25 @@ static int gp_config_from_dir(const char *config_dir, INI_STOP_ON_ANY, /* error_level */ collision_flags, INI_PARSE_NOWRAP, - /* do not allow colliding sections with the same - * name in different files */ - INI_MS_ERROR, + /* allow sections with the same name in + * different files, but log warnings */ + INI_MS_DETECT | INI_MS_PRESERVE, &result_cfg, &error_list, NULL); - if (ret) { + if (error_list) { uint32_t len; - - if (!error_list) { - GPAUDIT("Error when reading config directory number: %d\n", ret); - return ret; - } - len = ref_array_len(error_list); for (uint32_t i = 0; i < len; i++) { /* libini has an unfixable bug where error strings are (char **) */ GPAUDIT("Error when reading config directory: %s\n", *(char **)ref_array_get(error_list, i, NULL)); } + ref_array_destroy(error_list); + } + + if (ret && ret != EEXIST) { + GPERROR("Error when reading config directory number: %d\n", ret);
ref_array_destroy(error_list); return ret; @@ -846,9 +845,7 @@ static int gp_config_from_dir(const char *config_dir, ini_config_destroy(*ini_config); *ini_config = result_cfg; } - if (error_list) { - ref_array_destroy(error_list); - } + return 0; }
gss-proxy@lists.fedorahosted.org