From 5a6ce01429b0cbdcb4e1ea4c7241dbe621ad480c Mon Sep 17 00:00:00 2001 From: brectanus Date: Wed, 8 Aug 2007 14:48:49 +0000 Subject: [PATCH] Added logging of target variable expansion. See #62. --- CHANGES | 4 +++- apache2/re.c | 18 ++++++++++++++++++ apache2/re.h | 1 + 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 301fa4fe..b77312c3 100644 --- a/CHANGES +++ b/CHANGES @@ -1,7 +1,9 @@ ?? ??? 2007 - 2.5.0-trunk ------------------------- - * Cleaned up some documentation. + * Enhanced debug logging. + + * Cleaned up and clarified some documentation. * Performance improvements and greater control over caching transformations. diff --git a/apache2/re.c b/apache2/re.c index b97853f7..1c323fba 100644 --- a/apache2/re.c +++ b/apache2/re.c @@ -1042,6 +1042,7 @@ msre_rule *msre_rule_create(msre_ruleset *ruleset, if (rule == NULL) return NULL; rule->ruleset = ruleset; rule->targets = apr_array_make(ruleset->mp, 10, sizeof(const msre_var *)); + rule->p1 = apr_pstrdup(ruleset->mp, targets); rule->filename = apr_pstrdup(ruleset->mp, fn); rule->line_num = line; @@ -1345,6 +1346,23 @@ apr_status_t msre_rule_process(msre_rule *rule, modsec_rec *msr) { } } + /* Log the target variable expansion */ + if (msr->txcfg->debuglog_level >= 4) { + const char *expnames = NULL; + + arr = apr_table_elts(tartab); + te = (apr_table_entry_t *)arr->elts; + if (arr->nelts > 0) { + expnames = apr_pstrdup(mptmp, ((msre_var *)te[0].val)->name); + for(i = 1; i < arr->nelts; i++) { + expnames = apr_psprintf(mptmp, "%s|%s", expnames, ((msre_var *)te[i].val)->name); + } + if (strcmp(rule->p1, expnames) != 0) { + msr_log(msr, 4, "Expanded \"%s\" to \"%s\".", rule->p1, expnames); + } + } + } + /* Loop through targets on the final target list, * perform transformations as necessary, and invoke * the operator. diff --git a/apache2/re.h b/apache2/re.h index c9c9fd9d..07e6368c 100644 --- a/apache2/re.h +++ b/apache2/re.h @@ -117,6 +117,7 @@ struct msre_rule { msre_op_metadata *op_metadata; unsigned int op_negated; msre_actionset *actionset; + const char *p1; const char *filename; int line_num;