--- servers/slapd/ava.c 2001/12/29 14:01:10 1.24 +++ servers/slapd/ava.c 2003/11/27 00:17:15 1.35 @@ -1,9 +1,28 @@ -/* $OpenLDAP: pkg/ldap/servers/slapd/ava.c,v 1.23 2001/10/22 11:23:05 hyc Exp $ */ -/* - * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved. - * COPYING RESTRICTIONS APPLY, see COPYRIGHT file - */ /* ava.c - routines for dealing with attribute value assertions */ +/* $OpenLDAP: pkg/ldap/servers/slapd/ava.c,v 1.34 2003/04/10 23:29:29 hyc Exp $ */ +/* This work is part of OpenLDAP Software . + * + * Copyright 1998-2003 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" @@ -17,34 +36,36 @@ void ava_free( - AttributeAssertion *ava, - int freeit + Operation *op, + AttributeAssertion *ava, + int freeit ) { - free( ava->aa_value.bv_val ); + op->o_tmpfree( ava->aa_value.bv_val, op->o_tmpmemctx ); if ( freeit ) { - ch_free( (char *) ava ); + op->o_tmpfree( (char *) ava, op->o_tmpmemctx ); } } int get_ava( - BerElement *ber, - AttributeAssertion **ava, + Operation *op, + BerElement *ber, + AttributeAssertion **ava, unsigned usage, const char **text ) { int rc; + ber_tag_t rtag; struct berval type, value; AttributeAssertion *aa; - rc = ber_scanf( ber, "{oo}", &type, &value ); + rtag = ber_scanf( ber, "{mm}", &type, &value ); - if( rc == LBER_ERROR ) { + if( rtag == LBER_ERROR ) { #ifdef NEW_LOGGING - LDAP_LOG(( "filter", LDAP_LEVEL_ERR, - "get_ava: ber_scanf failure\n" )); + LDAP_LOG( FILTER, ERR, "get_ava: ber_scanf failure\n", 0, 0, 0 ); #else Debug( LDAP_DEBUG_ANY, " get_ava ber_scanf\n", 0, 0, 0 ); #endif @@ -52,24 +73,23 @@ get_ava( return SLAPD_DISCONNECT; } - aa = ch_malloc( sizeof( AttributeAssertion ) ); + aa = op->o_tmpalloc( sizeof( AttributeAssertion ), op->o_tmpmemctx ); aa->aa_desc = NULL; aa->aa_value.bv_val = NULL; rc = slap_bv2ad( &type, &aa->aa_desc, text ); - ch_free( type.bv_val ); if( rc != LDAP_SUCCESS ) { - ch_free( value.bv_val ); - ch_free( aa ); + op->o_tmpfree( aa, op->o_tmpmemctx ); return rc; } - rc = value_normalize( aa->aa_desc, usage, &value, &aa->aa_value, text ); - ch_free( value.bv_val ); + rc = asserted_value_validate_normalize( + aa->aa_desc, ad_mr(aa->aa_desc, usage), + usage, &value, &aa->aa_value, text, op->o_tmpmemctx ); if( rc != LDAP_SUCCESS ) { - ch_free( aa ); + op->o_tmpfree( aa, op->o_tmpmemctx ); return rc; }