r9857: Fix rename/delete issues
authorJelmer Vernooij <jelmer@samba.org>
Thu, 1 Sep 2005 01:11:15 +0000 (01:11 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:36:18 +0000 (13:36 -0500)
source/lib/ldb/modules/ldb_map.c
source/lib/samba3/PLAN
testprogs/ejs/samba3sam

index de7a00ef60ad2af08171cb0eef33bc7a5ceb7ebf..cdf0e2940581d24df08e2aba86f4d68f84e3c5ad 100644 (file)
@@ -725,19 +725,26 @@ static int map_rename(struct ldb_module *module, const struct ldb_dn *olddn, con
 {
        struct ldb_map_context *privdat = map_get_privdat(module);
        struct ldb_dn *n_olddn, *n_newdn;
-       int ret;
-
-       ret = ldb_next_rename_record(module, n_olddn, n_newdn);
-
+       int fb_ret, mp_ret;
+       
        n_olddn = map_local_dn(module, module, olddn);
        n_newdn = map_local_dn(module, module, newdn);
 
-       ret = ldb_rename(privdat->mapped_ldb, n_olddn, n_newdn);
+       mp_ret = ldb_rename(privdat->mapped_ldb, n_olddn, n_newdn);
+       if (mp_ret != -1) {
+               ldb_debug(module->ldb, LDB_DEBUG_TRACE, "Mapped record renamed");
+       }
+
+       fb_ret = ldb_next_rename_record(module, olddn, newdn);
+       
+       if (fb_ret != -1) {
+               ldb_debug(module->ldb, LDB_DEBUG_TRACE, "Fallback record renamed");
+       }
 
        talloc_free(n_olddn);
        talloc_free(n_newdn);
        
-       return ret;
+       return (fb_ret == -1 && mp_ret == -1)?-1:0;
 }
 
 /*
@@ -747,17 +754,23 @@ static int map_delete(struct ldb_module *module, const struct ldb_dn *dn)
 {
        struct ldb_map_context *privdat = map_get_privdat(module);
        struct ldb_dn *newdn;
-       int ret;
+       int fb_ret, mp_ret;
 
-       ret = ldb_next_delete_record(module, dn);
-       
        newdn = map_local_dn(module, module, dn);
 
-       ldb_delete(privdat->mapped_ldb, newdn);
+       mp_ret = ldb_delete(privdat->mapped_ldb, newdn);
+       if (mp_ret != -1) {
+               ldb_debug(module->ldb, LDB_DEBUG_TRACE, "Mapped record deleted");
+       }
+
+       fb_ret = ldb_next_delete_record(module, dn);
+       if (fb_ret != -1) {
+               ldb_debug(module->ldb, LDB_DEBUG_TRACE, "Fallback record deleted");
+       }
 
        talloc_free(newdn);
 
-       return ret;
+       return (fb_ret == -1 && mp_ret == -1)?-1:0;
 }
 
 /* search fallback database */
index 80885a4ec7d709483d02f20b0cd36cc1b2455d43..4351ce2e61fe6f3c402594ce3274dff66b186120 100644 (file)
@@ -1,4 +1,3 @@
 TODO (SoC project):
  - [ldb_map] some more strict checking when sending data to an LDAP server
- - [ldb_map] fix rename
  - fix ntPwdHash / lmPwdHash bug
index 26c3248f07082aba5c4f14e3eed6edfc56eedeb0..14ddd011e98692882fd45126f5e9f635146b28a5 100755 (executable)
@@ -164,21 +164,18 @@ assert(msg.length >= 1);
 assert(msg[0].description == undefined);
 
 println("Renaming record...");
-ok = s4.rename("cn=Niemand,ou=Tests,dc=vernstok,dc=nl", "cn=Iemand,ou=Tests,dc=vernstok,dc=nl");
+ok = s4.rename("cn=Niemand,ou=Tests,dc=vernstok,dc=nl", "cn=Niemand,dc=vernstok,dc=nl");
 
-println("Checking whether old record is gone...");
+println("Checking whether DN has changed...");
 msg = s4.search("(cn=Niemand)");
-assert(msg.length == 0);
-
-println("Checking whether new record is there...");
-msg = s4.search("(cn=Iemand)");
 assert(msg.length == 1);
+assert(msg[0].dn == "cn=Niemand,dc=vernstok,dc=nl");
 
 println("Deleting record...");
-ok = s4.del("cn=Iemand,ou=Tests,dc=vernstok,dc=nl");
+ok = s4.del("cn=Niemand,dc=vernstok,dc=nl");
 assert(ok);
 
 println("Checking whether record is gone...");
-msg = s4.search("(cn=Iemand)");
+msg = s4.search("(cn=Niemand)");
 assert(msg.length == 0);