ldb:ldb_ldap.c rename operation - check for the RDN name and value
authorMatthias Dieter Wallnöfer <mdw@samba.org>
Wed, 10 Nov 2010 15:20:38 +0000 (16:20 +0100)
committerMatthias Dieter Wallnöfer <mdw@samba.org>
Thu, 11 Nov 2010 09:03:41 +0000 (10:03 +0100)
Make it more similar to "ldb_ildap.c" and also more save

source4/lib/ldb/ldb_ldap/ldb_ldap.c

index e028fb20a3f3c77cda139838ff53c1de151b3281..ee677cce94a71173f3a47a4a0ee7dea21b8091ca 100644 (file)
@@ -389,6 +389,8 @@ static int lldb_rename(struct lldb_context *lldb_ac)
        struct lldb_private *lldb = lldb_ac->lldb;
        struct ldb_module *module = lldb_ac->module;
        struct ldb_request *req = lldb_ac->req;
+       const char *rdn_name;
+       const struct ldb_val *rdn_val;
        char *old_dn;
        char *newrdn;
        char *parentdn;
@@ -403,9 +405,15 @@ static int lldb_rename(struct lldb_context *lldb_ac)
                return LDB_ERR_OPERATIONS_ERROR;
        }
 
-       newrdn = talloc_asprintf(lldb_ac, "%s=%s",
-                                ldb_dn_get_rdn_name(req->op.rename.newdn),
-                                ldb_dn_escape_value(lldb, *(ldb_dn_get_rdn_val(req->op.rename.newdn))));
+       rdn_name = ldb_dn_get_rdn_name(req->op.rename.newdn);
+       rdn_val = ldb_dn_get_rdn_val(req->op.rename.newdn);
+
+       if ((rdn_name != NULL) && (rdn_val != NULL)) {
+               newrdn = talloc_asprintf(lldb_ac, "%s=%s", rdn_name,
+                                        ldb_dn_escape_value(lldb, *rdn_val));
+       } else {
+               newrdn = talloc_strdup(lldb_ac, "");
+       }
        if (!newrdn) {
                return LDB_ERR_OPERATIONS_ERROR;
        }