Modifications *mods,
Entry **e,
int repl_user,
- const char **text );
+ const char **text,
+ char *textbuf, size_t textlen );
int
do_add( Connection *conn, Operation *op )
}
e = (Entry *) ch_calloc( 1, sizeof(Entry) );
- e->e_name.bv_val = NULL;
- e->e_name.bv_len = 0;
- e->e_nname.bv_val = NULL;
- e->e_nname.bv_len = 0;
- e->e_attrs = NULL;
- e->e_private = NULL;
rc = dnPrettyNormal( NULL, &dn, &e->e_name, &e->e_nname );
tag = ber_next_element( ber, &len, last ) )
{
Modifications *mod;
+ ber_tag_t rtag;
- rc = ber_scanf( ber, "{m{W}}", &tmp.sml_type, &tmp.sml_bvalues );
+ rtag = ber_scanf( ber, "{m{W}}", &tmp.sml_type, &tmp.sml_bvalues );
- if ( rc == LBER_ERROR ) {
+ if ( rtag == LBER_ERROR ) {
#ifdef NEW_LOGGING
LDAP_LOG(( "operation", LDAP_LEVEL_ERR,
"do_add: conn %d decoding error \n", conn->c_connid ));
#endif
send_ldap_result( conn, op, rc = LDAP_PROTOCOL_ERROR,
NULL, "no values for attribute type", NULL, NULL );
- free( tmp.sml_type.bv_val );
goto done;
}
mod = (Modifications *) ch_malloc( sizeof(Modifications) );
goto done;
}
- Statslog( LDAP_DEBUG_STATS, "conn=%ld op=%d ADD dn=\"%s\"\n",
+ Statslog( LDAP_DEBUG_STATS, "conn=%lu op=%lu ADD dn=\"%s\"\n",
op->o_connid, op->o_opid, e->e_dn, 0, 0 );
if( e->e_nname.bv_len == 0 ) {
}
}
- rc = slap_mods2entry( modlist, &e, repl_user, &text );
+ rc = slap_mods2entry( modlist, &e, repl_user, &text,
+ textbuf, textlen );
if( rc != LDAP_SUCCESS ) {
send_ldap_result( conn, op, rc,
NULL, text, NULL, NULL );
Modifications *mods,
Entry **e,
int repl_user,
- const char **text )
+ const char **text,
+ char *textbuf, size_t textlen )
{
Attribute **tail = &(*e)->e_attrs;
assert( *tail == NULL );
+ *text = textbuf;
+
for( ; mods != NULL; mods = mods->sml_next ) {
Attribute *attr;
ber_len_t i,j;
if( !repl_user ) {
- *text = "attribute provided more than once";
+ snprintf( textbuf, textlen,
+ "attribute '%s' provided more than once",
+ mods->sml_desc->ad_cname.bv_val );
return LDAP_TYPE_OR_VALUE_EXISTS;
}
continue;
#else
- *text = "attribute provided more than once";
+ snprintf( textbuf, textlen,
+ "attribute '%s' provided more than once",
+ mods->sml_desc->ad_cname.bv_val );
return LDAP_TYPE_OR_VALUE_EXISTS;
#endif
}
if( rc == 0 ) {
/* value exists already */
+ snprintf( textbuf, textlen,
+ "%s: value #%d provided more than once",
+ mods->sml_desc->ad_cname.bv_val, j );
return LDAP_TYPE_OR_VALUE_EXISTS;
}
}
if( rc == LDAP_SUCCESS && match == 0 ) {
free( asserted.bv_val );
+ snprintf( textbuf, textlen,
+ "%s: value #%d provided more than once",
+ mods->sml_desc->ad_cname.bv_val, j );
return LDAP_TYPE_OR_VALUE_EXISTS;
}
}