mirror of
https://github.com/owasp-modsecurity/ModSecurity.git
synced 2025-09-30 11:44:32 +03:00
refactor: add acquire mutex function
Signed-off-by: Felipe Zipitria <felipe.zipitria@owasp.org>
This commit is contained in:
@@ -122,6 +122,34 @@ 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) {
|
||||||
|
apr_status_t rc;
|
||||||
|
apr_file_t *lock_name;
|
||||||
|
const char *temp_dir;
|
||||||
|
const char *filename;
|
||||||
|
|
||||||
|
// get platform temp dir
|
||||||
|
rc = apr_temp_dir_get(&temp_dir, mp);
|
||||||
|
if (rc != APR_SUCCESS) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// use temp path template for lock files
|
||||||
|
char *path = apr_pstrcat(mp, temp_dir, GLOBAL_LOCK_TEMPLATE, NULL);
|
||||||
|
|
||||||
|
rc = apr_file_mktemp(&lock_name, path, 0, mp);
|
||||||
|
if (rc != APR_SUCCESS) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
// below func always return APR_SUCCESS
|
||||||
|
apr_file_name_get(&filename, lock_name);
|
||||||
|
|
||||||
|
rc = apr_global_mutex_create(&lock, filename, APR_LOCK_DEFAULT, mp);
|
||||||
|
if (rc != APR_SUCCESS) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return APR_SUCCESS;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Initialise the modsecurity engine. This function must be invoked
|
* Initialise the modsecurity engine. This function must be invoked
|
||||||
* after configuration processing is complete as Apache needs to know the
|
* after configuration processing is complete as Apache needs to know the
|
||||||
@@ -129,12 +157,6 @@ msc_engine *modsecurity_create(apr_pool_t *mp, int processing_mode) {
|
|||||||
*/
|
*/
|
||||||
int modsecurity_init(msc_engine *msce, apr_pool_t *mp) {
|
int modsecurity_init(msc_engine *msce, apr_pool_t *mp) {
|
||||||
apr_status_t rc;
|
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;
|
msce->auditlog_lock = msce->geo_lock = NULL;
|
||||||
#ifdef GLOBAL_COLLECTION_LOCK
|
#ifdef GLOBAL_COLLECTION_LOCK
|
||||||
@@ -151,12 +173,8 @@ int modsecurity_init(msc_engine *msce, apr_pool_t *mp) {
|
|||||||
#ifdef WITH_CURL
|
#ifdef WITH_CURL
|
||||||
curl_global_init(CURL_GLOBAL_ALL);
|
curl_global_init(CURL_GLOBAL_ALL);
|
||||||
#endif
|
#endif
|
||||||
/* Serial audit log mutext */
|
/* Serial audit log mutex */
|
||||||
rc = apr_file_mktemp(&auditlog_lock_name, path, 0, p)
|
rc = acquire_global_lock(msce->auditlog_lock, mp);
|
||||||
if (rc != APR_SUCCESS) {
|
|
||||||
return -1
|
|
||||||
}
|
|
||||||
rc = apr_global_mutex_create(&msce->auditlog_lock, auditlog_lock_name, APR_LOCK_DEFAULT, mp);
|
|
||||||
if (rc != APR_SUCCESS) {
|
if (rc != APR_SUCCESS) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@@ -175,11 +193,7 @@ int modsecurity_init(msc_engine *msce, apr_pool_t *mp) {
|
|||||||
}
|
}
|
||||||
#endif /* SET_MUTEX_PERMS */
|
#endif /* SET_MUTEX_PERMS */
|
||||||
|
|
||||||
rc = apr_file_mktemp(&geo_lock_name, path, 0, p)
|
rc = acquire_global_lock(msce->geo_lock, mp);
|
||||||
if (rc != APR_SUCCESS) {
|
|
||||||
return -1
|
|
||||||
}
|
|
||||||
rc = apr_global_mutex_create(&msce->geo_lock, geo_lock_name, APR_LOCK_DEFAULT, mp);
|
|
||||||
if (rc != APR_SUCCESS) {
|
if (rc != APR_SUCCESS) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@@ -196,11 +210,7 @@ int modsecurity_init(msc_engine *msce, apr_pool_t *mp) {
|
|||||||
#endif /* SET_MUTEX_PERMS */
|
#endif /* SET_MUTEX_PERMS */
|
||||||
|
|
||||||
#ifdef GLOBAL_COLLECTION_LOCK
|
#ifdef GLOBAL_COLLECTION_LOCK
|
||||||
rc = apr_file_mktemp(&dbm_lock_name, path, 0, p)
|
rc = acquire_global_lock(&msce->dbm_lock, mp);
|
||||||
if (rc != APR_SUCCESS) {
|
|
||||||
return -1
|
|
||||||
}
|
|
||||||
rc = apr_global_mutex_create(&msce->dbm_lock, dbm_lock_name, APR_LOCK_DEFAULT, mp);
|
|
||||||
if (rc != APR_SUCCESS) {
|
if (rc != APR_SUCCESS) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@@ -135,11 +135,7 @@ typedef struct msc_parm msc_parm;
|
|||||||
|
|
||||||
#define FATAL_ERROR "ModSecurity: Fatal error (memory allocation or unexpected internal error)!"
|
#define FATAL_ERROR "ModSecurity: Fatal error (memory allocation or unexpected internal error)!"
|
||||||
|
|
||||||
static char auditlog_lock_name[L_tmpnam];
|
#define GLOBAL_LOCK_TEMPLATE "/modsec-lock-tmp.XXXXXX"
|
||||||
static char geo_lock_name[L_tmpnam];
|
|
||||||
#ifdef GLOBAL_COLLECTION_LOCK
|
|
||||||
static char dbm_lock_name[L_tmpnam];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern DSOLOCAL char *new_server_signature;
|
extern DSOLOCAL char *new_server_signature;
|
||||||
extern DSOLOCAL char *real_server_signature;
|
extern DSOLOCAL char *real_server_signature;
|
||||||
|
Reference in New Issue
Block a user