Diff for /servers/slapd/filter.c between versions 1.114 and 1.115.2.5

version 1.114, 2003/04/29 18:12:00 version 1.115.2.5, 2004/02/23 22:08:05
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.113 2003/04/29 16:13:10 kurt Exp $ */  /* $OpenLDAP: pkg/ldap/servers/slapd/filter.c,v 1.115.2.4 2004/01/17 18:36:42 kurt Exp $ */
 /*  /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved.   *
  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file   * Copyright 1998-2004 The OpenLDAP Foundation.
    * All rights reserved.
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted only as authorized by the OpenLDAP
    * Public License.
    *
    * A copy of this license is available in the file LICENSE in the
    * top-level directory of the distribution or, alternatively, at
    * <http://www.OpenLDAP.org/license.html>.
    */
   /* Portions Copyright (c) 1995 Regents of the University of Michigan.
    * All rights reserved.
    *
    * Redistribution and use in source and binary forms are permitted
    * provided that this notice is preserved and that due credit is given
    * to the University of Michigan at Ann Arbor. The name of the University
    * may not be used to endorse or promote products derived from this
    * software without specific prior written permission. This software
    * is provided ``as is'' without express or implied warranty.
  */   */
   
 #include "portable.h"  #include "portable.h"
Line 26  static int get_ssa( Line 45  static int get_ssa(
         SubstringsAssertion **s,          SubstringsAssertion **s,
         const char **text );          const char **text );
   
   static int filter_escape_value_x(
           struct berval *in,
           struct berval *out,
           void *ctx );
   
 static void simple_vrFilter2bv(  static void simple_vrFilter2bv(
         Operation *op,          Operation *op,
         ValuesReturnFilter *f,          ValuesReturnFilter *f,
Line 177  get_filter( Line 201  get_filter(
   
                 if( err != LDAP_SUCCESS ) {                  if( err != LDAP_SUCCESS ) {
                         /* unrecognized attribute description or other error */                          /* unrecognized attribute description or other error */
   #ifdef NEW_LOGGING
                           LDAP_LOG( FILTER, ERR, 
                                   "get_filter: conn %d unknown attribute "
                                   "type=%s (%d)\n",
                                   op->o_connid, type.bv_val, err );
   #else
                           Debug( LDAP_DEBUG_ANY, 
                                   "get_filter: conn %d unknown attribute "
                                   "type=%s (%d)\n",
                                   op->o_connid, type.bv_val, err );
   #endif
   
                         f.f_choice = SLAPD_FILTER_COMPUTED;                          f.f_choice = SLAPD_FILTER_COMPUTED;
                         f.f_result = LDAP_COMPARE_FALSE;                          f.f_result = LDAP_COMPARE_FALSE;
                         err = LDAP_SUCCESS;                          err = LDAP_SUCCESS;
Line 252  get_filter( Line 288  get_filter(
   
                 assert( f.f_not != NULL );                  assert( f.f_not != NULL );
                 if ( f.f_not->f_choice == SLAPD_FILTER_COMPUTED ) {                  if ( f.f_not->f_choice == SLAPD_FILTER_COMPUTED ) {
                           int fresult = f.f_not->f_result;
                         f.f_choice = SLAPD_FILTER_COMPUTED;                          f.f_choice = SLAPD_FILTER_COMPUTED;
                         f.f_result = f.f_not->f_result;  
                         op->o_tmpfree( f.f_not, op->o_tmpmemctx );                          op->o_tmpfree( f.f_not, op->o_tmpmemctx );
                         f.f_not = NULL;                          f.f_not = NULL;
   
                         switch( f.f_result ) {                          switch( fresult ) {
                         case LDAP_COMPARE_TRUE:                          case LDAP_COMPARE_TRUE:
                                 f.f_result = LDAP_COMPARE_FALSE;                                  f.f_result = LDAP_COMPARE_FALSE;
                                 break;                                  break;
Line 377  get_ssa( Line 413  get_ssa(
         SubstringsAssertion ssa;          SubstringsAssertion ssa;
   
         *text = "error decoding filter";          *text = "error decoding filter";
           *out = NULL;
   
 #ifdef NEW_LOGGING  #ifdef NEW_LOGGING
         LDAP_LOG( FILTER, ENTRY,           LDAP_LOG( FILTER, ENTRY, 
Line 398  get_ssa( Line 435  get_ssa(
         rc = slap_bv2ad( &desc, &ssa.sa_desc, text );          rc = slap_bv2ad( &desc, &ssa.sa_desc, text );
   
         if( rc != LDAP_SUCCESS ) {          if( rc != LDAP_SUCCESS ) {
   #ifdef NEW_LOGGING
                   LDAP_LOG( FILTER, ERR, 
                           "get_ssa: conn %d d unknown attribute type=%s (%d)\n",
                           op->o_connid, desc.bv_val, rc );
   #else
                   Debug( LDAP_DEBUG_ANY, 
                           "get_ssa: conn %d unknown attribute type=%s (%d)\n",
                           op->o_connid, desc.bv_val, rc );
   #endif
   
                 /* skip over the rest of this filter */                  /* skip over the rest of this filter */
                 for ( tag = ber_first_element( ber, &len, &last );                  for ( tag = ber_first_element( ber, &len, &last );
                         tag != LBER_DEFAULT;                          tag != LBER_DEFAULT;
Line 565  return_error: Line 612  return_error:
         Debug( LDAP_DEBUG_FILTER, "end get_ssa\n", 0, 0, 0 );          Debug( LDAP_DEBUG_FILTER, "end get_ssa\n", 0, 0, 0 );
 #endif  #endif
   
         return LDAP_SUCCESS;          return rc /* LDAP_SUCCESS */ ;
 }  }
   
 void  void
Line 642  filter_free( Filter *f ) Line 689  filter_free( Filter *f )
 void  void
 filter2bv_x( Operation *op, Filter *f, struct berval *fstr )  filter2bv_x( Operation *op, Filter *f, struct berval *fstr )
 {  {
         int     i;          int             i;
         Filter  *p;          Filter          *p;
         struct berval tmp;          struct berval   tmp,
         ber_len_t len;                          ber_bvfalse = BER_BVC( "(?=false)" ),
                           ber_bvtrue = BER_BVC( "(?=true)" ),
                           ber_bvundefined = BER_BVC( "(?=undefined)" ),
                           ber_bverror = BER_BVC( "(?=error)" ),
                           ber_bvunknown = BER_BVC( "(?=unknown)" );
           ber_len_t       len;
   
         if ( f == NULL ) {          if ( f == NULL ) {
                 ber_str2bv_x( "No filter!", sizeof("No filter!")-1, 1, fstr, op->o_tmpmemctx );                  ber_str2bv_x( "No filter!", sizeof("No filter!")-1, 1, fstr, op->o_tmpmemctx );
Line 825  filter2bv_x( Operation *op, Filter *f, s Line 877  filter2bv_x( Operation *op, Filter *f, s
                 } break;                  } break;
   
         case SLAPD_FILTER_COMPUTED:          case SLAPD_FILTER_COMPUTED:
                 ber_str2bv_x(                  switch ( f->f_result ) {
                         f->f_result == LDAP_COMPARE_FALSE ? "(?=false)" :                  case LDAP_COMPARE_FALSE:
                         f->f_result == LDAP_COMPARE_TRUE ? "(?=true)" :                          tmp = ber_bvfalse;
                         f->f_result == SLAPD_COMPARE_UNDEFINED ? "(?=undefined)" :                          break;
                         "(?=error)",  
                         f->f_result == LDAP_COMPARE_FALSE ? sizeof("(?=false)")-1 :  
                         f->f_result == LDAP_COMPARE_TRUE ? sizeof("(?=true)")-1 :  
                         f->f_result == SLAPD_COMPARE_UNDEFINED ? sizeof("(?=undefined)")-1 :  
                         sizeof("(?=error)")-1,  
                         1, fstr, op->o_tmpmemctx );  
                 break;  
   
                   case LDAP_COMPARE_TRUE:
                           tmp = ber_bvtrue;
                           break;
                           
                   case SLAPD_COMPARE_UNDEFINED:
                           tmp = ber_bvundefined;
                           break;
                           
                   default:
                           tmp = ber_bverror;
                           break;
                   }
   
                   ber_dupbv_x( fstr, &tmp, op->o_tmpmemctx );
                   break;
                   
         default:          default:
                 ber_str2bv_x( "(?=unknown)", sizeof("(?=unknown)")-1,                  ber_dupbv_x( fstr, &ber_bvunknown, op->o_tmpmemctx );
                         1, fstr, op->o_tmpmemctx );  
                 break;                  break;
         }          }
 }  }
Line 854  filter2bv( Filter *f, struct berval *fst Line 914  filter2bv( Filter *f, struct berval *fst
         filter2bv_x( &op, f, fstr );          filter2bv_x( &op, f, fstr );
 }  }
   
 int  static int
 filter_escape_value_x(  filter_escape_value_x(
         struct berval *in,          struct berval *in,
         struct berval *out,          struct berval *out,
Line 993  get_simple_vrFilter( Line 1053  get_simple_vrFilter(
   
                 if( err != LDAP_SUCCESS ) {                  if( err != LDAP_SUCCESS ) {
                         /* unrecognized attribute description or other error */                          /* unrecognized attribute description or other error */
   #ifdef NEW_LOGGING
                           LDAP_LOG( FILTER, ERR, 
                                   "get_simple_vrFilter: conn %d unknown "
                                   "attribute type=%s (%d)\n",
                                   op->o_connid, type.bv_val, err );
   #else
                           Debug( LDAP_DEBUG_ANY, 
                                   "get_simple_vrFilter: conn %d unknown "
                                   "attribute type=%s (%d)\n",
                                   op->o_connid, type.bv_val, err );
   #endif
   
                         vrf.vrf_choice = SLAPD_FILTER_COMPUTED;                          vrf.vrf_choice = SLAPD_FILTER_COMPUTED;
                         vrf.vrf_result = LDAP_COMPARE_FALSE;                          vrf.vrf_result = LDAP_COMPARE_FALSE;
                         err = LDAP_SUCCESS;                          err = LDAP_SUCCESS;

Removed from v.1.114  
changed lines
  Added in v.1.115.2.5


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