X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fmodify.c;h=f84026220864d369fd6276fadf76659b3f2e2736;hb=c3960b98d3b5fbd6ebeb200ca7799ece7b766d50;hp=3a4e6e70aec2afc1027828fbecfe1414a8d2ec8c;hpb=7bcbd40344fe3d3a387fa1c3a87375e5af6a3f6e;p=openldap diff --git a/servers/slapd/modify.c b/servers/slapd/modify.c index 3a4e6e70ae..f840262208 100644 --- a/servers/slapd/modify.c +++ b/servers/slapd/modify.c @@ -183,7 +183,7 @@ do_modify( goto cleanup; } - rs->sr_err = slap_mods_check( modlist, + rs->sr_err = slap_mods_check( op, modlist, &rs->sr_text, textbuf, textlen, NULL ); if ( rs->sr_err != LDAP_SUCCESS ) { @@ -539,6 +539,7 @@ slap_mods_no_repl_user_mod_check( * Do basic attribute type checking and syntax validation. */ int slap_mods_check( + Operation *op, Modifications *ml, const char **text, char *textbuf, @@ -553,6 +554,12 @@ int slap_mods_check( /* convert to attribute description */ if ( ml->sml_desc == NULL ) { rc = slap_bv2ad( &ml->sml_type, &ml->sml_desc, text ); + if( rc != LDAP_SUCCESS ) { + if ( get_no_schema_check( op )) { + rc = slap_bv2undef_ad( &ml->sml_type, &ml->sml_desc, + text, 0 ); + } + } if( rc != LDAP_SUCCESS ) { snprintf( textbuf, textlen, "%s: %s", ml->sml_type.bv_val, *text ); @@ -901,6 +908,9 @@ int slap_mods_check( } } done: + if ( i >= 0 ) + j = ix[i]; + slap_sl_free( ix, ctx ); if ( rc != LDAP_SUCCESS ) { @@ -911,7 +921,7 @@ done: assert( i < nvals ); snprintf( textbuf, textlen, "%s: value #%d provided more than once", - ml->sml_desc->ad_cname.bv_val, ix[i] ); + ml->sml_desc->ad_cname.bv_val, j ); *text = textbuf; return LDAP_TYPE_OR_VALUE_EXISTS; }