X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fadd.c;h=e45ded2ae6a9dd06483bc095b39a54bf3c952399;hb=517fa54bb0f764968ca56e7931a09adac4f33af6;hp=3db0bf9d025af996c7e6a8bf04ab70cf98748a2b;hpb=6f378341a29b5003692cc2f9b830659608b6ab15;p=openldap diff --git a/servers/slapd/add.c b/servers/slapd/add.c index 3db0bf9d02..e45ded2ae6 100644 --- a/servers/slapd/add.c +++ b/servers/slapd/add.c @@ -44,7 +44,6 @@ do_add( Connection *conn, Operation *op ) Modifications *mods = NULL; const char *text; int rc = LDAP_SUCCESS; - struct berval **urls = NULL; Debug( LDAP_DEBUG_TRACE, "do_add\n", 0, 0, 0 ); @@ -164,11 +163,8 @@ do_add( Connection *conn, Operation *op ) } /* check for referrals */ - rc = backend_check_referrals( be, conn, op, &urls, &text ); + rc = backend_check_referrals( be, conn, op, e->e_dn, e->e_ndn ); if ( rc != LDAP_SUCCESS ) { - send_ldap_result( conn, op, rc, - NULL, text, urls, NULL ); - ber_bvecfree( urls ); goto done; } @@ -289,8 +285,34 @@ static int slap_mods2entry( attr = attr_find( (*e)->e_attrs, mods->sml_desc ); if( attr != NULL ) { +#define SLURPD_FRIENDLY +#ifdef SLURPD_FRIENDLY + ber_len_t i,j; + + for( i=0; attr->a_vals[i]; i++ ) { + /* count them */ + } + for( j=0; mods->sml_bvalues[j]; j++ ) { + /* count them */ + } + j++; /* NULL */ + + attr->a_vals = ch_realloc( attr->a_vals, + sizeof( struct berval * ) * (i+j) ); + + /* should check for duplicates */ + memcpy( &attr->a_vals[i], mods->sml_bvalues, + sizeof( struct berval * ) * j ); + + /* trim the mods array */ + ch_free( mods->sml_bvalues ); + mods->sml_bvalues = NULL; + + continue; +#else *text = "attribute provided more than once"; - return LDAP_OPERATIONS_ERROR; + return LDAP_TYPE_OR_VALUE_EXISTS; +#endif } attr = ch_calloc( 1, sizeof(Attribute) );