+static NTSTATUS update_dnshostname_for_server(TALLOC_CTX *mem_ctx,
+ struct ldb_context *ldb,
+ const char *server_dn_str,
+ const char *netbios_name,
+ const char *realm)
+{
+ int ret;
+ struct ldb_message *msg;
+ struct ldb_message_element *el;
+ struct ldb_dn *server_dn;
+ const char *dNSHostName = strlower_talloc(mem_ctx,
+ talloc_asprintf(mem_ctx,
+ "%s.%s",
+ netbios_name,
+ realm));
+ msg = ldb_msg_new(mem_ctx);
+ if (msg == NULL) {
+ return NT_STATUS_NO_MEMORY;
+ }
+
+ server_dn = ldb_dn_new(mem_ctx, ldb, server_dn_str);
+ if (!server_dn) {
+ return NT_STATUS_INTERNAL_ERROR;
+ }
+
+ msg->dn = server_dn;
+ ret = ldb_msg_add_empty(msg, "dNSHostName", LDB_FLAG_MOD_ADD, &el);
+ if (ret != LDB_SUCCESS) {
+ return NT_STATUS_INTERNAL_ERROR;
+ }
+
+ ret = ldb_msg_add_steal_string(msg,
+ "dNSHostName",
+ talloc_asprintf(el->values, "%s", dNSHostName));
+ if (ret != LDB_SUCCESS) {
+ return NT_STATUS_INTERNAL_ERROR;
+ }
+
+ ret = dsdb_modify(ldb, msg, DSDB_MODIFY_PERMISSIVE);
+ if (ret != LDB_SUCCESS) {
+ DEBUG(0,(__location__ ": Failed to add dnsHostName to the Server object: %s\n",
+ ldb_errstring(ldb)));
+ return NT_STATUS_INTERNAL_ERROR;
+ }
+
+ return NT_STATUS_OK;
+}
+
+