]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/filter.c
fix previous commit (check for co_type==Cft_Overlay before calling
[openldap] / servers / slapd / filter.c
index d1cc7da88f7923d1285ac4c07ef4a10db2498fbb..0d7527c0eb5f746cd4e7d2be83531049c4d9d429 100644 (file)
@@ -2,7 +2,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1998-2004 The OpenLDAP Foundation.
+ * Copyright 1998-2005 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -173,7 +173,7 @@ get_filter(
                if( err != LDAP_SUCCESS ) {
                        /* unrecognized attribute description or other error */
                        Debug( LDAP_DEBUG_ANY, 
-                               "get_filter: conn %d unknown attribute "
+                               "get_filter: conn %lu unknown attribute "
                                "type=%s (%d)\n",
                                op->o_connid, type.bv_val, err );
 
@@ -349,8 +349,8 @@ get_ssa(
 
        if( rc != LDAP_SUCCESS ) {
                Debug( LDAP_DEBUG_ANY, 
-                       "get_ssa: conn %d unknown attribute type=%s (%d)\n",
-                       op->o_connid, desc.bv_val, rc );
+                       "get_ssa: conn %lu unknown attribute type=%s (%ld)\n",
+                       op->o_connid, desc.bv_val, (long) rc );
 
                /* skip over the rest of this filter */
                for ( tag = ber_first_element( ber, &len, &last );
@@ -382,24 +382,39 @@ get_ssa(
 
                switch ( tag ) {
                case LDAP_SUBSTRING_INITIAL:
+                       if ( ssa.sa_initial.bv_val != NULL
+                               || ssa.sa_any != NULL 
+                               || ssa.sa_final.bv_val != NULL )
+                       {
+                               rc = LDAP_PROTOCOL_ERROR;
+                               goto return_error;
+                       }
                        usage = SLAP_MR_SUBSTR_INITIAL;
                        break;
 
                case LDAP_SUBSTRING_ANY:
+                       if ( ssa.sa_final.bv_val != NULL ) {
+                               rc = LDAP_PROTOCOL_ERROR;
+                               goto return_error;
+                       }
                        usage = SLAP_MR_SUBSTR_ANY;
                        break;
 
                case LDAP_SUBSTRING_FINAL:
+                       if ( ssa.sa_final.bv_val != NULL ) {
+                               rc = LDAP_PROTOCOL_ERROR;
+                               goto return_error;
+                       }
+
                        usage = SLAP_MR_SUBSTR_FINAL;
                        break;
 
                default:
-                       rc = LDAP_PROTOCOL_ERROR;
-
                        Debug( LDAP_DEBUG_FILTER,
                                "  unknown substring choice=%ld\n",
                                (long) tag, 0, 0 );
 
+                       rc = LDAP_PROTOCOL_ERROR;
                        goto return_error;
                }
 
@@ -407,57 +422,28 @@ get_ssa(
                rc = asserted_value_validate_normalize(
                        ssa.sa_desc, ssa.sa_desc->ad_type->sat_equality,
                        usage, &value, &nvalue, text, op->o_tmpmemctx );
-
-               if( rc != LDAP_SUCCESS ) {
-                       goto return_error;
-               }
-
-               rc = LDAP_PROTOCOL_ERROR;
+               if( rc != LDAP_SUCCESS ) goto return_error;
 
                switch ( tag ) {
                case LDAP_SUBSTRING_INITIAL:
                        Debug( LDAP_DEBUG_FILTER, "  INITIAL\n", 0, 0, 0 );
-
-                       if ( ssa.sa_initial.bv_val != NULL
-                               || ssa.sa_any != NULL 
-                               || ssa.sa_final.bv_val != NULL )
-                       {
-                               slap_sl_free( nvalue.bv_val, op->o_tmpmemctx );
-                               goto return_error;
-                       }
-
                        ssa.sa_initial = nvalue;
                        break;
 
                case LDAP_SUBSTRING_ANY:
                        Debug( LDAP_DEBUG_FILTER, "  ANY\n", 0, 0, 0 );
-
-                       if ( ssa.sa_final.bv_val != NULL ) {
-                               slap_sl_free( nvalue.bv_val, op->o_tmpmemctx );
-                               goto return_error;
-                       }
-
                        ber_bvarray_add_x( &ssa.sa_any, &nvalue, op->o_tmpmemctx );
                        break;
 
                case LDAP_SUBSTRING_FINAL:
                        Debug( LDAP_DEBUG_FILTER, "  FINAL\n", 0, 0, 0 );
-
-                       if ( ssa.sa_final.bv_val != NULL ) {
-                               slap_sl_free( nvalue.bv_val, op->o_tmpmemctx );
-                               goto return_error;
-                       }
-
                        ssa.sa_final = nvalue;
                        break;
 
                default:
-                       Debug( LDAP_DEBUG_FILTER,
-                               "  unknown substring type=%ld\n",
-                               (long) tag, 0, 0 );
-
                        assert( 0 );
                        slap_sl_free( nvalue.bv_val, op->o_tmpmemctx );
+                       rc = LDAP_PROTOCOL_ERROR;
 
 return_error:
                        Debug( LDAP_DEBUG_FILTER, "  error=%ld\n",
@@ -477,7 +463,6 @@ return_error:
        }
 
        Debug( LDAP_DEBUG_FILTER, "end get_ssa\n", 0, 0, 0 );
-
        return rc /* LDAP_SUCCESS */ ;
 }
 
@@ -541,7 +526,9 @@ void
 filter_free( Filter *f )
 {
        Operation op;
+       Opheader ohdr;
 
+       op.o_hdr = &ohdr;
        op.o_tmpmemctx = slap_sl_context( f );
        op.o_tmpmfuncs = &slap_sl_mfuncs;
        filter_free_x( &op, f );
@@ -776,6 +763,9 @@ void
 filter2bv( Filter *f, struct berval *fstr )
 {
        Operation op;
+       Opheader ohdr;
+
+       op.o_hdr = &ohdr;
        op.o_tmpmemctx = NULL;
        op.o_tmpmfuncs = &ch_mfuncs;
 
@@ -892,7 +882,7 @@ get_simple_vrFilter(
                if( err != LDAP_SUCCESS ) {
                        /* unrecognized attribute description or other error */
                        Debug( LDAP_DEBUG_ANY, 
-                               "get_simple_vrFilter: conn %d unknown "
+                               "get_simple_vrFilter: conn %lu unknown "
                                "attribute type=%s (%d)\n",
                                op->o_connid, type.bv_val, err );