From 29ed5c4dc7d5890144c48fb82fc1595d54cf7498 Mon Sep 17 00:00:00 2001 From: Breno Silva Date: Thu, 2 May 2013 08:04:26 -0400 Subject: [PATCH] Added: SDBM_DELETE_ERROR variable --- apache2/modsecurity.h | 2 ++ apache2/persist_dbm.c | 4 +++- apache2/re_variables.c | 24 ++++++++++++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/apache2/modsecurity.h b/apache2/modsecurity.h index 35ddddf6..35d07312 100644 --- a/apache2/modsecurity.h +++ b/apache2/modsecurity.h @@ -442,6 +442,8 @@ struct modsec_rec { lua_State *L; #endif #endif + + int msc_sdbm_delete_error; }; struct directory_config { diff --git a/apache2/persist_dbm.c b/apache2/persist_dbm.c index f212774c..b698e791 100644 --- a/apache2/persist_dbm.c +++ b/apache2/persist_dbm.c @@ -220,6 +220,7 @@ static apr_table_t *collection_retrieve_ex(apr_sdbm_t *existing_dbm, modsec_rec msr_log(msr, 1, "collection_retrieve_ex: Failed deleting collection (name \"%s\", " "key \"%s\"): %s", log_escape(msr->mp, col_name), log_escape_ex(msr->mp, col_key, col_key_len), get_apr_error(msr->mp, rc)); + msr->msc_sdbm_delete_error = 1; goto cleanup; } @@ -678,9 +679,10 @@ int collections_remove_stale(modsec_rec *msr, const char *col_name) { msr_log(msr, 1, "collections_remove_stale: Failed deleting collection (name \"%s\", " "key \"%s\"): %s", log_escape(msr->mp, col_name), log_escape_ex(msr->mp, key.dptr, key.dsize - 1), get_apr_error(msr->mp, rc)); + msr->msc_sdbm_delete_error = 1; goto error; } - + if (msr->txcfg->debuglog_level >= 4) { msr_log(msr, 4, "collections_remove_stale: Removed stale collection (name \"%s\", " "key \"%s\").", log_escape(msr->mp, col_name), diff --git a/apache2/re_variables.c b/apache2/re_variables.c index 98448d04..b2fc71cc 100644 --- a/apache2/re_variables.c +++ b/apache2/re_variables.c @@ -511,6 +511,19 @@ static int var_reqbody_processor_generate(modsec_rec *msr, msre_var *var, msre_r return 1; } +/* SDBM_DELETE_ERROR */ +static int var_sdbm_delete_error_generate(modsec_rec *msr, msre_var *var, msre_rule *rule, + apr_table_t *vartab, apr_pool_t *mptmp) +{ + msre_var *rvar = apr_pmemdup(mptmp, var, sizeof(msre_var)); + + rvar->value = apr_psprintf(mptmp, "%d", msr->msc_sdbm_delete_error); + rvar->value_len = strlen(rvar->value); + apr_table_addn(vartab, rvar->name, (void *)rvar); + + return 1; +} + /* REQBODY_ERROR */ static int var_reqbody_processor_error_generate(modsec_rec *msr, msre_var *var, msre_rule *rule, @@ -3145,6 +3158,17 @@ void msre_engine_register_default_variables(msre_engine *engine) { PHASE_REQUEST_HEADERS ); + /* REQBODY_PROCESSOR_ERROR - Deprecated */ + msre_engine_variable_register(engine, + "SDBM_DELETE_ERROR", + VAR_SIMPLE, + 0, 0, + NULL, + var_sdbm_delete_error_generate, + VAR_DONT_CACHE, /* dynamic */ + PHASE_REQUEST_BODY + ); + /* REQBODY_PROCESSOR_ERROR - Deprecated */ msre_engine_variable_register(engine, "REQBODY_PROCESSOR_ERROR",