From 117915ade070d8a22da5dd0b429f64577e91f2d5 Mon Sep 17 00:00:00 2001 From: Felipe Zipitria Date: Wed, 29 May 2024 09:07:14 -0300 Subject: [PATCH] refactor: add acquire mutex function Signed-off-by: Felipe Zipitria --- apache2/modsecurity.c | 43 +++++++++++++++++++++---------------------- apache2/modsecurity.h | 6 +----- 2 files changed, 22 insertions(+), 27 deletions(-) diff --git a/apache2/modsecurity.c b/apache2/modsecurity.c index 2b4b9bf975..a66184341c 100644 --- a/apache2/modsecurity.c +++ b/apache2/modsecurity.c @@ -122,6 +122,23 @@ msc_engine *modsecurity_create(apr_pool_t *mp, int processing_mode) { return msce; } +int acquire_global_lock(apr_global_mutex_t *lock, apr_pool_t *mp) { + apr_status_t rc; + apr_file_t *lock_name; + // use temp path template for lock files + char *path = apr_pstrcat(p, temp_dir, GLOBAL_LOCK_TEMPLATE, NULL); + + rc = apr_file_mktemp(&lock_name, path, 0, p) + if (rc != APR_SUCCESS) { + return -1 + } + + rc = apr_global_mutex_create(&lock_name, lock_name->fname, APR_LOCK_DEFAULT, mp); + if (rc != APR_SUCCESS) { + return -1; + } + return APR_SUCCESS; +} /** * Initialise the modsecurity engine. This function must be invoked * after configuration processing is complete as Apache needs to know the @@ -129,12 +146,6 @@ msc_engine *modsecurity_create(apr_pool_t *mp, int processing_mode) { */ int modsecurity_init(msc_engine *msce, apr_pool_t *mp) { apr_status_t rc; - apr_file_t *auditlog_lock_name; - apr_file_t *geo_lock_name; - apr_file_t *dbm_lock_name; - - // use temp path template for lock files - char *path = apr_pstrcat(p, temp_dir, "/modsec-lock-tmp.XXXXXX", NULL); msce->auditlog_lock = msce->geo_lock = NULL; #ifdef GLOBAL_COLLECTION_LOCK @@ -151,12 +162,8 @@ int modsecurity_init(msc_engine *msce, apr_pool_t *mp) { #ifdef WITH_CURL curl_global_init(CURL_GLOBAL_ALL); #endif - /* Serial audit log mutext */ - rc = apr_file_mktemp(&auditlog_lock_name, path, 0, p) - if (rc != APR_SUCCESS) { - return -1 - } - rc = apr_global_mutex_create(&msce->auditlog_lock, auditlog_lock_name, APR_LOCK_DEFAULT, mp); + /* Serial audit log mutex */ + rc = acquire_global_lock(&msce->auditlog_lock, mp); if (rc != APR_SUCCESS) { return -1; } @@ -175,11 +182,7 @@ int modsecurity_init(msc_engine *msce, apr_pool_t *mp) { } #endif /* SET_MUTEX_PERMS */ - rc = apr_file_mktemp(&geo_lock_name, path, 0, p) - if (rc != APR_SUCCESS) { - return -1 - } - rc = apr_global_mutex_create(&msce->geo_lock, geo_lock_name, APR_LOCK_DEFAULT, mp); + rc = acquire_global_lock(&msce->geo_lock, mp); if (rc != APR_SUCCESS) { return -1; } @@ -196,11 +199,7 @@ int modsecurity_init(msc_engine *msce, apr_pool_t *mp) { #endif /* SET_MUTEX_PERMS */ #ifdef GLOBAL_COLLECTION_LOCK - rc = apr_file_mktemp(&dbm_lock_name, path, 0, p) - if (rc != APR_SUCCESS) { - return -1 - } - rc = apr_global_mutex_create(&msce->dbm_lock, dbm_lock_name, APR_LOCK_DEFAULT, mp); + rc = acquire_global_lock(&msce->dbm_lock, mp); if (rc != APR_SUCCESS) { return -1; } diff --git a/apache2/modsecurity.h b/apache2/modsecurity.h index 8e1880edc2..ba5fa7e610 100644 --- a/apache2/modsecurity.h +++ b/apache2/modsecurity.h @@ -135,11 +135,7 @@ typedef struct msc_parm msc_parm; #define FATAL_ERROR "ModSecurity: Fatal error (memory allocation or unexpected internal error)!" -static char auditlog_lock_name[L_tmpnam]; -static char geo_lock_name[L_tmpnam]; -#ifdef GLOBAL_COLLECTION_LOCK -static char dbm_lock_name[L_tmpnam]; -#endif +#define GLOBAL_LOCK_TEMPLATE "/modsec-lock-tmp.XXXXXX" extern DSOLOCAL char *new_server_signature; extern DSOLOCAL char *real_server_signature;