X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fava.c;h=07b13e2fc739ca9dcb5fa7c3f08d8015e0113337;hb=53d41587adf505c0421b5bf47516ebd0e66818c7;hp=63a1b288457afcf1fa78a9d9312f37489c2089e1;hpb=8c357efd28ea61b4d10f783b53ebf0fe4e73e19f;p=openldap diff --git a/servers/slapd/ava.c b/servers/slapd/ava.c index 63a1b28845..07b13e2fc7 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-2003 The OpenLDAP Foundation. + * Copyright 1998-2005 The OpenLDAP Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -33,18 +33,22 @@ #include "slap.h" +#ifdef LDAP_COMP_MATCH +#include "component.h" +#endif void ava_free( Operation *op, AttributeAssertion *ava, - int freeit -) + int freeit ) { +#ifdef LDAP_COMP_MATCH + if ( ava->aa_cf && ava->aa_cf->cf_ca->ca_comp_data.cd_mem_op ) + 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 ( freeit ) { - op->o_tmpfree( (char *) ava, op->o_tmpmemctx ); - } + if ( freeit ) op->o_tmpfree( (char *) ava, op->o_tmpmemctx ); } int @@ -53,22 +57,20 @@ get_ava( BerElement *ber, AttributeAssertion **ava, unsigned usage, - const char **text -) + const char **text ) { int rc; ber_tag_t rtag; struct berval type, value; AttributeAssertion *aa; +#ifdef LDAP_COMP_MATCH + AttributeAliasing* a_alias = NULL; +#endif rtag = ber_scanf( ber, "{mm}", &type, &value ); if( rtag == LBER_ERROR ) { -#ifdef NEW_LOGGING - 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 *text = "Error decoding attribute value assertion"; return SLAPD_DISCONNECT; } @@ -76,19 +78,22 @@ get_ava( aa = op->o_tmpalloc( sizeof( AttributeAssertion ), op->o_tmpmemctx ); aa->aa_desc = NULL; aa->aa_value.bv_val = NULL; +#ifdef LDAP_COMP_MATCH + aa->aa_cf = NULL; +#endif rc = slap_bv2ad( &type, &aa->aa_desc, text ); if( rc != LDAP_SUCCESS ) { -#ifdef NEW_LOGGING - LDAP_LOG( FILTER, ERR, - "get_ava: unknown attributeType %s\n", type.bv_val, 0, 0 ); -#else - Debug( LDAP_DEBUG_FILTER, - "get_ava: unknown attributeType %s\n", type.bv_val, 0, 0 ); -#endif - op->o_tmpfree( aa, op->o_tmpmemctx ); - return rc; + 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; + } } rc = asserted_value_validate_normalize( @@ -96,18 +101,25 @@ get_ava( usage, &value, &aa->aa_value, text, op->o_tmpmemctx ); if( rc != LDAP_SUCCESS ) { -#ifdef NEW_LOGGING - LDAP_LOG( FILTER, ERR, - "get_ava: illegal value for attributeType %s\n", type.bv_val, 0, 0 ); -#else Debug( LDAP_DEBUG_FILTER, "get_ava: illegal value for attributeType %s\n", type.bv_val, 0, 0 ); -#endif op->o_tmpfree( aa, op->o_tmpmemctx ); return rc; } +#ifdef LDAP_COMP_MATCH + if( is_aliased_attribute ) { + a_alias = is_aliased_attribute ( aa->aa_desc ); + if ( a_alias ) { + 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 ); + return rc; + } + } + } +#endif *ava = aa; - return LDAP_SUCCESS; }