]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/filter.c
ITS#1716 is_entry_subentr/ies/y/
[openldap] / servers / slapd / filter.c
index 11ce1afdef71c08853976f7d047f32b6b592a6cb..16124c0c31bc588670946ab4a706ca3aef10a650 100644 (file)
@@ -240,7 +240,6 @@ get_filter(
                }
 
                assert( f->f_mra != NULL );
-
                break;
 
        default:
@@ -269,6 +268,7 @@ get_filter(
                } else {
                        free(f);
                }
+
        } else {
                *filt = f;
        }
@@ -330,7 +330,6 @@ get_substring_filter(
        ber_len_t       len;
        ber_tag_t       rc;
        struct berval value;
-       struct berval escaped;
        char            *last;
        struct berval bv;
        *text = "error decoding filter";
@@ -577,109 +576,6 @@ filter_free( Filter *f )
        free( f );
 }
 
-#ifdef LDAP_DEBUG
-void
-filter_print( Filter *f )
-{
-       int     i;
-       Filter  *p;
-       struct berval escaped;
-
-       if ( f == NULL ) {
-               fprintf( stderr, "No filter!" );
-       }
-
-       switch ( f->f_choice ) {
-       case LDAP_FILTER_EQUALITY:
-               filter_escape_value( &f->f_av_value, &escaped );
-               fprintf( stderr, "(%s=%s)",
-                       f->f_av_desc->ad_cname.bv_val,
-                       escaped.bv_val );
-               ber_memfree( escaped.bv_val );
-               break;
-
-       case LDAP_FILTER_GE:
-               filter_escape_value( &f->f_av_value, &escaped );
-               fprintf( stderr, "(%s>=%s)",
-                       f->f_av_desc->ad_cname.bv_val,
-                       escaped.bv_val );
-               ber_memfree( escaped.bv_val );
-               break;
-
-       case LDAP_FILTER_LE:
-               filter_escape_value( &f->f_av_value, &escaped );
-               fprintf( stderr, "(%s<=%s)",
-                       f->f_ava->aa_desc->ad_cname.bv_val,
-                       escaped.bv_val );
-               ber_memfree( escaped.bv_val );
-               break;
-
-       case LDAP_FILTER_APPROX:
-               filter_escape_value( &f->f_av_value, &escaped );
-               fprintf( stderr, "(%s~=%s)",
-                       f->f_ava->aa_desc->ad_cname.bv_val,
-                       escaped.bv_val );
-               ber_memfree( escaped.bv_val );
-               break;
-
-       case LDAP_FILTER_SUBSTRINGS:
-               fprintf( stderr, "(%s=" /*)*/,
-                       f->f_sub_desc->ad_cname.bv_val );
-               if ( f->f_sub_initial.bv_val != NULL ) {
-                       filter_escape_value( &f->f_sub_initial, &escaped );
-                       fprintf( stderr, "%s",
-                               escaped.bv_val );
-                       ber_memfree( escaped.bv_val );
-               }
-               if ( f->f_sub_any != NULL ) {
-                       for ( i = 0; f->f_sub_any[i].bv_val != NULL; i++ ) {
-                               filter_escape_value( &f->f_sub_any[i], &escaped );
-                               fprintf( stderr, "*%s",
-                                       escaped.bv_val );
-                               ber_memfree( escaped.bv_val );
-                       }
-               }
-               if ( f->f_sub_final.bv_val != NULL ) {
-                       filter_escape_value( &f->f_sub_final, &escaped );
-                       fprintf( stderr,
-                               "*%s", escaped.bv_val );
-                       ber_memfree( escaped.bv_val );
-               }
-               fprintf( stderr, /*(*/ ")" );
-               break;
-
-       case LDAP_FILTER_PRESENT:
-               fprintf( stderr, "(%s=*)",
-                       f->f_desc->ad_cname.bv_val );
-               break;
-
-       case LDAP_FILTER_AND:
-       case LDAP_FILTER_OR:
-       case LDAP_FILTER_NOT:
-               fprintf( stderr, "(%c" /*)*/,
-                       f->f_choice == LDAP_FILTER_AND ? '&' :
-                       f->f_choice == LDAP_FILTER_OR ? '|' : '!' );
-               for ( p = f->f_list; p != NULL; p = p->f_next ) {
-                       filter_print( p );
-               }
-               fprintf( stderr, /*(*/ ")" );
-               break;
-
-       case SLAPD_FILTER_COMPUTED:
-               fprintf( stderr, "(?=%s)",
-                       f->f_result == LDAP_COMPARE_FALSE ? "false" :
-                       f->f_result == LDAP_COMPARE_TRUE ? "true" :
-                       f->f_result == SLAPD_COMPARE_UNDEFINED ? "undefined" :
-                       "error" );
-               break;
-
-       default:
-               fprintf( stderr, "(unknown-filter=%lu)", f->f_choice );
-               break;
-       }
-}
-#endif /* ldap_debug */
-
 void
 filter2bv( Filter *f, struct berval *fstr )
 {
@@ -839,6 +735,24 @@ filter2bv( Filter *f, struct berval *fstr )
 
                break;
 
+       case LDAP_FILTER_EXT:
+               filter_escape_value( &f->f_mr_value, &tmp );
+
+               fstr->bv_len = f->f_mr_desc->ad_cname.bv_len +
+                       ( f->f_mr_dnattrs ? sizeof(":dn")-1 : 0 ) +
+                       ( f->f_mr_rule_text.bv_len ? f->f_mr_rule_text.bv_len+1 : 0 ) +
+                       tmp.bv_len + ( sizeof("(:=)") - 1 );
+               fstr->bv_val = malloc( fstr->bv_len + 1 );
+
+               snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s%s%s%s:=%s)",
+                       f->f_mr_desc->ad_cname.bv_val,
+                       f->f_mr_dnattrs ? ":dn" : "",
+                       f->f_mr_rule_text.bv_len ? ":" : "",
+                       f->f_mr_rule_text.bv_len ? f->f_mr_rule_text.bv_val : "",
+                       tmp.bv_val );
+               ber_memfree( tmp.bv_val );
+               break;
+
        case SLAPD_FILTER_COMPUTED:
                ber_str2bv(
                        f->f_result == LDAP_COMPARE_FALSE ? "(?=false)" :