[SCM] Samba Shared Repository - branch v3-3-test updated - release-3-2-0pre2-2484-g452a9ea

Günther Deschner gd at samba.org
Fri May 16 10:17:52 GMT 2008


The branch, v3-3-test has been updated
       via  452a9ea4af19d3aebc35929edaf4e5adf8c1fd11 (commit)
       via  ae60695a349bccd1128e6c439664b0607627ef23 (commit)
       via  ff8a9655ccd40bc2ca3ef0403308193d956c4adf (commit)
       via  a01ed719c31998620927dc9b1664ba8e36bd9b21 (commit)
      from  151d62da1321322615daadabb41d049974f5fe6a (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-3-test


- Log -----------------------------------------------------------------
commit 452a9ea4af19d3aebc35929edaf4e5adf8c1fd11
Author: Günther Deschner <gd at samba.org>
Date:   Fri May 16 12:16:04 2008 +0200

    libnetjoin: for informational reasons, report forest_name.
    
    Guenther

commit ae60695a349bccd1128e6c439664b0607627ef23
Author: Günther Deschner <gd at samba.org>
Date:   Fri May 16 12:11:43 2008 +0200

    netdomjoin-gui: before prompting for creds (for receiving joinable ous), find a dc.
    
    Guenther

commit ff8a9655ccd40bc2ca3ef0403308193d956c4adf
Author: Günther Deschner <gd at samba.org>
Date:   Fri May 16 11:52:48 2008 +0200

    net: use the netapi_ctx from the net_context struct.
    
    Guenther

commit a01ed719c31998620927dc9b1664ba8e36bd9b21
Author: Günther Deschner <gd at samba.org>
Date:   Thu May 15 17:47:07 2008 +0200

    dsgetdcname: store client sitename for mailslot and cldap replies.
    
    Guenther

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

Summary of changes:
 .../examples/netdomjoin-gui/netdomjoin-gui.c       |   32 +++++++++++++++++++-
 source/libnet/libnet_join.c                        |    1 +
 source/librpc/gen_ndr/libnet_join.h                |    2 +
 source/librpc/gen_ndr/ndr_libnet_join.c            |    2 +
 source/librpc/idl/libnet_join.idl                  |    2 +
 source/libsmb/dsgetdcname.c                        |    6 ++++
 source/utils/net_dom.c                             |   32 +++++++------------
 7 files changed, 56 insertions(+), 21 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/lib/netapi/examples/netdomjoin-gui/netdomjoin-gui.c b/source/lib/netapi/examples/netdomjoin-gui/netdomjoin-gui.c
index a11b0eb..df81937 100644
--- a/source/lib/netapi/examples/netdomjoin-gui/netdomjoin-gui.c
+++ b/source/lib/netapi/examples/netdomjoin-gui/netdomjoin-gui.c
@@ -932,6 +932,9 @@ static void callback_do_getous(GtkWidget *widget,
 	const char **ous = NULL;
 	int i;
 	const char *domain = NULL;
+	struct DOMAIN_CONTROLLER_INFO *dc_info = NULL;
+	const char *err_str = NULL;
+	GtkWidget *dialog;
 
 	struct join_state *state = (struct join_state *)data;
 
@@ -939,6 +942,34 @@ static void callback_do_getous(GtkWidget *widget,
 
 	domain = state->name_buffer_new ? state->name_buffer_new : state->name_buffer_initial;
 
+	status = DsGetDcName(NULL,
+			     domain,
+			     NULL,
+			     NULL,
+			     0,
+			     &dc_info);
+	if (status != 0) {
+		err_str = libnetapi_get_error_string(state->ctx, status);
+		g_print("callback_do_getous: failed find dc (%s)\n", err_str);
+
+		dialog = gtk_message_dialog_new(GTK_WINDOW(state->window_parent),
+						GTK_DIALOG_DESTROY_WITH_PARENT,
+						GTK_MESSAGE_ERROR,
+						GTK_BUTTONS_CLOSE,
+						"Failed to find a domain controller for domain: \"%s\": %s",
+						domain,
+						err_str);
+
+		gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);
+		g_signal_connect_swapped(dialog, "response",
+					 G_CALLBACK(gtk_widget_destroy),
+					 dialog);
+
+		gtk_widget_show(dialog);
+
+		return;
+	}
+
 	if (!state->account || !state->password) {
 		debug("callback_do_getous: no creds yet\n");
 		callback_creds_prompt(NULL, state,
@@ -956,7 +987,6 @@ static void callback_do_getous(GtkWidget *widget,
 				   state->password,
 				   &num_ous, &ous);
 	if (status != NET_API_STATUS_SUCCESS) {
-		GtkWidget *dialog;
 		callback_do_freeauth(NULL, state);
 		debug("failed to call NetGetJoinableOUs: %s\n",
 			libnetapi_get_error_string(state->ctx, status));
diff --git a/source/libnet/libnet_join.c b/source/libnet/libnet_join.c
index 4cfdd50..6426dc3 100644
--- a/source/libnet/libnet_join.c
+++ b/source/libnet/libnet_join.c
@@ -689,6 +689,7 @@ static NTSTATUS libnet_join_lookup_dc_rpc(TALLOC_CTX *mem_ctx,
 		r->out.domain_is_ad = true;
 		r->out.netbios_domain_name = info->dns.name.string;
 		r->out.dns_domain_name = info->dns.dns_domain.string;
+		r->out.forest_name = info->dns.dns_forest.string;
 		r->out.domain_sid = info->dns.sid;
 	}
 
diff --git a/source/librpc/gen_ndr/libnet_join.h b/source/librpc/gen_ndr/libnet_join.h
index e5ec438..f4c44e4 100644
--- a/source/librpc/gen_ndr/libnet_join.h
+++ b/source/librpc/gen_ndr/libnet_join.h
@@ -35,6 +35,7 @@ struct libnet_JoinCtx {
 		const char * account_name;
 		const char * netbios_domain_name;
 		const char * dns_domain_name;
+		const char * forest_name;
 		const char * dn;
 		struct dom_sid *domain_sid;/* [ref] */
 		uint8_t modified_config;
@@ -66,6 +67,7 @@ struct libnet_UnjoinCtx {
 	struct {
 		const char * netbios_domain_name;
 		const char * dns_domain_name;
+		const char * forest_name;
 		uint8_t modified_config;
 		const char * error_string;
 		uint8_t disabled_machine_account;
diff --git a/source/librpc/gen_ndr/ndr_libnet_join.c b/source/librpc/gen_ndr/ndr_libnet_join.c
index 753859f..a9241f6 100644
--- a/source/librpc/gen_ndr/ndr_libnet_join.c
+++ b/source/librpc/gen_ndr/ndr_libnet_join.c
@@ -50,6 +50,7 @@ _PUBLIC_ void ndr_print_libnet_JoinCtx(struct ndr_print *ndr, const char *name,
 		ndr_print_string(ndr, "account_name", r->out.account_name);
 		ndr_print_string(ndr, "netbios_domain_name", r->out.netbios_domain_name);
 		ndr_print_string(ndr, "dns_domain_name", r->out.dns_domain_name);
+		ndr_print_string(ndr, "forest_name", r->out.forest_name);
 		ndr_print_string(ndr, "dn", r->out.dn);
 		ndr_print_ptr(ndr, "domain_sid", r->out.domain_sid);
 		ndr->depth++;
@@ -104,6 +105,7 @@ _PUBLIC_ void ndr_print_libnet_UnjoinCtx(struct ndr_print *ndr, const char *name
 		ndr->depth++;
 		ndr_print_string(ndr, "netbios_domain_name", r->out.netbios_domain_name);
 		ndr_print_string(ndr, "dns_domain_name", r->out.dns_domain_name);
+		ndr_print_string(ndr, "forest_name", r->out.forest_name);
 		ndr_print_uint8(ndr, "modified_config", r->out.modified_config);
 		ndr_print_string(ndr, "error_string", r->out.error_string);
 		ndr_print_uint8(ndr, "disabled_machine_account", r->out.disabled_machine_account);
diff --git a/source/librpc/idl/libnet_join.idl b/source/librpc/idl/libnet_join.idl
index 7f6e346..5af6b05 100644
--- a/source/librpc/idl/libnet_join.idl
+++ b/source/librpc/idl/libnet_join.idl
@@ -35,6 +35,7 @@ interface libnetjoin
 		[out] string account_name,
 		[out] string netbios_domain_name,
 		[out] string dns_domain_name,
+		[out] string forest_name,
 		[out] string dn,
 		[out] dom_sid *domain_sid,
 		[out] boolean8 modified_config,
@@ -58,6 +59,7 @@ interface libnetjoin
 		[in,noprint] messaging_context *msg_ctx,
 		[out] string netbios_domain_name,
 		[out] string dns_domain_name,
+		[out] string forest_name,
 		[out] boolean8 modified_config,
 		[out] string error_string,
 		[out] boolean8 disabled_machine_account,
diff --git a/source/libsmb/dsgetdcname.c b/source/libsmb/dsgetdcname.c
index 16148a3..d57689c 100644
--- a/source/libsmb/dsgetdcname.c
+++ b/source/libsmb/dsgetdcname.c
@@ -342,12 +342,18 @@ static NTSTATUS store_cldap_reply(TALLOC_CTX *mem_ctx,
 		if (!NT_STATUS_IS_OK(status)) {
 			goto done;
 		}
+		if (logon29.client_site) {
+			sitename_store(logon29.domain, logon29.client_site);
+		}
 	}
 	if (logon29.dns_domain) {
 		status = dsgetdcname_cache_store(mem_ctx, logon29.dns_domain, &blob);
 		if (!NT_STATUS_IS_OK(status)) {
 			goto done;
 		}
+		if (logon29.client_site) {
+			sitename_store(logon29.dns_domain, logon29.client_site);
+		}
 	}
 
  done:
diff --git a/source/utils/net_dom.c b/source/utils/net_dom.c
index 86dad65..1a876a7 100644
--- a/source/utils/net_dom.c
+++ b/source/utils/net_dom.c
@@ -42,7 +42,6 @@ int net_help_dom(struct net_context *c, int argc, const char **argv)
 
 static int net_dom_unjoin(struct net_context *c, int argc, const char **argv)
 {
-	struct libnetapi_ctx *ctx = NULL;
 	const char *server_name = NULL;
 	const char *account = NULL;
 	const char *password = NULL;
@@ -90,18 +89,10 @@ static int net_dom_unjoin(struct net_context *c, int argc, const char **argv)
 		}
 	}
 
-	status = libnetapi_init(&ctx);
-	if (status != 0) {
-		return -1;
-	}
-
-	libnetapi_set_username(ctx, c->opt_user_name);
-	libnetapi_set_password(ctx, c->opt_password);
-
 	status = NetUnjoinDomain(server_name, account, password, unjoin_flags);
 	if (status != 0) {
 		printf("Failed to unjoin domain: %s\n",
-			libnetapi_get_error_string(ctx, status));
+			libnetapi_get_error_string(c->netapi_ctx, status));
 		goto done;
 	}
 
@@ -136,7 +127,6 @@ static int net_dom_unjoin(struct net_context *c, int argc, const char **argv)
 
 static int net_dom_join(struct net_context *c, int argc, const char **argv)
 {
-	struct libnetapi_ctx *ctx = NULL;
 	const char *server_name = NULL;
 	const char *domain_name = NULL;
 	const char *account_ou = NULL;
@@ -204,19 +194,11 @@ static int net_dom_join(struct net_context *c, int argc, const char **argv)
 
 	/* check if domain is a domain or a workgroup */
 
-	status = libnetapi_init(&ctx);
-	if (status != 0) {
-		return -1;
-	}
-
-	libnetapi_set_username(ctx, c->opt_user_name);
-	libnetapi_set_password(ctx, c->opt_password);
-
 	status = NetJoinDomain(server_name, domain_name, account_ou,
 			       Account, password, join_flags);
 	if (status != 0) {
 		printf("Failed to join domain: %s\n",
-			libnetapi_get_error_string(ctx, status));
+			libnetapi_get_error_string(c->netapi_ctx, status));
 		goto done;
 	}
 
@@ -251,6 +233,8 @@ static int net_dom_join(struct net_context *c, int argc, const char **argv)
 
 int net_dom(struct net_context *c, int argc, const char **argv)
 {
+	NET_API_STATUS status;
+
 	struct functable func[] = {
 		{"JOIN", net_dom_join},
 		{"UNJOIN", net_dom_unjoin},
@@ -258,5 +242,13 @@ int net_dom(struct net_context *c, int argc, const char **argv)
 		{NULL, NULL}
 	};
 
+	status = libnetapi_init(&c->netapi_ctx);
+	if (status != 0) {
+		return -1;
+	}
+
+	libnetapi_set_username(c->netapi_ctx, c->opt_user_name);
+	libnetapi_set_password(c->netapi_ctx, c->opt_password);
+
 	return net_run_function(c, argc, argv, func, net_dom_usage);
 }


-- 
Samba Shared Repository


More information about the samba-cvs mailing list