X-Git-Url: http://git.madism.org/?a=blobdiff_plain;f=postlicyd%2Fconfig.c;h=75f7cc2f0a797b0ac07120bdaea2869ae5dbace9;hb=063d8a2ddca1e35efde7a3dec5eb04387dfb0922;hp=0111b7ae609618423c313d549e5e4047fe4741d0;hpb=1ee374e93e0d195185731be49d60c193e4182f08;p=apps%2Fpfixtools.git diff --git a/postlicyd/config.c b/postlicyd/config.c index 0111b7a..75f7cc2 100644 --- a/postlicyd/config.c +++ b/postlicyd/config.c @@ -16,17 +16,20 @@ /* products derived from this software without specific prior written */ /* permission. */ /* */ -/* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND */ -/* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE */ -/* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */ -/* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS */ -/* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR */ -/* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF */ -/* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS */ -/* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ -/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) */ -/* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF */ -/* THE POSSIBILITY OF SUCH DAMAGE. */ +/* THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND ANY EXPRESS */ +/* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED */ +/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY */ +/* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL */ +/* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS */ +/* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, */ +/* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN */ +/* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE */ +/* POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/* Copyright (c) 2006-2008 the Authors */ +/* see AUTHORS and source files for details */ /******************************************************************************/ /* @@ -36,6 +39,7 @@ #include "file.h" #include "config.h" #include "str.h" +#include "resources.h" #define config_param_register(Param) @@ -78,6 +82,12 @@ config_param_register("verify_filter"); config_param_register("port"); +/* Format of the log message. + * The message exact format is $log: "reply" + */ +config_param_register("log_format"); + + static config_t *global_config = NULL; static inline config_t *config_new(void) @@ -94,6 +104,7 @@ static void config_close(config_t *config) } array_deep_wipe(config->filters, filter_wipe); array_deep_wipe(config->params, filter_params_wipe); + p_delete(&config->log_format); } void config_delete(config_t **config) @@ -132,7 +143,6 @@ static bool config_parse(config_t *config) return false; } - config_close(config); filter_init(&filter); linep = p = map.map; @@ -396,11 +406,17 @@ static bool config_build_structure(config_t *config) CASE(ETRN, ETRN) #undef CASE FILTER_PARAM_PARSE_INT(PORT, config->port); + FILTER_PARAM_PARSE_STRING(LOG_FORMAT, config->log_format, true); default: break; } }} array_deep_wipe(config->params, filter_params_wipe); + if (config->log_format && !query_format_check(config->log_format)) { + err("invalid log format: \"%s\"", config->log_format); + return false; + } + if (!ok) { err("no entry point defined"); } @@ -419,6 +435,8 @@ static bool config_build_filters(config_t *config) } static bool config_load(config_t *config) { + config_close(config); + if (!config_parse(config)) { err("Invalid configuration: cannot parse configuration file \"%s\"", config->filename); return false; @@ -431,6 +449,8 @@ static bool config_load(config_t *config) { err("Invalid configuration: invalid filter"); return false; } + + resource_garbage_collect(); return true; }