X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Ffilter.c;h=fba7bd3794397d784ff6ded3d5b220abf4814bb3;hb=0121f8c01dcdef0827c8e6a1770d0a5ae3b0806e;hp=60f4f0e063b8e944387fe98c1061322b1d02ba80;hpb=a20f8b5f976b0c9eea3a83a816f1c24421f8de6a;p=openldap diff --git a/servers/slapd/filter.c b/servers/slapd/filter.c index 60f4f0e063..fba7bd3794 100644 --- a/servers/slapd/filter.c +++ b/servers/slapd/filter.c @@ -2,7 +2,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 1998-2008 The OpenLDAP Foundation. + * Copyright 1998-2009 The OpenLDAP Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -385,6 +385,19 @@ get_ssa( rc = LDAP_PROTOCOL_ERROR; + if ( ssa.sa_desc->ad_type->sat_substr == NULL ) { + for ( tag = ber_first_element( ber, &len, &last ); + tag != LBER_DEFAULT; + tag = ber_next_element( ber, &len, last ) ) + { + /* eat all */ + rc = ber_scanf( ber, "x" ); + } + + rc = LDAP_INVALID_SYNTAX; + goto return_error; + } + for ( tag = ber_first_element( ber, &len, &last ); tag != LBER_DEFAULT; tag = ber_next_element( ber, &len, last ) ) @@ -478,6 +491,7 @@ return_error: return rc; } + *text = NULL; rc = LDAP_SUCCESS; } @@ -491,7 +505,7 @@ return_error: } void -filter_free_x( Operation *op, Filter *f ) +filter_free_x( Operation *op, Filter *f, int freeme ) { Filter *p, *next; @@ -530,7 +544,7 @@ filter_free_x( Operation *op, Filter *f ) case LDAP_FILTER_NOT: for ( p = f->f_list; p != NULL; p = next ) { next = p->f_next; - filter_free_x( op, p ); + filter_free_x( op, p, 1 ); } break; @@ -547,7 +561,9 @@ filter_free_x( Operation *op, Filter *f ) break; } - op->o_tmpfree( f, op->o_tmpmemctx ); + if ( freeme ) { + op->o_tmpfree( f, op->o_tmpmemctx ); + } } void @@ -559,7 +575,7 @@ filter_free( Filter *f ) op.o_hdr = &ohdr; op.o_tmpmemctx = slap_sl_context( f ); op.o_tmpmfuncs = &slap_sl_mfuncs; - filter_free_x( &op, f ); + filter_free_x( &op, f, 1 ); } void