s4:ldb/tools: add support for "modrdn" to ldbmodify
authorStefan Metzmacher <metze@samba.org>
Tue, 5 Apr 2011 12:42:06 +0000 (14:42 +0200)
committerStefan Metzmacher <metze@samba.org>
Thu, 21 Apr 2011 12:41:36 +0000 (14:41 +0200)
Signed-off-by: Simo Sorce <idra@samba.org>
metze

source4/lib/ldb/tools/ldbmodify.c

index 1e7aa80d835e59a00ca0c5d2d143963c9b571894..2ca7b62b2c367c563576c2772a679b32fd5978b7 100644 (file)
@@ -61,6 +61,11 @@ static int process_file(struct ldb_context *ldb, FILE *f, unsigned int *count)
        }
 
        while ((ldif = ldb_ldif_read_file(ldb, f))) {
+               struct ldb_dn *olddn;
+               bool deleteoldrdn = false;
+               struct ldb_dn *newdn;
+               const char *errstr = NULL;
+
                switch (ldif->changetype) {
                case LDB_CHANGETYPE_NONE:
                case LDB_CHANGETYPE_ADD:
@@ -72,11 +77,28 @@ static int process_file(struct ldb_context *ldb, FILE *f, unsigned int *count)
                case LDB_CHANGETYPE_MODIFY:
                        ret = ldb_modify_ctrl(ldb, ldif->msg,req_ctrls);
                        break;
+               case LDB_CHANGETYPE_MODRDN:
+                       ret = ldb_ldif_parse_modrdn(ldb, ldif, ldif, &olddn,
+                                                   NULL, &deleteoldrdn,
+                                                   NULL, &newdn);
+                       if (ret == LDB_SUCCESS) {
+                               if (deleteoldrdn) {
+                                       ret = ldb_rename(ldb, olddn, newdn);
+                               } else {
+                                       errstr = "modrdn: deleteoldrdn=0 "
+                                                "not supported.";
+                                       ret = LDB_ERR_CONSTRAINT_VIOLATION;
+                               }
+                       }
+                       break;
                }
                if (ret != LDB_SUCCESS) {
+                       if (errstr == NULL) {
+                               errstr = ldb_errstring(ldb);
+                       }
                        fprintf(stderr, "ERR: (%s) \"%s\" on DN %s\n",
                                ldb_strerror(ret),
-                               ldb_errstring(ldb), ldb_dn_get_linearized(ldif->msg->dn));
+                               errstr, ldb_dn_get_linearized(ldif->msg->dn));
                        failures++;
                        fun_ret = ret;
                } else {