[SCM] Samba Shared Repository - branch master updated

Anatoliy Atanasov anatoliy at samba.org
Tue Aug 3 05:34:42 MDT 2010


The branch, master has been updated
       via  bf5d88e... s4/vampire: update dNSHostName for the Server object
      from  f827904... s4-schema: More verbose error log when subClassOf is not found in schema

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit bf5d88ec1caf47d9b0009396811d6bff5bfecc31
Author: Anatoliy Atanasov <anatoliy.atanasov at postpath.com>
Date:   Mon Aug 2 16:47:38 2010 +0300

    s4/vampire: update dNSHostName for the Server object

-----------------------------------------------------------------------

Summary of changes:
 source4/libnet/libnet_vampire.c |   62 ++++++++++++++++++++++++++++++++++++++-
 1 files changed, 61 insertions(+), 1 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source4/libnet/libnet_vampire.c b/source4/libnet/libnet_vampire.c
index b85869e..5a5f126 100644
--- a/source4/libnet/libnet_vampire.c
+++ b/source4/libnet/libnet_vampire.c
@@ -40,6 +40,7 @@
 #include "param/param.h"
 #include "param/provision.h"
 #include "libcli/security/dom_sid.h"
+#include "dsdb/common/util.h"
 
 /* 
 List of tasks vampire.py must perform:
@@ -88,6 +89,7 @@ struct libnet_vampire_cb_state {
 	struct tevent_context *event_ctx;
 	unsigned total_objects;
 	char *last_partition;
+	const char *server_dn_str;
 };
 
 /* Caller is expected to keep supplied pointers around for the lifetime of the structure */
@@ -152,6 +154,7 @@ NTSTATUS libnet_vampire_cb_prepare_db(void *private_data,
 	s->ldb = talloc_steal(s, result.samdb);
 	s->lp_ctx = talloc_steal(s, result.lp_ctx);
 	s->provision_schema = dsdb_get_schema(s->ldb, s);
+	s->server_dn_str = talloc_steal(s, p->dest_dsa->server_dn_str);
 
 	/* wrap the entire vapire operation in a transaction.  This
 	   isn't just cosmetic - we use this to ensure that linked
@@ -701,6 +704,55 @@ NTSTATUS libnet_vampire_cb_store_chunk(void *private_data,
 	return NT_STATUS_OK;
 }
 
+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;
+}
+
+
 NTSTATUS libnet_Vampire(struct libnet_context *ctx, TALLOC_CTX *mem_ctx, 
 			struct libnet_Vampire *r)
 {
@@ -836,7 +888,15 @@ NTSTATUS libnet_Vampire(struct libnet_context *ctx, TALLOC_CTX *mem_ctx,
 		talloc_free(s);
 		return NT_STATUS_INTERNAL_DB_ERROR;
 	}
-
+	/* during dcpromo the 2nd computer adds dNSHostName attribute to his Server object
+	 * the attribute appears on the original DC after replication
+	 */
+	status = update_dnshostname_for_server(s, s->ldb, s->server_dn_str, s->netbios_name, s->realm);
+	if (!NT_STATUS_IS_OK(status)) {
+		printf("Failed to update dNSHostName on Server object - %s\n", nt_errstr(status));
+		talloc_free(s);
+		return status;
+	}
 	/* prepare the transaction - this prepares to commit all the changes in
 	   the ldb from the whole vampire.  Note that this 
 	   triggers the writing of the linked attribute backlinks.


-- 
Samba Shared Repository


More information about the samba-cvs mailing list