[SCM] Samba Shared Repository - branch v3-2-test updated - initial-v3-2-test-1361-gf21871c

Günther Deschner gd at samba.org
Tue Jan 15 10:03:25 GMT 2008


The branch, v3-2-test has been updated
       via  f21871c6d60e02ed53f060abbbfb2ef656cdc311 (commit)
       via  1a5b72daa36073cc0604211248d869bf0d7546c6 (commit)
       via  99e3e4b0dd0b0755189c1c740f2975bc75a0e28d (commit)
      from  b66ac8567c16f2c35fceceba2f858d5503620309 (commit)

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


- Log -----------------------------------------------------------------
commit f21871c6d60e02ed53f060abbbfb2ef656cdc311
Author: Günther Deschner <gd at samba.org>
Date:   Tue Jan 15 11:00:37 2008 +0100

    No need to re-establish AD connection all the time.
    
    Guenther

commit 1a5b72daa36073cc0604211248d869bf0d7546c6
Author: Günther Deschner <gd at samba.org>
Date:   Tue Jan 15 10:58:27 2008 +0100

    Use dsgetdcname() to find a dc when unjoining in libnetjoin.
    
    Guenther

commit 99e3e4b0dd0b0755189c1c740f2975bc75a0e28d
Author: Günther Deschner <gd at samba.org>
Date:   Tue Jan 15 10:51:40 2008 +0100

    Re-arrange pre- and postprocessing code in libnetjoin.
    
    Guenther

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

Summary of changes:
 source/libnet/libnet_join.c |  134 ++++++++++++++++++++++++++++++++++---------
 1 files changed, 107 insertions(+), 27 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/libnet/libnet_join.c b/source/libnet/libnet_join.c
