[SCM] Samba Shared Repository - branch v3-2-test updated - initial-v3-2-test-2593-g11a19e8

Günther Deschner gd at samba.org
Thu Feb 28 11:12:25 GMT 2008


The branch, v3-2-test has been updated
       via  11a19e88e208e09d7590370f2e68aa1df5c89e31 (commit)
      from  c4ba68aa94888eace393b91a669e22b27ffaba3e (commit)

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


- Log -----------------------------------------------------------------
commit 11a19e88e208e09d7590370f2e68aa1df5c89e31
Author: Günther Deschner <gd at samba.org>
Date:   Thu Feb 28 11:55:36 2008 +0100

    Use libnet_Unjoin() for "net ads leave".
    
    Guenther

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

Summary of changes:
 source/utils/net_ads.c |   84 +++++++++++++++++++++---------------------------
 1 files changed, 37 insertions(+), 47 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/utils/net_ads.c b/source/utils/net_ads.c
index 199804f..8cf76ec 100644
--- a/source/utils/net_ads.c
+++ b/source/utils/net_ads.c
@@ -23,6 +23,8 @@
 #include "includes.h"
 #include "utils/net.h"
 
+#include "libnet/libnet.h"
+
 #ifdef HAVE_ADS
 
 int net_ads_usage(int argc, const char **argv)
@@ -810,76 +812,64 @@ static int net_ads_status(int argc, const char **argv)
 
 static int net_ads_leave(int argc, const char **argv)
 {
-	ADS_STRUCT *ads = NULL;
-	ADS_STATUS adsret;
-	NTSTATUS status;
-	int ret = -1;
-	struct cli_state *cli = NULL;
 	TALLOC_CTX *ctx;
-	DOM_SID *dom_sid = NULL;
-	const char *short_domain_name = NULL;
-
-	if (!secrets_init()) {
-		DEBUG(1,("Failed to initialise secrets database\n"));
-		return -1;
-	}
+	struct libnet_UnjoinCtx *r = NULL;
+	WERROR werr;
 
 	if (!(ctx = talloc_init("net_ads_leave"))) {
 		d_fprintf(stderr, "Could not initialise talloc context.\n");
 		return -1;
 	}
 
-	/* The finds a DC and takes care of getting the
-	   user creds if necessary */
+	use_in_memory_ccache();
 
-	if (!ADS_ERR_OK(ads_startup(True, &ads))) {
+	werr = libnet_init_UnjoinCtx(ctx, &r);
+	if (!W_ERROR_IS_OK(werr)) {
+		d_fprintf(stderr, "Could not initialise unjoin context.\n");
 		return -1;
 	}
 
-	/* make RPC calls here */
+	r->in.debug		= opt_verbose;
+	r->in.dc_name		= opt_host;
+	r->in.domain_name	= lp_realm();
+	r->in.admin_account	= opt_user_name;
+	r->in.admin_password	= net_prompt_pass(opt_user_name);
+	r->in.unjoin_flags	= WKSSVC_JOIN_FLAGS_JOIN_TYPE |
+				  WKSSVC_JOIN_FLAGS_ACCOUNT_DELETE;
 
-	if ( !NT_STATUS_IS_OK(connect_to_ipc_krb5(&cli, &ads->ldap.ss,
-		ads->config.ldap_server_name)) )
-	{
+	werr = libnet_Unjoin(ctx, r);
+	if (!W_ERROR_IS_OK(werr)) {
+		d_printf("%s: %s\n", get_friendly_werror_msg(werr),
+			 r->out.error_string ? r->out.error_string : "");
 		goto done;
 	}
 
-	if ( !NT_STATUS_IS_OK(netdom_get_domain_sid( ctx, cli, &short_domain_name, &dom_sid )) ) {
+	if (W_ERROR_IS_OK(werr)) {
+		d_printf("Deleted account for '%s' in realm '%s'\n",
+			r->in.machine_name, r->out.dns_domain_name);
 		goto done;
 	}
 
-	saf_delete( short_domain_name );
-
-	status = netdom_leave_domain(ctx, cli, dom_sid);
-
-	/* Try and delete it via LDAP - the old way we used to. */
-
-	adsret = ads_leave_realm(ads, global_myname());
-	if (ADS_ERR_OK(adsret)) {
-		d_printf("Deleted account for '%s' in realm '%s'\n",
-			global_myname(), ads->config.realm);
-		ret = 0;
-	} else {
-		/* We couldn't delete it - see if the disable succeeded. */
-		if (NT_STATUS_IS_OK(status)) {
-			d_printf("Disabled account for '%s' in realm '%s'\n",
-				global_myname(), ads->config.realm);
-			ret = 0;
-		} else {
-			d_fprintf(stderr, "Failed to disable machine account for '%s' in realm '%s'\n",
-				global_myname(), ads->config.realm);
-		}
+	/* We couldn't delete it - see if the disable succeeded. */
+	if (r->out.disabled_machine_account) {
+		d_printf("Disabled account for '%s' in realm '%s'\n",
+			r->in.machine_name, r->out.dns_domain_name);
+		werr = WERR_OK;
+		goto done;
 	}
 
-done:
+	d_fprintf(stderr, "Failed to disable machine account for '%s' in realm '%s'\n",
+		  r->in.machine_name, r->out.dns_domain_name);
 
-	if ( cli )
-		cli_shutdown(cli);
+ done:
+	TALLOC_FREE(r);
+	TALLOC_FREE(ctx);
 
-	ads_destroy(&ads);
-	TALLOC_FREE( ctx );
+	if (W_ERROR_IS_OK(werr)) {
+		return 0;
+	}
 
-	return ret;
+	return -1;
 }
 
 static NTSTATUS net_ads_join_ok(void)


-- 
Samba Shared Repository


More information about the samba-cvs mailing list