Diff for /servers/slapd/filter.c between versions 1.90 and 1.95

version 1.90, 2003/02/27 00:54:43 version 1.95, 2003/03/15 22:59:14
Line 1 Line 1
 /* filter.c - routines for parsing and dealing with filters */  /* filter.c - routines for parsing and dealing with filters */
 /* $OpenLDAP: pkg/ldap/servers/slapd/filter.c,v 1.89 2003/01/20 19:21:17 kurt Exp $ */  /* $OpenLDAP: pkg/ldap/servers/slapd/filter.c,v 1.94 2003/03/15 18:45:36 kurt Exp $ */
 /*  /*
  * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved.   * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved.
  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file   * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
Line 26  static int get_substring_filter( Line 26  static int get_substring_filter(
         Filter *f,          Filter *f,
         const char **text );          const char **text );
   
 static int filter_escape_value(  
         struct berval *in,  
         struct berval *out );  
   
 static void simple_vrFilter2bv(  static void simple_vrFilter2bv(
         ValuesReturnFilter *f,          ValuesReturnFilter *f,
         struct berval *fstr );          struct berval *fstr );
Line 128  get_filter( Line 124  get_filter(
                 Debug( LDAP_DEBUG_FILTER, "SUBSTRINGS\n", 0, 0, 0 );                  Debug( LDAP_DEBUG_FILTER, "SUBSTRINGS\n", 0, 0, 0 );
 #endif  #endif
                 err = get_substring_filter( conn, ber, f, text );                  err = get_substring_filter( conn, ber, f, text );
                   if( err != LDAP_SUCCESS ) {
                           break;
                   }
                   assert( f->f_sub != NULL );
                 break;                  break;
   
         case LDAP_FILTER_GE:          case LDAP_FILTER_GE:
Line 141  get_filter( Line 141  get_filter(
                 if ( err != LDAP_SUCCESS ) {                  if ( err != LDAP_SUCCESS ) {
                         break;                          break;
                 }                  }
                   assert( f->f_ava != NULL );
                 break;                  break;
   
         case LDAP_FILTER_LE:          case LDAP_FILTER_LE:
Line 154  get_filter( Line 155  get_filter(
                 if ( err != LDAP_SUCCESS ) {                  if ( err != LDAP_SUCCESS ) {
                         break;                          break;
                 }                  }
                   assert( f->f_ava != NULL );
                 break;                  break;
   
         case LDAP_FILTER_PRESENT: {          case LDAP_FILTER_PRESENT: {
Line 194  get_filter( Line 196  get_filter(
                 if ( err != LDAP_SUCCESS ) {                  if ( err != LDAP_SUCCESS ) {
                         break;                          break;
                 }                  }
                   assert( f->f_ava != NULL );
                 break;                  break;
   
         case LDAP_FILTER_AND:          case LDAP_FILTER_AND:
Line 207  get_filter( Line 210  get_filter(
                 if ( err != LDAP_SUCCESS ) {                  if ( err != LDAP_SUCCESS ) {
                         break;                          break;
                 }                  }
   #if XXX
                   assert( f->f_and != NULL );
   #endif
                 break;                  break;
   
         case LDAP_FILTER_OR:          case LDAP_FILTER_OR:
Line 220  get_filter( Line 226  get_filter(
                 if ( err != LDAP_SUCCESS ) {                  if ( err != LDAP_SUCCESS ) {
                         break;                          break;
                 }                  }
   #if XXX
                   assert( f->f_or != NULL );
   #endif
                 break;                  break;
   
         case LDAP_FILTER_NOT:          case LDAP_FILTER_NOT:
Line 234  get_filter( Line 243  get_filter(
                 if ( err != LDAP_SUCCESS ) {                  if ( err != LDAP_SUCCESS ) {
                         break;                          break;
                 }                  }
   #if XXX
                   assert( f->f_not != NULL );
   #endif
                 break;                  break;
   
         case LDAP_FILTER_EXT:          case LDAP_FILTER_EXT:
Line 249  get_filter( Line 261  get_filter(
                         break;                          break;
                 }                  }
   
   #if nothosed
                 assert( f->f_mra != NULL );                  assert( f->f_mra != NULL );
   #endif
                 break;                  break;
   
         default:          default:
Line 415  get_substring_filter( Line 429  get_substring_filter(
                 }                  }
   
 #ifdef SLAP_NVALUES  #ifdef SLAP_NVALUES
                 /* validate using equality matching rule validator! */                  /* validate/normalize using equality matching rule validator! */
                 rc = asserted_value_validate_normalize(                  rc = asserted_value_validate_normalize(
                         f->f_sub_desc, f->f_sub_desc->ad_type->sat_substr,                          f->f_sub_desc, f->f_sub_desc->ad_type->sat_equality,
                         usage, &value, &bv, text );                          usage, &value, &bv, text );
                 if( rc != LDAP_SUCCESS ) {                  if( rc != LDAP_SUCCESS ) {
                         goto return_error;                          goto return_error;
Line 612  filter2bv( Filter *f, struct berval *fst Line 626  filter2bv( Filter *f, struct berval *fst
   
                 fstr->bv_len = f->f_av_desc->ad_cname.bv_len +                  fstr->bv_len = f->f_av_desc->ad_cname.bv_len +
                         tmp.bv_len + ( sizeof("(=)") - 1 );                          tmp.bv_len + ( sizeof("(=)") - 1 );
                 fstr->bv_val = malloc( fstr->bv_len + 1 );                  fstr->bv_val = ch_malloc( fstr->bv_len + 1 );
   
                 snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s=%s)",                  snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s=%s)",
                         f->f_av_desc->ad_cname.bv_val,                          f->f_av_desc->ad_cname.bv_val,
Line 626  filter2bv( Filter *f, struct berval *fst Line 640  filter2bv( Filter *f, struct berval *fst
   
                 fstr->bv_len = f->f_av_desc->ad_cname.bv_len +                  fstr->bv_len = f->f_av_desc->ad_cname.bv_len +
                         tmp.bv_len + ( sizeof("(>=)") - 1 );                          tmp.bv_len + ( sizeof("(>=)") - 1 );
                 fstr->bv_val = malloc( fstr->bv_len + 1 );                  fstr->bv_val = ch_malloc( fstr->bv_len + 1 );
   
                 snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s>=%s)",                  snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s>=%s)",
                         f->f_av_desc->ad_cname.bv_val,                          f->f_av_desc->ad_cname.bv_val,
Line 640  filter2bv( Filter *f, struct berval *fst Line 654  filter2bv( Filter *f, struct berval *fst
   
                 fstr->bv_len = f->f_av_desc->ad_cname.bv_len +                  fstr->bv_len = f->f_av_desc->ad_cname.bv_len +
                         tmp.bv_len + ( sizeof("(<=)") - 1 );                          tmp.bv_len + ( sizeof("(<=)") - 1 );
                 fstr->bv_val = malloc( fstr->bv_len + 1 );                  fstr->bv_val = ch_malloc( fstr->bv_len + 1 );
   
                 snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s<=%s)",                  snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s<=%s)",
                         f->f_av_desc->ad_cname.bv_val,                          f->f_av_desc->ad_cname.bv_val,
Line 654  filter2bv( Filter *f, struct berval *fst Line 668  filter2bv( Filter *f, struct berval *fst
   
                 fstr->bv_len = f->f_av_desc->ad_cname.bv_len +                  fstr->bv_len = f->f_av_desc->ad_cname.bv_len +
                         tmp.bv_len + ( sizeof("(~=)") - 1 );                          tmp.bv_len + ( sizeof("(~=)") - 1 );
                 fstr->bv_val = malloc( fstr->bv_len + 1 );                  fstr->bv_val = ch_malloc( fstr->bv_len + 1 );
   
                 snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s~=%s)",                  snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s~=%s)",
                         f->f_av_desc->ad_cname.bv_val,                          f->f_av_desc->ad_cname.bv_val,
Line 665  filter2bv( Filter *f, struct berval *fst Line 679  filter2bv( Filter *f, struct berval *fst
         case LDAP_FILTER_SUBSTRINGS:          case LDAP_FILTER_SUBSTRINGS:
                 fstr->bv_len = f->f_sub_desc->ad_cname.bv_len +                  fstr->bv_len = f->f_sub_desc->ad_cname.bv_len +
                         ( sizeof("(=*)") - 1 );                          ( sizeof("(=*)") - 1 );
                 fstr->bv_val = malloc( fstr->bv_len + 128 );                  fstr->bv_val = ch_malloc( fstr->bv_len + 128 );
   
                 snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s=*)",                  snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s=*)",
                         f->f_sub_desc->ad_cname.bv_val );                          f->f_sub_desc->ad_cname.bv_val );
Line 720  filter2bv( Filter *f, struct berval *fst Line 734  filter2bv( Filter *f, struct berval *fst
         case LDAP_FILTER_PRESENT:          case LDAP_FILTER_PRESENT:
                 fstr->bv_len = f->f_desc->ad_cname.bv_len +                  fstr->bv_len = f->f_desc->ad_cname.bv_len +
                         ( sizeof("(=*)") - 1 );                          ( sizeof("(=*)") - 1 );
                 fstr->bv_val = malloc( fstr->bv_len + 1 );                  fstr->bv_val = ch_malloc( fstr->bv_len + 1 );
   
                 snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s=*)",                  snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s=*)",
                         f->f_desc->ad_cname.bv_val );                          f->f_desc->ad_cname.bv_val );
Line 730  filter2bv( Filter *f, struct berval *fst Line 744  filter2bv( Filter *f, struct berval *fst
         case LDAP_FILTER_OR:          case LDAP_FILTER_OR:
         case LDAP_FILTER_NOT:          case LDAP_FILTER_NOT:
                 fstr->bv_len = sizeof("(%)") - 1;                  fstr->bv_len = sizeof("(%)") - 1;
                 fstr->bv_val = malloc( fstr->bv_len + 128 );                  fstr->bv_val = ch_malloc( fstr->bv_len + 128 );
   
                 snprintf( fstr->bv_val, fstr->bv_len + 1, "(%c)",                  snprintf( fstr->bv_val, fstr->bv_len + 1, "(%c)",
                         f->f_choice == LDAP_FILTER_AND ? '&' :                          f->f_choice == LDAP_FILTER_AND ? '&' :
Line 767  filter2bv( Filter *f, struct berval *fst Line 781  filter2bv( Filter *f, struct berval *fst
                         ( f->f_mr_dnattrs ? sizeof(":dn")-1 : 0 ) +                          ( f->f_mr_dnattrs ? sizeof(":dn")-1 : 0 ) +
                         ( f->f_mr_rule_text.bv_len ? f->f_mr_rule_text.bv_len+1 : 0 ) +                          ( f->f_mr_rule_text.bv_len ? f->f_mr_rule_text.bv_len+1 : 0 ) +
                         tmp.bv_len + ( sizeof("(:=)") - 1 );                          tmp.bv_len + ( sizeof("(:=)") - 1 );
                 fstr->bv_val = malloc( fstr->bv_len + 1 );                  fstr->bv_val = ch_malloc( fstr->bv_len + 1 );
   
                 snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s%s%s%s:=%s)",                  snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s%s%s%s:=%s)",
                         ad.bv_val,                          ad.bv_val,
Line 797  filter2bv( Filter *f, struct berval *fst Line 811  filter2bv( Filter *f, struct berval *fst
         }          }
 }  }
   
 static int filter_escape_value(  int
   filter_escape_value(
         struct berval *in,          struct berval *in,
         struct berval *out )          struct berval *out )
 {  {
Line 1151  vrFilter2bv( ValuesReturnFilter *vrf, st Line 1166  vrFilter2bv( ValuesReturnFilter *vrf, st
         }          }
   
         fstr->bv_len = sizeof("()") - 1;          fstr->bv_len = sizeof("()") - 1;
         fstr->bv_val = malloc( fstr->bv_len + 128 );          fstr->bv_val = ch_malloc( fstr->bv_len + 128 );
   
         snprintf( fstr->bv_val, fstr->bv_len + 1, "()");          snprintf( fstr->bv_val, fstr->bv_len + 1, "()");
   
Line 1187  simple_vrFilter2bv( ValuesReturnFilter * Line 1202  simple_vrFilter2bv( ValuesReturnFilter *
   
                 fstr->bv_len = vrf->vrf_av_desc->ad_cname.bv_len +                  fstr->bv_len = vrf->vrf_av_desc->ad_cname.bv_len +
                         tmp.bv_len + ( sizeof("(=)") - 1 );                          tmp.bv_len + ( sizeof("(=)") - 1 );
                 fstr->bv_val = malloc( fstr->bv_len + 1 );                  fstr->bv_val = ch_malloc( fstr->bv_len + 1 );
   
                 snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s=%s)",                  snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s=%s)",
                         vrf->vrf_av_desc->ad_cname.bv_val,                          vrf->vrf_av_desc->ad_cname.bv_val,
Line 1201  simple_vrFilter2bv( ValuesReturnFilter * Line 1216  simple_vrFilter2bv( ValuesReturnFilter *
   
                 fstr->bv_len = vrf->vrf_av_desc->ad_cname.bv_len +                  fstr->bv_len = vrf->vrf_av_desc->ad_cname.bv_len +
                         tmp.bv_len + ( sizeof("(>=)") - 1 );                          tmp.bv_len + ( sizeof("(>=)") - 1 );
                 fstr->bv_val = malloc( fstr->bv_len + 1 );                  fstr->bv_val = ch_malloc( fstr->bv_len + 1 );
   
                 snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s>=%s)",                  snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s>=%s)",
                         vrf->vrf_av_desc->ad_cname.bv_val,                          vrf->vrf_av_desc->ad_cname.bv_val,
Line 1215  simple_vrFilter2bv( ValuesReturnFilter * Line 1230  simple_vrFilter2bv( ValuesReturnFilter *
   
                 fstr->bv_len = vrf->vrf_av_desc->ad_cname.bv_len +                  fstr->bv_len = vrf->vrf_av_desc->ad_cname.bv_len +
                         tmp.bv_len + ( sizeof("(<=)") - 1 );                          tmp.bv_len + ( sizeof("(<=)") - 1 );
                 fstr->bv_val = malloc( fstr->bv_len + 1 );                  fstr->bv_val = ch_malloc( fstr->bv_len + 1 );
   
                 snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s<=%s)",                  snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s<=%s)",
                         vrf->vrf_av_desc->ad_cname.bv_val,                          vrf->vrf_av_desc->ad_cname.bv_val,
Line 1229  simple_vrFilter2bv( ValuesReturnFilter * Line 1244  simple_vrFilter2bv( ValuesReturnFilter *
   
                 fstr->bv_len = vrf->vrf_av_desc->ad_cname.bv_len +                  fstr->bv_len = vrf->vrf_av_desc->ad_cname.bv_len +
                         tmp.bv_len + ( sizeof("(~=)") - 1 );                          tmp.bv_len + ( sizeof("(~=)") - 1 );
                 fstr->bv_val = malloc( fstr->bv_len + 1 );                  fstr->bv_val = ch_malloc( fstr->bv_len + 1 );
   
                 snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s~=%s)",                  snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s~=%s)",
                         vrf->vrf_av_desc->ad_cname.bv_val,                          vrf->vrf_av_desc->ad_cname.bv_val,
Line 1240  simple_vrFilter2bv( ValuesReturnFilter * Line 1255  simple_vrFilter2bv( ValuesReturnFilter *
         case LDAP_FILTER_SUBSTRINGS:          case LDAP_FILTER_SUBSTRINGS:
                 fstr->bv_len = vrf->vrf_sub_desc->ad_cname.bv_len +                  fstr->bv_len = vrf->vrf_sub_desc->ad_cname.bv_len +
                         ( sizeof("(=*)") - 1 );                          ( sizeof("(=*)") - 1 );
                 fstr->bv_val = malloc( fstr->bv_len + 128 );                  fstr->bv_val = ch_malloc( fstr->bv_len + 128 );
   
                 snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s=*)",                  snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s=*)",
                         vrf->vrf_sub_desc->ad_cname.bv_val );                          vrf->vrf_sub_desc->ad_cname.bv_val );
Line 1296  simple_vrFilter2bv( ValuesReturnFilter * Line 1311  simple_vrFilter2bv( ValuesReturnFilter *
         case LDAP_FILTER_PRESENT:          case LDAP_FILTER_PRESENT:
                 fstr->bv_len = vrf->vrf_desc->ad_cname.bv_len +                  fstr->bv_len = vrf->vrf_desc->ad_cname.bv_len +
                         ( sizeof("(=*)") - 1 );                          ( sizeof("(=*)") - 1 );
                 fstr->bv_val = malloc( fstr->bv_len + 1 );                  fstr->bv_val = ch_malloc( fstr->bv_len + 1 );
   
                 snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s=*)",                  snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s=*)",
                         vrf->vrf_desc->ad_cname.bv_val );                          vrf->vrf_desc->ad_cname.bv_val );
Line 1317  simple_vrFilter2bv( ValuesReturnFilter * Line 1332  simple_vrFilter2bv( ValuesReturnFilter *
                         ( vrf->vrf_mr_dnattrs ? sizeof(":dn")-1 : 0 ) +                          ( vrf->vrf_mr_dnattrs ? sizeof(":dn")-1 : 0 ) +
                         ( vrf->vrf_mr_rule_text.bv_len ? vrf->vrf_mr_rule_text.bv_len+1 : 0 ) +                          ( vrf->vrf_mr_rule_text.bv_len ? vrf->vrf_mr_rule_text.bv_len+1 : 0 ) +
                         tmp.bv_len + ( sizeof("(:=)") - 1 );                          tmp.bv_len + ( sizeof("(:=)") - 1 );
                 fstr->bv_val = malloc( fstr->bv_len + 1 );                  fstr->bv_val = ch_malloc( fstr->bv_len + 1 );
   
                 snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s%s%s%s:=%s)",                  snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s%s%s%s:=%s)",
                         ad.bv_val,                          ad.bv_val,
Line 1434  get_substring_vrFilter( Line 1449  get_substring_vrFilter(
                 }                  }
   
 #ifdef SLAP_NVALUES  #ifdef SLAP_NVALUES
                 /* validate using equality matching rule validator! */                  /* validate/normalize using equality matching rule validator! */
                 rc = asserted_value_validate_normalize(                  rc = asserted_value_validate_normalize(
                         vrf->vrf_sub_desc, vrf->vrf_sub_desc->ad_type->sat_substr,                          vrf->vrf_sub_desc, vrf->vrf_sub_desc->ad_type->sat_equality,
                         usage, &value, &bv, text );                          usage, &value, &bv, text );
                 if( rc != LDAP_SUCCESS ) {                  if( rc != LDAP_SUCCESS ) {
                         goto return_error;                          goto return_error;

Removed from v.1.90  
changed lines
  Added in v.1.95


______________
© Copyright 1998-2020, OpenLDAP Foundation, info@OpenLDAP.org