]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/modify.c
fix RID format
[openldap] / servers / slapd / modify.c
index 3a4e6e70aec2afc1027828fbecfe1414a8d2ec8c..f84026220864d369fd6276fadf76659b3f2e2736 100644 (file)
@@ -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;
                                }