#include "ldap_pvt.h"
#include "slap.h"
-#include "slapi.h"
#ifdef LDAP_SLAPI
+#include "slapi.h"
static Slapi_PBlock *initAddPlugin( Backend *be, Connection *conn, Operation *op,
struct berval *dn, Entry *e, int manageDSAit );
static int doPreAddPluginFNs( Backend *be, Slapi_PBlock *pb );
Modifications *mod;
ber_tag_t rtag;
- rtag = ber_scanf( ber, "{m{W}}", &tmp.sml_type, &tmp.sml_bvalues );
+#ifdef SLAP_NVALUES
+ tmp.sml_nvalues = NULL;
+#endif
+
+ rtag = ber_scanf( ber, "{m{W}}", &tmp.sml_type, &tmp.sml_values );
if ( rtag == LBER_ERROR ) {
#ifdef NEW_LOGGING
goto done;
}
- if ( tmp.sml_bvalues == NULL ) {
+ if ( tmp.sml_values == NULL ) {
#ifdef NEW_LOGGING
LDAP_LOG( OPERATION, INFO,
"do_add: conn %d no values for type %s\n",
NULL, "no values for attribute type", NULL, NULL );
goto done;
}
+
mod = (Modifications *) ch_malloc( sizeof(Modifications) );
-
mod->sml_op = LDAP_MOD_ADD;
mod->sml_next = NULL;
mod->sml_desc = NULL;
mod->sml_type = tmp.sml_type;
- mod->sml_bvalues = tmp.sml_bvalues;
+ mod->sml_values = tmp.sml_values;
+#ifdef SLAP_NVALUES
+ mod->sml_nvalues = NULL;
+#endif
*modtail = mod;
modtail = &mod->sml_next;
for( i=0; attr->a_vals[i].bv_val; i++ ) {
/* count them */
}
- for( j=0; mods->sml_bvalues[j].bv_val; j++ ) {
+ for( j=0; mods->sml_values[j].bv_val; j++ ) {
/* count them */
}
j++; /* NULL */
/* should check for duplicates */
- AC_MEMCPY( &attr->a_vals[i], mods->sml_bvalues,
+ AC_MEMCPY( &attr->a_vals[i], mods->sml_values,
sizeof( struct berval ) * j );
/* trim the mods array */
- ch_free( mods->sml_bvalues );
- mods->sml_bvalues = NULL;
+ ch_free( mods->sml_values );
+ mods->sml_values = NULL;
+
+#ifdef SLAP_NVALUES
+ if( attr->a_nvals ) {
+ attr->a_nvals = ch_realloc( attr->a_nvals,
+ sizeof( struct berval ) * (i+j) );
+
+ AC_MEMCPY( &attr->a_nvals[i], mods->sml_nvalues,
+ sizeof( struct berval ) * j );
+
+ /* trim the mods array */
+ ch_free( mods->sml_nvalues );
+ mods->sml_nvalues = NULL;
+ }
+#endif
continue;
#else
#endif
}
- if( mods->sml_bvalues[1].bv_val != NULL ) {
+ if( mods->sml_values[1].bv_val != NULL ) {
/* check for duplicates */
int i, j;
MatchingRule *mr = mods->sml_desc->ad_type->sat_equality;
/* move values to attr structure */
/* should check for duplicates */
- attr->a_vals = mods->sml_bvalues;
- mods->sml_bvalues = NULL;
+ attr->a_vals = mods->sml_values;
+ mods->sml_values = NULL;
+
+#ifdef SLAP_NVALUES
+ attr->a_nvals = mods->sml_nvalues;
+ mods->sml_nvalues = NULL;
+#endif
*tail = attr;
tail = &attr->a_next;