]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-ldif/ldif.c
support increment; don't bother too much about return values of send_search_* functions
[openldap] / servers / slapd / back-ldif / ldif.c
index 6c2890a838fb9bafb9787bdddd61293141c032eb..c9f3fe1ca9185255ccf4d527f8bca95adebaf4d4 100644 (file)
@@ -330,7 +330,7 @@ static int r_enum_tree(enumCookie *ck, struct berval *path,
                                                        ? LDAP_SCOPE_BASE : LDAP_SCOPE_SUBTREE );
 
                                ck->rs->sr_entry = e;
-                               rc = send_search_reference( ck->op, ck->rs );
+                               rc = send_search_reference( ck->op, ck->rs ) < 0;
                                ber_bvarray_free( ck->rs->sr_ref );
                                ber_bvarray_free( erefs );
                                ck->rs->sr_ref = NULL;
@@ -341,7 +341,7 @@ static int r_enum_tree(enumCookie *ck, struct berval *path,
                                ck->rs->sr_entry = e;
                                ck->rs->sr_attrs = ck->op->ors_attrs;
                                ck->rs->sr_flags = REP_ENTRY_MODIFIABLE;
-                               rc = send_search_entry(ck->op, ck->rs);
+                               rc = send_search_entry(ck->op, ck->rs) < 0;
                                ck->rs->sr_entry = NULL;
                        }
                        fd = 1;
@@ -466,11 +466,14 @@ enum_tree(
        struct ldif_info *ni = (struct ldif_info *) ck->op->o_bd->be_private;
        struct berval path;
        struct berval pdn, pndn;
+       int rc;
 
        dnParent( &ck->op->o_req_dn, &pdn );
        dnParent( &ck->op->o_req_ndn, &pndn );
        dn2path( &ck->op->o_req_ndn, &ck->op->o_bd->be_nsuffix[0], &ni->li_base_path, &path);
-       return r_enum_tree(ck, &path, &pdn, &pndn);
+       rc = r_enum_tree(ck, &path, &pdn, &pndn);
+       ch_free( path.bv_val );
+       return rc;
 }
 
 /* Get the parent path plus the LDIF suffix */
@@ -517,7 +520,6 @@ static int apply_modify_to_entry(Entry * entry,
                                get_permissiveModify(op),
                                &rs->sr_text, textbuf,
                                sizeof( textbuf ) );
-
                        break;
                                
                case LDAP_MOD_REPLACE:
@@ -525,10 +527,17 @@ static int apply_modify_to_entry(Entry * entry,
                                 get_permissiveModify(op),
                                 &rs->sr_text, textbuf,
                                 sizeof( textbuf ) );
-
                        break;
+
                case LDAP_MOD_INCREMENT:
+                       rc = modify_increment_values( entry,
+                               mods, get_permissiveModify(op),
+                               &rs->sr_text, textbuf,
+                               sizeof( textbuf ) );
+                       break;
+
                        break;
+
                case SLAP_MOD_SOFTADD:
                        mods->sm_op = LDAP_MOD_ADD;
                        rc = modify_add_values(entry, mods,
@@ -1161,6 +1170,8 @@ ldif_back_db_destroy(
                           )
 {
        struct ldif_info *ni = be->be_private;
+
+       ch_free(ni->li_base_path.bv_val);
        ldap_pvt_thread_mutex_destroy(&ni->li_mutex);
        free( be->be_private );
        return 0;
@@ -1191,6 +1202,7 @@ ldif_back_initialize(
        int rc;
 
        bi->bi_flags |=
+               SLAP_BFLAG_INCREMENT |
                SLAP_BFLAG_REFERRALS;
 
        bi->bi_controls = controls;
@@ -1236,6 +1248,8 @@ ldif_back_initialize(
        bi->bi_tool_id2entry_get = 0;
        bi->bi_tool_entry_modify = 0;
 
+       bi->bi_cf_ocs = ldifocs;
+
        rc = config_register_schema( ldifcfg, ldifocs );
        if ( rc ) return rc;
        return 0;