Skip to content
Snippets Groups Projects
str2filter.c 2.29 KiB
Newer Older
  • Learn to ignore specific revisions
  • Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    /* str2filter.c - parse an RFC 2554 string filter */
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
     *
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
     * Copyright 1998-2004 The OpenLDAP Foundation.
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
     * 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.
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
     */
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    
    
    #include "portable.h"
    
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    #include <stdio.h>
    
    
    #include <ac/string.h>
    
    #include <ac/socket.h>
    
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    #include "slap.h"
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    
    
    Pierangelo Masarati's avatar
    Pierangelo Masarati committed
    #if 0 /* unused */
    
    static char	*find_matching_paren( const char *s );
    
    Pierangelo Masarati's avatar
    Pierangelo Masarati committed
    #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);
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    
    Filter *
    
    str2filter_x( Operation *op, const char *str )
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    {
    
    	Filter	*f = NULL;
    
    	BerElementBuffer berbuf;
    	BerElement *ber = (BerElement *)&berbuf;
    
    	const char *text = NULL;
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    
    
    #ifdef NEW_LOGGING
    
    Julius Enarusai's avatar
     
    Julius Enarusai committed
    	LDAP_LOG( FILTER, ENTRY,  "str2filter: \"%s\"\n", str, 0, 0 );
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    	Debug( LDAP_DEBUG_FILTER, "str2filter \"%s\"\n", str, 0, 0 );
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    	if ( str == NULL || *str == '\0' ) {
    
    		return NULL;
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    	}
    
    
    Howard Chu's avatar
    Howard Chu committed
    	ber_init2( ber, NULL, LBER_USE_DER );
    
    Howard Chu's avatar
    Howard Chu committed
    		ber_set_option( ber, LBER_OPT_BER_MEMCTX, &op->o_tmpmemctx );
    
    	rc = ldap_pvt_put_filter( ber, str );
    
    	if( rc < 0 ) {
    		goto done;
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    	}
    
    
    Howard Chu's avatar
    Howard Chu committed
    	ber_reset( ber, 1 );
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    
    
    	rc = get_filter( op, ber, &f, &text );
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    
    
    Howard Chu's avatar
    Howard Chu committed
    	ber_free_buf( ber );
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    
    
    Kurt Zeilenga's avatar
    Kurt Zeilenga committed
    }
    
    
    Filter *
    str2filter( const char *str )
    {
    	Operation op = {0};
    
    	op.o_tmpmemctx = NULL;
    
    Howard Chu's avatar
    Howard Chu committed
    	op.o_tmpmfuncs = &ch_mfuncs;