We don't have to generate a temp name ourselves, it'll be done in apr_global_mutex_create().
We don't have to provide a filename, apr_global_mutex_create() generates one automatically.
Moreover, under Unix & Windows, the preferred mechanism won't use a file at all.
apr_file_mktemp() cannot be used as it creates the file (at least on FreeBSD).
Discussion in Apache mailing list: https://lists.apache.org/thread/ykb26kg4lgcqnldvxwd9p6hv16fy4z9l
This commit is contained in:
Marc Stern 2024-10-03 12:42:23 +02:00
parent 090e4d3baa
commit 23e3cb491a
2 changed files with 1 additions and 26 deletions

View File

@ -123,30 +123,7 @@ msc_engine *modsecurity_create(apr_pool_t *mp, int processing_mode) {
} }
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_global_mutex_create(lock, NULL, APR_LOCK_DEFAULT, mp);
apr_file_t *lock_name;
const char *temp_dir;
const char *filename = NULL;
// get platform temp dir
rc = apr_temp_dir_get(&temp_dir, mp);
if (rc != APR_SUCCESS) {
ap_log_perror(APLOG_MARK, APLOG_ERR, 0, mp, "ModSecurity: Could not get temp dir");
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) {
ap_log_perror(APLOG_MARK, APLOG_ERR, 0, mp, " ModSecurity: Could not create temporary file for global lock");
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) { if (rc != APR_SUCCESS) {
ap_log_perror(APLOG_MARK, APLOG_ERR, 0, mp, " ModSecurity: Could not create global mutex"); ap_log_perror(APLOG_MARK, APLOG_ERR, 0, mp, " ModSecurity: Could not create global mutex");
return -1; return -1;

View File

@ -135,8 +135,6 @@ 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)!"
#define GLOBAL_LOCK_TEMPLATE "/modsec-lock-tmp.XXXXXX"
extern DSOLOCAL char *new_server_signature; extern DSOLOCAL char *new_server_signature;
extern DSOLOCAL char *real_server_signature; extern DSOLOCAL char *real_server_signature;
extern DSOLOCAL char *chroot_dir; extern DSOLOCAL char *chroot_dir;