X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fava.c;h=1292cb0669196a51ea3618c504f93359cd5616b4;hb=ef7f5f5e32e6e0f129aee7fa1626017a7dadcb48;hp=653675fd2298cb6d9bf2244215e35c6a227229c2;hpb=3bf226382e856d540e52a3fc732fc449e0f04d42;p=openldap diff --git a/servers/slapd/ava.c b/servers/slapd/ava.c index 653675fd22..1292cb0669 100644 --- a/servers/slapd/ava.c +++ b/servers/slapd/ava.c @@ -2,7 +2,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 1998-2006 The OpenLDAP Foundation. + * Copyright 1998-2011 The OpenLDAP Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -48,6 +48,8 @@ ava_free( nibble_mem_free ( ava->aa_cf->cf_ca->ca_comp_data.cd_mem_op ); #endif op->o_tmpfree( ava->aa_value.bv_val, op->o_tmpmemctx ); + if ( ava->aa_desc->ad_flags & SLAP_DESC_TEMPORARY ) + op->o_tmpfree( ava->aa_desc, op->o_tmpmemctx ); if ( freeit ) op->o_tmpfree( (char *) ava, op->o_tmpmemctx ); } @@ -87,13 +89,16 @@ get_ava( if( rc != LDAP_SUCCESS ) { f->f_choice |= SLAPD_FILTER_UNDEFINED; *text = NULL; - rc = slap_bv2undef_ad( &type, &aa->aa_desc, text, SLAP_AD_PROXIED); + rc = slap_bv2undef_ad( &type, &aa->aa_desc, text, + SLAP_AD_PROXIED|SLAP_AD_NOINSERT ); if( rc != LDAP_SUCCESS ) { Debug( LDAP_DEBUG_FILTER, "get_ava: unknown attributeType %s\n", type.bv_val, 0, 0 ); - op->o_tmpfree( aa, op->o_tmpmemctx ); - return rc; + aa->aa_desc = slap_bv2tmp_ad( &type, op->o_tmpmemctx ); + ber_dupbv_x( &aa->aa_value, &value, op->o_tmpmemctx ); + f->f_ava = aa; + return LDAP_SUCCESS; } } @@ -106,6 +111,7 @@ get_ava( Debug( LDAP_DEBUG_FILTER, "get_ava: illegal value for attributeType %s\n", type.bv_val, 0, 0 ); ber_dupbv_x( &aa->aa_value, &value, op->o_tmpmemctx ); + *text = NULL; rc = LDAP_SUCCESS; } @@ -116,7 +122,7 @@ get_ava( rc = get_aliased_filter_aa ( op, aa, a_alias, text ); if( rc != LDAP_SUCCESS ) { Debug( LDAP_DEBUG_FILTER, - "get_ava:Invalid Attribute Aliasing\n", 0, 0, 0 ); + "get_ava: Invalid Attribute Aliasing\n", 0, 0, 0 ); return rc; } }