From a09a48c605a36e052446f47b4e0eb98f9b8398a2 Mon Sep 17 00:00:00 2001 From: Sebastien Blot Date: Thu, 18 Jan 2018 11:07:06 +0100 Subject: Add globbing support for configuration file path (closes #125) --- src/snuffleupagus.c | 34 ++++++++++++++++++++++++++++++---- src/tests/glob_config.phpt | 23 +++++++++++++++++++++++ 2 files changed, 53 insertions(+), 4 deletions(-) create mode 100644 src/tests/glob_config.phpt (limited to 'src') diff --git a/src/snuffleupagus.c b/src/snuffleupagus.c index 78a8659..32a4198 100644 --- a/src/snuffleupagus.c +++ b/src/snuffleupagus.c @@ -1,3 +1,5 @@ +#include + #ifdef HAVE_CONFIG_H #include "config.h" #endif @@ -182,15 +184,39 @@ static PHP_INI_MH(OnUpdateConfiguration) { } config_file = strtok(new_value->val, ","); - if (sp_parse_config(config_file) != SUCCESS) { - SNUFFLEUPAGUS_G(is_config_valid) = false; + + glob_t globbuf; + + int ret = glob(config_file, GLOB_BRACE|GLOB_NOCHECK, NULL, &globbuf); + + if (ret != 0) { return FAILURE; } - while ((config_file = strtok(NULL, ","))) { - if (sp_parse_config(config_file) != SUCCESS) { + + size_t i = 0; + while (globbuf.gl_pathv[i]) { + if (sp_parse_config(globbuf.gl_pathv[i]) != SUCCESS) { SNUFFLEUPAGUS_G(is_config_valid) = false; return FAILURE; } + i++; + } + globfree(&globbuf); + i = 0; + + while ((config_file = strtok(NULL, ","))) { + ret = glob(config_file, GLOB_BRACE|GLOB_NOCHECK, NULL, &globbuf); + if (ret != 0 ) { + return FAILURE; + } + while (globbuf.gl_pathv[i]) { + if (sp_parse_config(globbuf.gl_pathv[i]) != SUCCESS) { + SNUFFLEUPAGUS_G(is_config_valid) = false; + return FAILURE; + } + i++; + } + globfree(&globbuf); } SNUFFLEUPAGUS_G(is_config_valid) = true; diff --git a/src/tests/glob_config.phpt b/src/tests/glob_config.phpt new file mode 100644 index 0000000..929664f --- /dev/null +++ b/src/tests/glob_config.phpt @@ -0,0 +1,23 @@ +--TEST-- +Multiple configuration files +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_multi*.ini +--FILE-- + +--EXPECTF-- +[snuffleupagus][0.0.0.0][disabled_function][simulation] The call to the function 'foo' in %s/src/tests/glob_config.php:%d has been disabled. +1 +[snuffleupagus][0.0.0.0][disabled_function][simulation] The call to the function 'bla' in %s/src/tests/glob_config.php:%d has been disabled. +2 + -- cgit v1.3