/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2003-2005 The OpenLDAP Foundation.
+ * Copyright 2003-2006 The OpenLDAP Foundation.
* Portions Copyright 2004 by IBM Corporation.
* All rights reserved.
*
{
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;
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;
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 );
ci_curr = ci_curr->ci_next, ci_temp = &(*ci_temp)->ci_next )
{
*ci_temp = op->o_tmpalloc( sizeof( ComponentId ), op->o_tmpmemctx );
- if ( !ci_temp ) return NULL;
+ if ( !*ci_temp ) return NULL;
**ci_temp = *ci_curr;
}
ComponentAssertion* in_ca,
ComponentAssertion** out_ca )
{
- ComponentAssertion* ca;
int len;
if ( !in_ca->ca_comp_ref ) return SLAPD_DISCONNECT;
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 );
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;
cr_list = &(*cr_list)->ci_next;
} else if ( rc == LDAP_COMPREF_UNDEFINED ) {
+ if ( op ) {
+ op->o_tmpfree( ca_comp_ref , op->o_tmpmemctx );
+ } else {
+ free( ca_comp_ref );
+ }
return rc;
}
}
return rc;
}
- if ( rc == LDAP_SUCCESS ) {
- *cr = ca_comp_ref;
- **cr = *ca_comp_ref;
-
- } else if ( op ) {
- op->o_tmpfree( ca_comp_ref , op->o_tmpmemctx );
-
- } else {
- free( ca_comp_ref ) ;
- }
+ *cr = ca_comp_ref;
+ **cr = *ca_comp_ref;
(*cr)->cr_string.bv_val = start;
(*cr)->cr_string.bv_len = end - start + 1;
/*
* TAG : "item", "and", "or", "not"
*/
-static int
+static ber_tag_t
strip_cav_tag( ComponentAssertionValue* cav )
{
{
int rc;
ComponentAssertion* _ca;
- struct berval t_bv;
struct berval value;
MatchingRule* mr;
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,
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