Merge branch 'v2/master' of https://github.com/marcstern/ModSecurity into v2/pr/assert

This commit is contained in:
Marc Stern 2024-08-02 17:52:01 +02:00
commit cb11716af7
3 changed files with 15 additions and 18 deletions

View File

@ -122,7 +122,7 @@ msc_engine *modsecurity_create(apr_pool_t *mp, int processing_mode) {
return msce; return msce;
} }
int acquire_global_lock(apr_global_mutex_t *lock, apr_pool_t *mp) { int acquire_global_lock(apr_global_mutex_t **lock, apr_pool_t *mp) {
apr_status_t rc; apr_status_t rc;
apr_file_t *lock_name; apr_file_t *lock_name;
const char *temp_dir; const char *temp_dir;
@ -146,7 +146,7 @@ int acquire_global_lock(apr_global_mutex_t *lock, apr_pool_t *mp) {
// below func always return APR_SUCCESS // below func always return APR_SUCCESS
apr_file_name_get(&filename, lock_name); apr_file_name_get(&filename, lock_name);
rc = apr_global_mutex_create(&lock, filename, APR_LOCK_DEFAULT, mp); rc = apr_global_mutex_create(lock, filename, APR_LOCK_DEFAULT, mp);
if (rc != APR_SUCCESS) { if (rc != APR_SUCCESS) {
ap_log_perror(APLOG_MARK, APLOG_ERR, 0, NULL, " ModSecurity: Could not create global mutex"); ap_log_perror(APLOG_MARK, APLOG_ERR, 0, NULL, " ModSecurity: Could not create global mutex");
return -1; return -1;
@ -154,11 +154,12 @@ int acquire_global_lock(apr_global_mutex_t *lock, apr_pool_t *mp) {
#if !defined(MSC_TEST) #if !defined(MSC_TEST)
#ifdef __SET_MUTEX_PERMS #ifdef __SET_MUTEX_PERMS
#if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2 #if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2
rc = ap_unixd_set_global_mutex_perms(lock); rc = ap_unixd_set_global_mutex_perms(*lock);
#else #else
rc = unixd_set_global_mutex_perms(lock); rc = unixd_set_global_mutex_perms(*lock);
#endif #endif
if (rc != APR_SUCCESS) { if (rc != APR_SUCCESS) {
ap_log_perror(APLOG_MARK, APLOG_ERR, 0, NULL, " ModSecurity: Could not set permissions on global mutex");
return -1; return -1;
} }
#endif /* SET_MUTEX_PERMS */ #endif /* SET_MUTEX_PERMS */
@ -189,21 +190,15 @@ int modsecurity_init(msc_engine *msce, apr_pool_t *mp) {
curl_global_init(CURL_GLOBAL_ALL); curl_global_init(CURL_GLOBAL_ALL);
#endif #endif
/* Serial audit log mutex */ /* Serial audit log mutex */
rc = acquire_global_lock(msce->auditlog_lock, mp); rc = acquire_global_lock(&msce->auditlog_lock, mp);
if (rc != APR_SUCCESS) { if (rc != APR_SUCCESS) return -1;
return -1;
}
rc = acquire_global_lock(msce->geo_lock, mp); rc = acquire_global_lock(&msce->geo_lock, mp);
if (rc != APR_SUCCESS) { if (rc != APR_SUCCESS) return -1;
return -1;
}
#ifdef GLOBAL_COLLECTION_LOCK #ifdef GLOBAL_COLLECTION_LOCK
rc = acquire_global_lock(&msce->dbm_lock, mp); rc = acquire_global_lock(&msce->dbm_lock, mp);
if (rc != APR_SUCCESS) { if (rc != APR_SUCCESS) return -1;
return -1;
}
#endif /* GLOBAL_COLLECTION_LOCK */ #endif /* GLOBAL_COLLECTION_LOCK */
return 1; return 1;

View File

@ -706,7 +706,7 @@ struct msc_parm {
}; };
/* Reusable functions */ /* Reusable functions */
int acquire_global_lock(apr_global_mutex_t *lock, apr_pool_t *mp); int acquire_global_lock(apr_global_mutex_t **lock, apr_pool_t *mp);
/* Engine functions */ /* Engine functions */

View File

@ -766,13 +766,12 @@ static int var_xml_generate(modsec_rec *msr, msre_var *var, msre_rule *rule,
} }
/* Create one variable for each node in the result. */ /* Create one variable for each node in the result. */
char* content = NULL;
for(i = 0; i < nodes->nodeNr; i++) { for(i = 0; i < nodes->nodeNr; i++) {
msre_var *rvar = NULL; msre_var *rvar = NULL;
char *content = NULL;
content = (char *)xmlNodeGetContent(nodes->nodeTab[i]); content = (char *)xmlNodeGetContent(nodes->nodeTab[i]);
if (content != NULL) { if (content != NULL) {
xmlFree(content);
rvar = apr_pmemdup(mptmp, var, sizeof(msre_var)); rvar = apr_pmemdup(mptmp, var, sizeof(msre_var));
if (!rvar) { if (!rvar) {
msr_log(msr, 1, "XML: Memory allocation error"); msr_log(msr, 1, "XML: Memory allocation error");
@ -787,12 +786,15 @@ static int var_xml_generate(modsec_rec *msr, msre_var *var, msre_rule *rule,
} }
rvar->value_len = strlen(rvar->value); rvar->value_len = strlen(rvar->value);
apr_table_addn(vartab, rvar->name, (void *)rvar); apr_table_addn(vartab, rvar->name, (void *)rvar);
xmlFree(content);
content = NULL;
count++; count++;
} }
} }
var_xml_generate_Error: var_xml_generate_Error:
if (content != NULL) xmlFree(content);
xmlXPathFreeObject(xpathObj); xmlXPathFreeObject(xpathObj);
xmlXPathFreeContext(xpathCtx); xmlXPathFreeContext(xpathCtx);