@@ -135,13 +135,47 @@ msc_engine *modsecurity_create(apr_pool_t *mp, int processing_mode) {
135
135
return msce ;
136
136
}
137
137
138
+ static void set_lock_args (struct waf_lock_args * lock_args , int lock_id ) {
139
+ if (lock_args == NULL ) {
140
+ return ;
141
+ }
142
+
143
+ #ifdef _WIN32
144
+ switch (lock_id ) {
145
+ case AUDITLOG_LOCK_ID :
146
+ lock_args -> lock_name = AUDITLOG_LOCK_NAME ;
147
+ lock_args -> lock_name_length = strlen (AUDITLOG_LOCK_NAME );
148
+ break ;
149
+ case WAFJSONLOG_LOCK_ID :
150
+ lock_args -> lock_name = WAFJSONLOG_LOCK_NAME ;
151
+ lock_args -> lock_name_length = strlen (WAFJSONLOG_LOCK_NAME );
152
+ break ;
153
+ case GEO_LOCK_ID :
154
+ lock_args -> lock_name = GEO_LOCK_NAME ;
155
+ lock_args -> lock_name_length = strlen (GEO_LOCK_NAME );
156
+ break ;
157
+ case DBM_LOCK_ID :
158
+ lock_args -> lock_name = DBM_LOCK_NAME ;
159
+ lock_args -> lock_name_length = strlen (DBM_LOCK_NAME );
160
+ break ;
161
+ default :
162
+ break ;
163
+ }
164
+
165
+ #else
166
+ lock_args -> lock_id = lock_id ;
167
+ #endif
168
+ }
169
+
138
170
/**
139
171
* Initialise the modsecurity engine. This function must be invoked
140
172
* after configuration processing is complete as Apache needs to know the
141
173
* username it is running as.
142
174
*/
143
175
int modsecurity_init (msc_engine * msce , apr_pool_t * mp ) {
144
176
apr_status_t rc ;
177
+ struct waf_lock_args * lock_args ;
178
+ char * lock_name ;
145
179
146
180
/**
147
181
* Notice that curl is initialized here but never cleaned up. First version
@@ -153,85 +187,51 @@ int modsecurity_init(msc_engine *msce, apr_pool_t *mp) {
153
187
#ifdef WITH_CURL
154
188
curl_global_init (CURL_GLOBAL_ALL );
155
189
#endif
190
+ lock_args = apr_pcalloc (mp , sizeof (struct waf_lock_args ));
191
+
156
192
/* Serial audit log mutext */
157
- rc = apr_global_mutex_create (& msce -> auditlog_lock , NULL , APR_LOCK_DEFAULT , mp );
158
- if (rc != APR_SUCCESS ) {
193
+ set_lock_args (lock_args , AUDITLOG_LOCK_ID );
194
+
195
+ msce -> auditlog_lock = apr_pcalloc (mp , sizeof (struct waf_lock ));
196
+ rc = waf_create_lock (msce -> auditlog_lock , lock_args );
197
+ if (waf_lock_is_error (rc )) {
159
198
//ap_log_error(APLOG_MARK, APLOG_ERR, rv, s, "mod_security: Could not create modsec_auditlog_lock");
160
199
//return HTTP_INTERNAL_SERVER_ERROR;
161
200
return -1 ;
162
201
}
163
202
164
203
#ifdef WAF_JSON_LOGGING_ENABLE
165
204
/* Serial wafjson log mutext */
166
- rc = apr_global_mutex_create (& msce -> wafjsonlog_lock , NULL , APR_LOCK_DEFAULT , mp );
167
- if (rc != APR_SUCCESS ) {
205
+ set_lock_args (lock_args , WAFJSONLOG_LOCK_ID );
206
+
207
+ msce -> wafjsonlog_lock = apr_pcalloc (mp , sizeof (struct waf_lock ));
208
+ rc = waf_create_lock (msce -> wafjsonlog_lock , lock_args );
209
+ if (waf_lock_is_error (rc )) {
168
210
//ap_log_error(APLOG_MARK, APLOG_ERR, rv, s, "mod_security: Could not create modsec_wafjsonlog_lock");
169
211
//return HTTP_INTERNAL_SERVER_ERROR;
170
212
return -1 ;
171
213
}
172
214
#endif
173
215
174
- #if !defined(MSC_TEST )
175
- #ifdef __SET_MUTEX_PERMS
176
- #if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2
177
- rc = ap_unixd_set_global_mutex_perms (msce -> auditlog_lock );
178
- #else
179
- rc = unixd_set_global_mutex_perms (msce -> auditlog_lock );
180
- #endif
181
- if (rc != APR_SUCCESS ) {
182
- // ap_log_error(APLOG_MARK, APLOG_ERR, rc, s, "mod_security: Could not set permissions on modsec_auditlog_lock; check User and Group directives");
183
- // return HTTP_INTERNAL_SERVER_ERROR;
184
- return -1 ;
185
- }
186
- #endif /* SET_MUTEX_PERMS */
187
-
188
- #ifdef WAF_JSON_LOGGING_ENABLE
189
- #ifdef __SET_MUTEX_PERMS
190
- #if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2
191
- rc = ap_unixd_set_global_mutex_perms (msce -> wafjsonlog_lock );
192
- #else
193
- rc = unixd_set_global_mutex_perms (msce -> wafjsonlog_lock );
194
- #endif
195
- if (rc != APR_SUCCESS ) {
196
- // ap_log_error(APLOG_MARK, APLOG_ERR, rc, s, "mod_security: Could not set permissions on modsec_wafjsonlog_lock; check User and Group directives");
197
- // return HTTP_INTERNAL_SERVER_ERROR;
198
- return -1 ;
199
- }
200
- #endif /* SET_MUTEX_PERMS */
201
- #endif
216
+ // Have removed all the lock permission related code since we implment in different way now
202
217
203
- rc = apr_global_mutex_create (& msce -> geo_lock , NULL , APR_LOCK_DEFAULT , mp );
204
- if (rc != APR_SUCCESS ) {
205
- return -1 ;
206
- }
218
+ #if !defined(MSC_TEST )
219
+ set_lock_args (lock_args , GEO_LOCK_ID );
207
220
208
- #ifdef __SET_MUTEX_PERMS
209
- #if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2
210
- rc = ap_unixd_set_global_mutex_perms (msce -> geo_lock );
211
- #else
212
- rc = unixd_set_global_mutex_perms (msce -> geo_lock );
213
- #endif
214
- if (rc != APR_SUCCESS ) {
221
+ msce -> geo_lock = apr_pcalloc (mp , sizeof (struct waf_lock ));
222
+ rc = waf_create_lock (msce -> geo_lock , lock_args );
223
+ if (waf_lock_is_error (rc )) {
215
224
return -1 ;
216
225
}
217
- #endif /* SET_MUTEX_PERMS */
218
226
219
227
#ifdef GLOBAL_COLLECTION_LOCK
220
- rc = apr_global_mutex_create (& msce -> dbm_lock , NULL , APR_LOCK_DEFAULT , mp );
221
- if (rc != APR_SUCCESS ) {
222
- return -1 ;
223
- }
228
+ set_lock_args (lock_args , DBM_LOCK_ID );
224
229
225
- #ifdef __SET_MUTEX_PERMS
226
- #if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2
227
- rc = ap_unixd_set_global_mutex_perms (msce -> dbm_lock );
228
- #else
229
- rc = unixd_set_global_mutex_perms (msce -> dbm_lock );
230
- #endif
231
- if (rc != APR_SUCCESS ) {
230
+ msce -> dbm_lock = apr_pcalloc (mp , sizeof (struct waf_lock ));
231
+ rc = waf_create_lock (msce -> dbm_lock , lock_args );
232
+ if (waf_lock_is_error (rc )) {
232
233
return -1 ;
233
234
}
234
- #endif /* SET_MUTEX_PERMS */
235
235
#endif
236
236
#endif
237
237
@@ -242,39 +242,47 @@ int modsecurity_init(msc_engine *msce, apr_pool_t *mp) {
242
242
* Performs per-child (new process) initialisation.
243
243
*/
244
244
void modsecurity_child_init (msc_engine * msce ) {
245
+ struct waf_lock_args * lock_args ;
246
+ char * lock_name ;
247
+
245
248
/* Need to call this once per process before any other XML calls. */
246
249
xmlInitParser ();
250
+ lock_args = apr_pcalloc (msce -> mp , sizeof (struct waf_lock_args ));
247
251
248
- if (msce -> auditlog_lock != NULL ) {
249
- apr_status_t rc = apr_global_mutex_child_init (& msce -> auditlog_lock , NULL , msce -> mp );
250
- if (rc != APR_SUCCESS ) {
251
- // ap_log_error(APLOG_MARK, APLOG_ERR, rs, s, "Failed to child-init auditlog mutex");
252
- }
252
+ if (msce -> auditlog_lock == NULL ) {
253
+ msce -> auditlog_lock = apr_pcalloc (msce -> mp , sizeof (struct waf_lock ));
253
254
}
254
255
256
+ set_lock_args (lock_args , AUDITLOG_LOCK_ID );
257
+
258
+ waf_create_lock (msce -> auditlog_lock , lock_args );
259
+
255
260
#ifdef WAF_JSON_LOGGING_ENABLE
256
- if (msce -> wafjsonlog_lock != NULL ) {
257
- apr_status_t rc = apr_global_mutex_child_init (& msce -> wafjsonlog_lock , NULL , msce -> mp );
258
- if (rc != APR_SUCCESS ) {
259
- // ap_log_error(APLOG_MARK, APLOG_ERR, rs, s, "Failed to child-init auditlog mutex");
260
- }
261
+ if (msce -> wafjsonlog_lock == NULL ) {
262
+ msce -> wafjsonlog_lock = apr_pcalloc (msce -> mp , sizeof (struct waf_lock ));
261
263
}
264
+
265
+ set_lock_args (lock_args , WAFJSONLOG_LOCK_ID );
266
+
267
+ waf_create_lock (msce -> wafjsonlog_lock , lock_args );
262
268
#endif
263
269
264
- if (msce -> geo_lock != NULL ) {
265
- apr_status_t rc = apr_global_mutex_child_init (& msce -> geo_lock , NULL , msce -> mp );
266
- if (rc != APR_SUCCESS ) {
267
- // ap_log_error(APLOG_MARK, APLOG_ERR, rs, s, "Failed to child-init geo mutex");
268
- }
270
+ if (msce -> geo_lock == NULL ) {
271
+ msce -> geo_lock = apr_pcalloc (msce -> mp , sizeof (struct waf_lock ));
269
272
}
270
273
274
+ set_lock_args (lock_args , GEO_LOCK_ID );
275
+
276
+ waf_create_lock (msce -> geo_lock , lock_args );
277
+
271
278
#ifdef GLOBAL_COLLECTION_LOCK
272
- if (msce -> dbm_lock != NULL ) {
273
- apr_status_t rc = apr_global_mutex_child_init (& msce -> dbm_lock , NULL , msce -> mp );
274
- if (rc != APR_SUCCESS ) {
275
- // ap_log_error(APLOG_MARK, APLOG_ERR, rs, s, "Failed to child-init dbm mutex");
276
- }
279
+ if (msce -> dbm_lock == NULL ) {
280
+ msce -> dbm_lock = apr_pcalloc (msce -> mp , sizeof (struct waf_lock ));
277
281
}
282
+
283
+ set_lock_args (lock_args , DBM_LOCK_ID );
284
+
285
+ waf_create_lock (msce -> dbm_lock , lock_args );
278
286
#endif
279
287
280
288
}
0 commit comments