index eaf851c..c60f4c9 100644
--- a/source/libnet/libnet_join.c
+++ b/source/libnet/libnet_join.c
@@ -107,10 +107,6 @@ static ADS_STATUS libnet_join_connect_ads(TALLOC_CTX *mem_ctx,
 {
 	ADS_STATUS status;
 
-	if (r->in.ads) {
-		ads_destroy(&r->in.ads);
-	}
-
 	status = libnet_connect_ads(r->in.domain_name,
 				    r->in.domain_name,
 				    r->in.dc_name,
@@ -134,10 +130,6 @@ static ADS_STATUS libnet_unjoin_connect_ads(TALLOC_CTX *mem_ctx,
 {
 	ADS_STATUS status;
 
-	if (r->in.ads) {
-		ads_destroy(&r->in.ads);
-	}
-
 	status = libnet_connect_ads(r->in.domain_name,
 				    r->in.domain_name,
 				    r->in.dc_name,
@@ -1013,6 +1005,58 @@ static WERROR do_UnjoinConfig(struct libnet_UnjoinCtx *r)
 /****************************************************************
 ****************************************************************/
 
+static WERROR libnet_join_pre_processing(TALLOC_CTX *mem_ctx,
+					 struct libnet_JoinCtx *r)
+{
+
+	if (!r->in.domain_name) {
+		return WERR_INVALID_PARAM;
+	}
+
+	if (r->in.modify_config && !lp_include_registry_globals()) {
+		return WERR_NOT_SUPPORTED;
+	}
+
+	if (IS_DC) {
+		return WERR_SETUP_DOMAIN_CONTROLLER;
+	}
+
+	if (!secrets_init()) {
+		libnet_join_set_error_string(mem_ctx, r,
+			"Unable to open secrets database");
+		return WERR_CAN_NOT_COMPLETE;
+	}
+
+	return WERR_OK;
+}
+
+/****************************************************************
+****************************************************************/
+
+static WERROR libnet_join_post_processing(TALLOC_CTX *mem_ctx,
+					  struct libnet_JoinCtx *r)
+{
+	WERROR werr;
+
+	if (!W_ERROR_IS_OK(r->out.result)) {
+		return r->out.result;
+	}
+
+	werr = do_JoinConfig(r);
+	if (!W_ERROR_IS_OK(werr)) {
+		return werr;
+	}
+
+	if (r->in.join_flags & WKSSVC_JOIN_FLAGS_JOIN_TYPE) {
+		saf_store(r->in.domain_name, r->in.dc_name);
+	}
+
+	return WERR_OK;
+}
+
+/****************************************************************
+****************************************************************/
+
 static int libnet_destroy_JoinCtx(struct libnet_JoinCtx *r)
 {
 	if (r->in.ads) {
@@ -1170,30 +1214,23 @@ WERROR libnet_Join(TALLOC_CTX *mem_ctx,
 {
 	WERROR werr;
 
-	if (!r->in.domain_name) {
-		return WERR_INVALID_PARAM;
-	}
-
-	if (r->in.modify_config && !lp_include_registry_globals()) {
-		return WERR_NOT_SUPPORTED;
-	}
-
-	if (IS_DC) {
-		return WERR_SETUP_DOMAIN_CONTROLLER;
+	werr = libnet_join_pre_processing(mem_ctx, r);
+	if (!W_ERROR_IS_OK(werr)) {
+		goto done;
 	}
 
 	if (r->in.join_flags & WKSSVC_JOIN_FLAGS_JOIN_TYPE) {
 		werr = libnet_DomainJoin(mem_ctx, r);
 		if (!W_ERROR_IS_OK(werr)) {
-			return werr;
+			goto done;
 		}
 	}
 
-	werr = do_JoinConfig(r);
+	werr = libnet_join_post_processing(mem_ctx, r);
 	if (!W_ERROR_IS_OK(werr)) {
-		return werr;
+		goto done;
 	}
-
+ done:
 	return werr;
 }
 
@@ -1205,6 +1242,29 @@ static WERROR libnet_DomainUnjoin(TALLOC_CTX *mem_ctx,
 {
 	NTSTATUS status;
 
+	if (!r->in.dc_name) {
+		struct DS_DOMAIN_CONTROLLER_INFO *info;
+		status = dsgetdcname(mem_ctx,
+				     NULL,
+				     r->in.domain_name,
+				     NULL,
+				     NULL,
+				     DS_DIRECTORY_SERVICE_REQUIRED |
+				     DS_WRITABLE_REQUIRED |
+				     DS_RETURN_DNS_NAME,
+				     &info);
+		if (!NT_STATUS_IS_OK(status)) {
+			libnet_unjoin_set_error_string(mem_ctx, r,
+				"failed to find DC: %s",
+				nt_errstr(status));
+			return WERR_DOMAIN_CONTROLLER_NOT_FOUND;
+		}
+
+		r->in.dc_name = talloc_strdup(mem_ctx,
+					      info->domain_controller_name);
+		W_ERROR_HAVE_NO_MEMORY(r->in.dc_name);
+	}
+
 	status = libnet_join_unjoindomain_rpc(mem_ctx, r);
 	if (!NT_STATUS_IS_OK(status)) {
 		libnet_unjoin_set_error_string(mem_ctx, r,
@@ -1237,27 +1297,47 @@ static WERROR libnet_DomainUnjoin(TALLOC_CTX *mem_ctx,
 /****************************************************************
 ****************************************************************/
 
+static WERROR libnet_unjoin_pre_processing(TALLOC_CTX *mem_ctx,
+					   struct libnet_UnjoinCtx *r)
+{
+	if (r->in.modify_config && !lp_include_registry_globals()) {
+		return WERR_NOT_SUPPORTED;
+	}
+
+	if (!secrets_init()) {
+		libnet_unjoin_set_error_string(mem_ctx, r,
+			"Unable to open secrets database");
+		return WERR_CAN_NOT_COMPLETE;
+	}
+
+	return WERR_OK;
+}
+
+/****************************************************************
+****************************************************************/
+
 WERROR libnet_Unjoin(TALLOC_CTX *mem_ctx,
 		     struct libnet_UnjoinCtx *r)
 {
 	WERROR werr;
 
-	if (r->in.modify_config && !lp_include_registry_globals()) {
-		return WERR_NOT_SUPPORTED;
+	werr = libnet_unjoin_pre_processing(mem_ctx, r);
+	if (!W_ERROR_IS_OK(werr)) {
+		goto done;
 	}
 
 	if (r->in.unjoin_flags & WKSSVC_JOIN_FLAGS_JOIN_TYPE) {
 		werr = libnet_DomainUnjoin(mem_ctx, r);
 		if (!W_ERROR_IS_OK(werr)) {
-			do_UnjoinConfig(r);
-			return werr;
+			goto done;
 		}
 	}
 
 	werr = do_UnjoinConfig(r);
 	if (!W_ERROR_IS_OK(werr)) {
-		return werr;
+		goto done;
 	}
 
+ done:
 	return werr;
 }


-- 
Samba Shared Repository


More information about the samba-cvs mailing list