+ ret = dsdb_module_rename(module,
+ req->op.rename.olddn,
+ req->op.rename.newdn,
+ DSDB_FLAG_NEXT_MODULE,
+ req);
+ if (ret != LDB_SUCCESS) {
+ /* Error msg is most probably done by module bellow*/
+ return ret;
+ }
+
+ ret = dsdb_module_dn_by_guid(module, req, ntds_guid, &new_ntds_dn, req);
+ if (ret != LDB_SUCCESS) {
+ return ldb_error(ldb, LDB_ERR_OPERATIONS_ERROR, "Unable to find the new DN of NTDS Settings object");
+ }
+
+ msg = ldb_msg_new(req);
+ if (msg == NULL) {
+ return ldb_module_oom(module);
+ }
+
+ msg->dn = ldb_dn_new(msg, ldb, "@ROOTDSE");
+ if (msg->dn == NULL) {
+ return ldb_module_oom(module);
+ }
+
+ ret = ldb_msg_add_linearized_dn(msg, "dsServiceName", new_ntds_dn);
+ if (ret != LDB_SUCCESS) {
+ return ldb_module_oom(module);
+ }
+
+ ret = dsdb_replace(ldb, msg, DSDB_FLAG_AS_SYSTEM);
+ if (ret != LDB_SUCCESS) {
+ return ldb_error(ldb, ret, "Unable to update dsServiceName of ROOTDSE");
+ }
+
+ ok = samdb_set_ntds_settings_dn(ldb, new_ntds_dn);
+ if (!ok) {
+ return ldb_error(ldb, LDB_ERR_OPERATIONS_ERROR, "Call to samdb_set_ntds_settings_dn has failed");
+ }
+
+ return ldb_module_done(req, NULL, NULL, LDB_SUCCESS);