diff options
Diffstat (limited to 'source4/lib/ldb/ldb_ildap/ldb_ildap.c')
-rw-r--r-- | source4/lib/ldb/ldb_ildap/ldb_ildap.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/source4/lib/ldb/ldb_ildap/ldb_ildap.c b/source4/lib/ldb/ldb_ildap/ldb_ildap.c index ffde048223..352b7696d6 100644 --- a/source4/lib/ldb/ldb_ildap/ldb_ildap.c +++ b/source4/lib/ldb/ldb_ildap/ldb_ildap.c @@ -591,6 +591,8 @@ static int ildb_rename(struct ildb_context *ac) { struct ldb_request *req = ac->req; struct ldap_message *msg; + const char *rdn_name; + const struct ldb_val *rdn_val; msg = new_ldap_message(req); if (msg == NULL) { @@ -604,10 +606,16 @@ static int ildb_rename(struct ildb_context *ac) return LDB_ERR_INVALID_DN_SYNTAX; } - msg->r.ModifyDNRequest.newrdn = - talloc_asprintf(msg, "%s=%s", - ldb_dn_get_rdn_name(req->op.rename.newdn), - ldb_dn_escape_value(msg, *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)) { + msg->r.ModifyDNRequest.newrdn = + talloc_asprintf(msg, "%s=%s", rdn_name, + ldb_dn_escape_value(msg, *rdn_val)); + } else { + msg->r.ModifyDNRequest.newrdn = talloc_strdup(msg, ""); + } if (msg->r.ModifyDNRequest.newrdn == NULL) { talloc_free(msg); return LDB_ERR_OPERATIONS_ERROR; |