struct ldb_dn **_newdn)
{
struct ldb_message *msg = ldif->msg;
+ struct ldb_val _newrdn_val = {};
struct ldb_val *newrdn_val = NULL;
struct ldb_val *deleteoldrdn_val = NULL;
struct ldb_val *newsuperior_val = NULL;
goto err_op;
}
+ if (newrdn_val->length != 0 && strchr((const char *)newrdn_val->data, '=') == NULL) {
+ const char *rdn_name = ldb_dn_get_rdn_name(olddn);
+ char *new_rdn = NULL;
+
+ new_rdn = talloc_asprintf(tmp_ctx,
+ "%s=%s",
+ rdn_name,
+ (const char *)newrdn_val->data);
+ if (new_rdn == NULL) {
+ ldb_debug(ldb, LDB_DEBUG_ERROR,
+ "Error: failed to allocate '%s=%s'",
+ rdn_name, (char *)newrdn_val->data);
+ goto err_op;
+ }
+ _newrdn_val.data = (uint8_t *)new_rdn;
+ _newrdn_val.length = strlen(new_rdn);
+ newrdn_val = &_newrdn_val;
+ }
+
newrdn = ldb_dn_from_ldb_val(tmp_ctx, ldb, newrdn_val);
if (!ldb_dn_validate(newrdn)) {
ldb_debug(ldb, LDB_DEBUG_ERROR,