X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fcomponent.c;h=3fe99d1dfd4dca4fc2da984d3bd316a9bee843b4;hb=d168b49464df8a034e244c6610721155aa6b42ba;hp=7d74c191117517165366d6db370c2b0367f62629;hpb=5ef410c1f389a5f5432252b981871a52c4277ba2;p=openldap diff --git a/servers/slapd/component.c b/servers/slapd/component.c index 7d74c19111..3fe99d1dfd 100644 --- a/servers/slapd/component.c +++ b/servers/slapd/component.c @@ -2,7 +2,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 2003-2005 The OpenLDAP Foundation. + * Copyright 2003-2006 The OpenLDAP Foundation. * Portions Copyright 2004 by IBM Corporation. * All rights reserved. * @@ -99,7 +99,7 @@ componentFilterMatch ( { ComponentSyntaxInfo *csi_attr = (ComponentSyntaxInfo*)value; MatchingRuleAssertion * ma = (MatchingRuleAssertion*)assertedValue; - int num_attr, rc, i; + int rc; if ( !mr || !ma->ma_cf ) return LDAP_INAPPROPRIATE_MATCHING; @@ -154,8 +154,6 @@ allComponentsMatch( static int slapd_ber2cav( struct berval* bv, ComponentAssertionValue* cav ) { - int len; - cav->cav_ptr = cav->cav_buf = bv->bv_val; cav->cav_end = bv->bv_val + bv->bv_len; @@ -165,11 +163,9 @@ slapd_ber2cav( struct berval* bv, ComponentAssertionValue* cav ) ComponentReference* dup_comp_ref ( Operation* op, ComponentReference* cr ) { - int rc, count = 0; ComponentReference* dup_cr; ComponentId* ci_curr; ComponentId** ci_temp; - ber_int_t type; dup_cr = op->o_tmpalloc( sizeof( ComponentReference ), op->o_tmpmemctx ); @@ -234,7 +230,6 @@ dup_comp_filter_item ( ComponentAssertion* in_ca, ComponentAssertion** out_ca ) { - ComponentAssertion* ca; int len; if ( !in_ca->ca_comp_ref ) return SLAPD_DISCONNECT; @@ -298,15 +293,31 @@ dup_comp_filter ( return( rc ); } +int +get_aliased_filter_aa ( Operation* op, AttributeAssertion* a_assert, AttributeAliasing* aa, const char** text ) +{ + struct berval assert_bv; + + Debug( LDAP_DEBUG_FILTER, "get_aliased_filter\n", 0, 0, 0 ); + + if ( !aa->aa_cf ) + return LDAP_PROTOCOL_ERROR; + + assert_bv = a_assert->aa_value; + /* + * Duplicate aa->aa_cf to ma->ma_cf by replacing the + * the component assertion value in assert_bv + * Multiple values may be separated with '$' + */ + return dup_comp_filter ( op, &assert_bv, aa->aa_cf, &a_assert->aa_cf ); +} int get_aliased_filter( Operation* op, MatchingRuleAssertion* ma, AttributeAliasing* aa, const char** text ) { - int rc; struct berval assert_bv; - ComponentAssertion* ca; Debug( LDAP_DEBUG_FILTER, "get_aliased_filter\n", 0, 0, 0 ); @@ -427,7 +438,8 @@ get_componentId( Operation *op, ComponentAssertionValue* cav, type = peek_componentId_type( cav ); - Debug( LDAP_DEBUG_FILTER, "get_compId [%d]\n", type, 0, 0 ); + Debug( LDAP_DEBUG_FILTER, "get_compId [%lu]\n", + (unsigned long) type, 0, 0 ); len = 0; _cid.ci_type = type; _cid.ci_next = NULL; @@ -890,7 +902,7 @@ strip_cav_str( ComponentAssertionValue* cav, char* str) /* * TAG : "item", "and", "or", "not" */ -static int +static ber_tag_t strip_cav_tag( ComponentAssertionValue* cav ) { @@ -935,7 +947,6 @@ get_item( Operation *op, ComponentAssertionValue* cav, ComponentAssertion** ca, { int rc; ComponentAssertion* _ca; - struct berval t_bv; struct berval value; MatchingRule* mr; @@ -1247,7 +1258,7 @@ test_comp_filter_item( ComponentSyntaxInfo *csi_attr, ComponentAssertion *ca ) { - int rc, len; + int rc; void *attr_nm, *assert_nm; if ( strcmp(ca->ca_ma_rule->smr_mrule.mr_oid, @@ -1369,4 +1380,11 @@ component_free( ComponentFilter *f ) { free_comp_filter( f ); } +void +free_ComponentData( Attribute *a ) { + if ( a->a_comp_data->cd_mem_op ) + component_destructor( a->a_comp_data->cd_mem_op ); + free ( a->a_comp_data ); + a->a_comp_data = NULL; +} #endif