/* entry.c - routines for dealing with entries */
/* $OpenLDAP$ */
/*
- * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved.
+ * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
/*
* Empty root entry
*/
-const Entry slap_entry_root = { NOID, { 0, "" }, { 0, "" }, NULL, 0, { 0, "" }, NULL };
+const Entry slap_entry_root = {
+ NOID, { 0, "" }, { 0, "" }, NULL, 0, { 0, "" }, NULL
+};
int entry_destroy(void)
{
Entry *e;
char *type;
struct berval vals[2];
+#ifdef SLAP_NVALUES
+ struct berval nvals[2], *nvalsp;
+#endif
AttributeDescription *ad;
const char *text;
char *next;
e->e_id = NOID;
/* dn + attributes */
+ vals[1].bv_len = 0;
vals[1].bv_val = NULL;
next = s;
}
}
+#ifdef SLAP_NVALUES
+ nvalsp = NULL;
+ nvals[0].bv_val = NULL;
+
+ if( ad->ad_type->sat_equality &&
+ ad->ad_type->sat_equality->smr_normalize )
+ {
+ rc = ad->ad_type->sat_equality->smr_normalize(
+ SLAP_MR_VALUE_OF_ATTRIBUTE_SYNTAX,
+ ad->ad_type->sat_syntax,
+ ad->ad_type->sat_equality,
+ &vals[0], &nvals[0] );
+
+ if( rc ) {
+#ifdef NEW_LOGGING
+ LDAP_LOG( OPERATION, DETAIL1,
+ "str2entry: NULL (smr_normalize %d)\n" , rc, 0, 0 );
+#else
+ Debug( LDAP_DEBUG_ANY,
+ "<= str2entry NULL (smr_normalize %d)\n", rc, 0, 0 );
+#endif
+
+ entry_free( e );
+ free( vals[0].bv_val );
+ free( type );
+ return NULL;
+ }
+
+ nvals[1].bv_len = 0;
+ nvals[1].bv_val = NULL;
+
+ nvalsp = &nvals[0];
+ }
+#endif
+
+#ifdef SLAP_NVALUES
+ rc = attr_merge( e, ad, vals, nvalsp );
+#else
rc = attr_merge( e, ad, vals );
+#endif
if( rc != 0 ) {
#ifdef NEW_LOGGING
LDAP_LOG( OPERATION, DETAIL1,
free( type );
free( vals[0].bv_val );
+#ifdef SLAP_NVALUES
+ free( nvals[0].bv_val );
+#endif
}
/* check to make sure there was a dn: line */
(long) e->e_id, 0, 0 );
#endif
entry_free( e );
- return( NULL );
+ return NULL;
}
#ifdef NEW_LOGGING
*/
int entry_decode(struct berval *bv, Entry **e)
{
- int i, j;
+ int i, j, count;
int rc;
Attribute *a;
Entry *x;
bptr = (BerVarray)(a+1);
a->a_vals = bptr;
a->a_flags = 0;
- j = entry_getlen(&ptr);
+ count = j = entry_getlen(&ptr);
while (j) {
i = entry_getlen(&ptr);
bptr->bv_val = NULL;
bptr->bv_len = 0;
bptr++;
+
+#ifdef SLAP_NVALUES
+ if( count && ad->ad_type->sat_equality &&
+ ad->ad_type->sat_equality->smr_normalize )
+ {
+ a->a_nvals = ch_malloc((count+1)*sizeof(struct berval));
+
+ for(j=0; j<count; j++) {
+ rc = ad->ad_type->sat_equality->smr_normalize(
+ SLAP_MR_VALUE_OF_ATTRIBUTE_SYNTAX,
+ ad->ad_type->sat_syntax,
+ ad->ad_type->sat_equality,
+ &a->a_vals[j], &a->a_nvals[j] );
+
+ if( rc ) {
+#ifdef NEW_LOGGING
+ LDAP_LOG( OPERATION, DETAIL1,
+ "entry_decode: NULL (smr_normalize %d)\n",
+ rc, 0, 0 );
+#else
+ Debug( LDAP_DEBUG_ANY,
+ "<= entry_decode NULL (smr_normalize %d)\n",
+ rc, 0, 0 );
+#endif
+
+ return rc;
+ }
+ }
+ a->a_nvals[j].bv_val = NULL;
+ a->a_nvals[j].bv_len = 0;
+ }
+#endif
+
}
- if (a)
- a->a_next = NULL;
+
+ if (a) a->a_next = NULL;
#ifdef NEW_LOGGING
LDAP_LOG( OPERATION, DETAIL1, "entry_decode: %s\n", x->e_dn, 0, 0 );
#else