X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fstr2filter.c;h=4ce084aad5d52477094cdaac1a35a6f4714345b9;hb=fa856463fe9a5577bb992affca98d27db90487d2;hp=45a42ad60034e5c883520f39f5a859ed9bc6d6bb;hpb=111b4646426a263ce278ede42a5f88e869f5d325;p=openldap diff --git a/servers/slapd/str2filter.c b/servers/slapd/str2filter.c index 45a42ad600..4ce084aad5 100644 --- a/servers/slapd/str2filter.c +++ b/servers/slapd/str2filter.c @@ -1,8 +1,27 @@ -/* str2filter.c - parse an rfc 1588 string filter */ +/* str2filter.c - parse an RFC 2554 string filter */ /* $OpenLDAP$ */ -/* - * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved. - * COPYING RESTRICTIONS APPLY, see COPYRIGHT file +/* This work is part of OpenLDAP Software . + * + * 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 + * . + */ +/* 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" @@ -16,25 +35,24 @@ #include "slap.h" #include +#if 0 /* unused */ static char *find_matching_paren( const char *s ); +#endif /* unused */ static Filter *str2list( const char *str, long unsigned int ftype); static Filter *str2simple( const char *str); static int str2subvals( const char *val, Filter *f); Filter * -str2filter( const char *str ) +str2filter_x( Operation *op, const char *str ) { int rc; Filter *f = NULL; - BerElement *ber; - char berbuf[256]; - struct berval *bv = NULL; - Connection conn; + BerElementBuffer berbuf; + BerElement *ber = (BerElement *)&berbuf; const char *text = NULL; #ifdef NEW_LOGGING - LDAP_LOG(( "filter", LDAP_LEVEL_ENTRY, - "str2filter: \"%s\"\n", str )); + LDAP_LOG( FILTER, ENTRY, "str2filter: \"%s\"\n", str, 0, 0 ); #else Debug( LDAP_DEBUG_FILTER, "str2filter \"%s\"\n", str, 0, 0 ); #endif @@ -43,9 +61,9 @@ str2filter( const char *str ) return NULL; } - ber = ber_alloc_t( LBER_USE_DER ); - if( ber == NULL ) { - return NULL; + ber_init2( ber, NULL, LBER_USE_DER ); + if ( op->o_tmpmemctx ) { + ber_set_option( ber, LBER_OPT_BER_MEMCTX, &op->o_tmpmemctx ); } rc = ldap_pvt_put_filter( ber, str ); @@ -53,25 +71,23 @@ str2filter( const char *str ) goto done; } - rc = ber_flatten( ber, &bv ); - if( rc < 0 ) { - goto done; - } + ber_reset( ber, 1 ); - ber_free( ber, 0 ); + rc = get_filter( op, ber, &f, &text ); - ber = (BerElement *)berbuf; - ber_init2( ber, bv, 0 ); +done: + ber_free_buf( ber ); - conn.c_connid = 0; + return f; +} - rc = get_filter( &conn, ber, &f, &text ); - if( rc ) { - goto done; - } +Filter * +str2filter( const char *str ) +{ + Operation op = {0}; -done: - ber_bvfree( bv ); + op.o_tmpmemctx = NULL; + op.o_tmpmfuncs = &ch_mfuncs; - return f; + return str2filter_x( &op, str ); }