mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-12-27 10:09:43 -05:00
fix ITS#3932 - regex/rewrite concurrency issue
This commit is contained in:
parent
d8fbe2d32c
commit
388c076768
2 changed files with 23 additions and 1 deletions
|
|
@ -206,6 +206,9 @@ struct rewrite_rule {
|
|||
char *lr_pattern;
|
||||
char *lr_subststring;
|
||||
char *lr_flagstring;
|
||||
#ifdef USE_REWRITE_LDAP_PVT_THREADS
|
||||
ldap_pvt_thread_mutex_t lr_mutex;
|
||||
#endif /* USE_REWRITE_LDAP_PVT_THREADS */
|
||||
regex_t lr_regex;
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -346,6 +346,14 @@ rewrite_rule_compile(
|
|||
return REWRITE_ERR;
|
||||
}
|
||||
|
||||
#ifdef USE_REWRITE_LDAP_PVT_THREADS
|
||||
if ( ldap_pvt_thread_mutex_init( &rule->lr_mutex ) ) {
|
||||
regfree( &rule->lr_regex );
|
||||
free( rule );
|
||||
return REWRITE_ERR;
|
||||
}
|
||||
#endif /* USE_REWRITE_LDAP_PVT_THREADS */
|
||||
|
||||
/*
|
||||
* Just to remember them ...
|
||||
*/
|
||||
|
|
@ -418,7 +426,15 @@ recurse:;
|
|||
rule->lr_pattern, string, strcnt + 1 );
|
||||
|
||||
op->lo_num_passes++;
|
||||
if ( regexec( &rule->lr_regex, string, nmatch, match, 0 ) != 0 ) {
|
||||
|
||||
#ifdef USE_REWRITE_LDAP_PVT_THREADS
|
||||
ldap_pvt_thread_mutex_lock( &rule->lr_mutex );
|
||||
#endif /* USE_REWRITE_LDAP_PVT_THREADS */
|
||||
rc = regexec( &rule->lr_regex, string, nmatch, match, 0 );
|
||||
#ifdef USE_REWRITE_LDAP_PVT_THREADS
|
||||
ldap_pvt_thread_mutex_unlock( &rule->lr_mutex );
|
||||
#endif /* USE_REWRITE_LDAP_PVT_THREADS */
|
||||
if ( rc != 0 ) {
|
||||
if ( *result == NULL && string != arg ) {
|
||||
free( string );
|
||||
}
|
||||
|
|
@ -487,6 +503,9 @@ rewrite_rule_destroy(
|
|||
}
|
||||
|
||||
regfree( &rule->lr_regex );
|
||||
#ifdef USE_REWRITE_LDAP_PVT_THREADS
|
||||
ldap_pvt_thread_mutex_destroy( &rule->lr_mutex );
|
||||
#endif /* USE_REWRITE_LDAP_PVT_THREADS */
|
||||
|
||||
for ( action = rule->lr_action; action; ) {
|
||||
struct rewrite_action *curraction = action;
|
||||
|
|
|
|||
Loading…
Reference in a new issue