From 48df50444fe449c3ba0cb7ded2ed7bf76e57a435 Mon Sep 17 00:00:00 2001 From: blotus Date: Fri, 20 Oct 2017 11:23:18 +0200 Subject: Add support for multiple files in sp.configuration_file directive This should close (#45--- doc/source/config.rst | 3 +++ src/snuffleupagus.c | 10 +++++++++- src/tests/config/config_multi1.ini | 1 + src/tests/config/config_multi2.ini | 1 + src/tests/multi_config.phpt | 23 +++++++++++++++++++++++ 5 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 src/tests/config/config_multi1.ini create mode 100644 src/tests/config/config_multi2.ini create mode 100644 src/tests/multi_config.phpt diff --git a/doc/source/config.rst b/doc/source/config.rst index b7fa803..3f0115b 100644 --- a/doc/source/config.rst +++ b/doc/source/config.rst @@ -6,6 +6,9 @@ Snuffleupagus is using its own format in the file specified by the directive ``sp.configuration_file`` (in your ``php.ini`` file), like ``sp.configuration_file=/etc/php/conf.d/snuffleupagus.ini``. +You can use the ``,`` separator to include multiple configuration files : +``sp.configuration_file=/etc/php/conf.d/snuffleupagus.ini,/etc/php/conf.d/sp_wordpress.ini`` + Options are chainable by using dots (``.``) and string parameters **must** be quoted, while booleans and integers aren't. diff --git a/src/snuffleupagus.c b/src/snuffleupagus.c index 4f02065..01bc4f6 100644 --- a/src/snuffleupagus.c +++ b/src/snuffleupagus.c @@ -154,13 +154,21 @@ PHP_MINFO_FUNCTION(snuffleupagus) { static PHP_INI_MH(OnUpdateConfiguration) { TSRMLS_FETCH(); + char *config_file = NULL; + if (!new_value || !new_value->len) { return FAILURE; } - if (sp_parse_config(new_value->val) != SUCCESS) { + config_file = strtok(new_value->val, ","); + if (sp_parse_config(config_file) != SUCCESS) { return FAILURE; } + while ((config_file = strtok(NULL, ","))) { + if (sp_parse_config(config_file) != SUCCESS) { + return FAILURE; + } + } if (SNUFFLEUPAGUS_G(config).config_random->enable) { hook_rand(); diff --git a/src/tests/config/config_multi1.ini b/src/tests/config/config_multi1.ini new file mode 100644 index 0000000..08ebd72 --- /dev/null +++ b/src/tests/config/config_multi1.ini @@ -0,0 +1 @@ +sp.disable_function.function("foo").simulation().drop(); \ No newline at end of file diff --git a/src/tests/config/config_multi2.ini b/src/tests/config/config_multi2.ini new file mode 100644 index 0000000..487e322 --- /dev/null +++ b/src/tests/config/config_multi2.ini @@ -0,0 +1 @@ +sp.disable_function.function("bla").simulation().drop(); \ No newline at end of file diff --git a/src/tests/multi_config.phpt b/src/tests/multi_config.phpt new file mode 100644 index 0000000..24e69ab --- /dev/null +++ b/src/tests/multi_config.phpt @@ -0,0 +1,23 @@ +--TEST-- +Multiple configuration files +--SKIPIF-- + +--INI-- +sp.configuration_file={PWD}/config/config_multi2.ini,{PWD}/config/config_multi1.ini +--FILE-- + +--EXPECTF-- +[snuffleupagus][0.0.0.0][disabled_function][simulation] The call to the function 'foo' in %s/src/tests/multi_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/multi_config.php:%d has been disabled. +2 + -- cgit v1.3