]> git.sur5r.net Git - openldap/commitdiff
modify ldbm_modify_internal to return error text
authorKurt Zeilenga <kurt@openldap.org>
Sun, 28 May 2000 20:44:08 +0000 (20:44 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Sun, 28 May 2000 20:44:08 +0000 (20:44 +0000)
servers/slapd/attr.c
servers/slapd/back-ldbm/modify.c
servers/slapd/back-ldbm/modrdn.c
servers/slapd/back-ldbm/passwd.c
servers/slapd/back-ldbm/proto-back-ldbm.h

index 481d1c7adf3353308867ea5f6e25bfe261141363..685d97bc9ebefc0e76fc50d3cdec3ab5db1bd548 100644 (file)
@@ -278,7 +278,6 @@ attr_delete(
 )
 {
        Attribute       **a;
-       Attribute       *save;
 
        for ( a = attrs; *a != NULL; a = &(*a)->a_next ) {
 #ifdef SLAPD_SCHEMA_NOT_COMPAT
@@ -287,18 +286,14 @@ attr_delete(
                if ( strcasecmp( (*a)->a_type, type ) == 0 )
 #endif
                {
-                       break;
-               }
-       }
+                       Attribute       *save = *a;
+                       *a = (*a)->a_next;
+                       attr_free( save );
 
-       if ( *a == NULL ) {
-               return( 1 );
+                       return 0;
+               }
        }
 
-       save = *a;
-       *a = (*a)->a_next;
-       attr_free( save );
-
-       return( 0 );
+       return 1;
 }
 
index 552fae08801fd6e5682358871a07e0d4416937c7..fadc60fd12c0b25018ef9048f341c52c233e6860 100644 (file)
@@ -33,11 +33,11 @@ int ldbm_modify_internal(
     Operation  *op,
     const char *dn,
     Modifications      *modlist,
-    Entry      *e 
+    Entry      *e,
+       const char **text 
 )
 {
        int rc, err;
-       const char *text;
        Modification    *mod;
        Modifications   *ml;
        Attribute       *save_attrs;
@@ -55,14 +55,26 @@ int ldbm_modify_internal(
                switch ( mod->sm_op ) {
                case LDAP_MOD_ADD:
                        err = add_values( e, mod, op->o_ndn );
+
+                       if( err != LDAP_SUCCESS ) {
+                               *text = "modify: add values failed";
+                       }
                        break;
 
                case LDAP_MOD_DELETE:
                        err = delete_values( e, mod, op->o_ndn );
+                       assert( err != LDAP_TYPE_OR_VALUE_EXISTS );
+                       if( err != LDAP_SUCCESS ) {
+                               *text = "modify: delete values failed";
+                       }
                        break;
 
                case LDAP_MOD_REPLACE:
                        err = replace_values( e, mod, op->o_ndn );
+                       assert( err != LDAP_TYPE_OR_VALUE_EXISTS );
+                       if( err != LDAP_SUCCESS ) {
+                               *text = "modify: replace values failed";
+                       }
                        break;
 
                case SLAP_MOD_SOFTADD:
@@ -75,7 +87,14 @@ int ldbm_modify_internal(
                        if ( err == LDAP_TYPE_OR_VALUE_EXISTS ) {
                                err = LDAP_SUCCESS;
                        }
+
+                       if( err != LDAP_SUCCESS ) {
+                               *text = "modify: (soft)add values failed";
+                       }
                        break;
+
+               default:
+                       err = LDAP_OTHER;
                }
 
                if ( err != LDAP_SUCCESS ) {
@@ -97,12 +116,12 @@ int ldbm_modify_internal(
        ldap_pvt_thread_mutex_unlock( &op->o_abandonmutex );
 
        /* check that the entry still obeys the schema */
-       rc = entry_schema_check( e, save_attrs, &text );
+       rc = entry_schema_check( e, save_attrs, text );
        if ( rc != LDAP_SUCCESS ) {
                attrs_free( e->e_attrs );
                e->e_attrs = save_attrs;
                Debug( LDAP_DEBUG_ANY, "entry failed schema check: %s\n",
-                       text, 0, 0 );
+                       *text, 0, 0 );
                return rc;
        }
 
@@ -215,6 +234,7 @@ ldbm_back_modify(
        Entry           *matched;
        Entry           *e;
        int             manageDSAit = get_manageDSAit( op );
+       const char *text;
 
        Debug(LDAP_DEBUG_ARGS, "ldbm_back_modify:\n", 0, 0, 0);
 
@@ -262,12 +282,12 @@ ldbm_back_modify(
        }
        
        /* Modify the entry */
-       rc = ldbm_modify_internal( be, conn, op, ndn, modlist, e );
+       rc = ldbm_modify_internal( be, conn, op, ndn, modlist, e, &text );
 
        if( rc != LDAP_SUCCESS ) {
                if( rc != SLAPD_ABANDON ) {
                        send_ldap_result( conn, op, rc,
-                               NULL, NULL, NULL, NULL );
+                               NULL, text, NULL, NULL );
                }
 
                goto error_return;
index eeeea36b0e884dec1ee4884eb96afe6afb2c67a5..40a33545d481203a4a15f0a550a8542d37681947 100644 (file)
@@ -56,6 +56,7 @@ ldbm_back_modrdn(
        Entry           *matched;
        int                     rootlock = 0;
        int                     rc = -1;
+       const char *text;
        /* Added to support LDAP v2 correctly (deleteoldrdn thing) */
        char            *new_rdn_val = NULL;    /* Val of new rdn */
        char            *new_rdn_type = NULL;   /* Type of new rdn */
@@ -359,7 +360,6 @@ ldbm_back_modrdn(
 #ifdef SLAPD_SCHEMA_NOT_COMPAT
                {
                        int rc;
-                       const char *text;
 
                        mod[0].sml_desc = NULL;
                        rc = slap_str2ad( new_rdn_type, &mod[0].sml_desc, &text );
@@ -407,7 +407,6 @@ ldbm_back_modrdn(
 #ifdef SLAPD_SCHEMA_NOT_COMPAT
                        {
                                int rc;
-                               const char *text;
 
                                mod[1].sml_desc = NULL;
                                rc = slap_str2ad( old_rdn_type, &mod[1].sml_desc, &text );
@@ -468,12 +467,12 @@ ldbm_back_modrdn(
        }
 
        /* modify memory copy of entry */
-       rc = ldbm_modify_internal( be, conn, op, dn, &mod[0], e );
+       rc = ldbm_modify_internal( be, conn, op, dn, &mod[0], e, &text );
 
        if( rc != LDAP_SUCCESS ) {
                if( rc != SLAPD_ABANDON ) {
                        send_ldap_result( conn, op, rc,
-                               NULL, NULL, NULL, NULL );
+                               NULL, text, NULL, NULL );
                }
            
            goto return_results;
index ae427fc76bf09f65cd2db4de2999f134dc18f136..da370dad3f3beb297eb5d0bee697037f9bcccec9 100644 (file)
@@ -136,7 +136,7 @@ ldbm_back_exop_passwd(
                ml.sml_next = NULL;
 
                rc = ldbm_modify_internal( be,
-                       conn, op, op->o_ndn, &ml, e );
+                       conn, op, op->o_ndn, &ml, e, text );
 
 #ifndef SLAPD_SCHEMA_NOT_COMPAT
                ch_free(ml.ml_type);
index 475f45d36e49207a1da5449e3f281037dc41031b..888aeedb9d22d9692142bd0c4a29591ba02e4c94 100644 (file)
@@ -168,7 +168,8 @@ extern int ldbm_back_exop_passwd LDAP_P(( BackendDB *bd,
 /* returns LDAP error code indicating error OR SLAPD_ABANDON */
 int ldbm_modify_internal LDAP_P((Backend *be,
        Connection *conn, Operation *op,
-       const char *dn, Modifications *mods, Entry *e ));
+       const char *dn, Modifications *mods, Entry *e,
+       const char ** ));
 
 #ifdef HAVE_CYRUS_SASL
 /*