diff options
author | Rich Megginson <rmeggins@redhat.com> | 2010-03-25 11:51:26 -0600 |
---|---|---|
committer | Rich Megginson <rmeggins@redhat.com> | 2010-03-25 12:26:30 -0600 |
commit | c1d2e7461ac41f39f5f27f3d9dcd6084bb4435a5 (patch) | |
tree | 0f4a7bb06d66e241bead206087bc3d04256eebb0 /ldap/servers/slapd/filterentry.c | |
parent | 742032c11f0dabbdc80ba204801c27c4cbe305a4 (diff) | |
download | ds-c1d2e7461ac41f39f5f27f3d9dcd6084bb4435a5.tar.gz ds-c1d2e7461ac41f39f5f27f3d9dcd6084bb4435a5.tar.xz ds-c1d2e7461ac41f39f5f27f3d9dcd6084bb4435a5.zip |
Bug 576074 - search filters with parentheses fail
https://bugzilla.redhat.com/show_bug.cgi?id=576074
Resolves: bug 576074
Bug Description: search filters with parentheses fail
Reviewed by: nhosoi (Thanks!)
Branch: HEAD
Fix Description: PCRE requires '(' and ')' to be escaped to match a literal
parenthesis. Otherwise, it thinks the parenthesis is used for grouping.
Platforms tested: RHEL5 x86_64
Flag Day: no
Doc impact: no
Diffstat (limited to 'ldap/servers/slapd/filterentry.c')
-rw-r--r-- | ldap/servers/slapd/filterentry.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/ldap/servers/slapd/filterentry.c b/ldap/servers/slapd/filterentry.c index f5666763..f163b472 100644 --- a/ldap/servers/slapd/filterentry.c +++ b/ldap/servers/slapd/filterentry.c @@ -647,7 +647,7 @@ test_filter_list( } void -filter_strcpy_special( char *d, char *s ) +filter_strcpy_special_ext( char *d, char *s, int flags ) { for ( ; *s; s++ ) { switch ( *s ) { @@ -660,14 +660,27 @@ filter_strcpy_special( char *d, char *s ) case '^': case '$': *d++ = '\\'; - /* FALL */ + break; + case '(': + case ')': + if (flags & FILTER_STRCPY_ESCAPE_PARENS) { + *d++ = '\\'; + } + break; default: - *d++ = *s; + break; } + *d++ = *s; } *d = '\0'; } +void +filter_strcpy_special( char *d, char *s ) +{ + return filter_strcpy_special_ext(d, s, 0); +} + int test_substring_filter( Slapi_PBlock *pb, Slapi_Entry *e, |