svn commit: samba r11407 - in branches/SAMBA_4_0/source: libnet torture/rpc

abartlet at samba.org abartlet at samba.org
Mon Oct 31 03:03:34 GMT 2005


Author: abartlet
Date: 2005-10-31 03:03:32 +0000 (Mon, 31 Oct 2005)
New Revision: 11407

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=11407

Log:
Push 'recreate account' logic into libnet/libnet_join.c.  We don't
return the pesky USER_EXISTS 'error' code any more, and it is much
easier to handle this inline.

Andrew Bartlett

Modified:
   branches/SAMBA_4_0/source/libnet/libnet_join.c
   branches/SAMBA_4_0/source/libnet/libnet_join.h
   branches/SAMBA_4_0/source/torture/rpc/testjoin.c


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/libnet_join.c
===================================================================
--- branches/SAMBA_4_0/source/libnet/libnet_join.c	2005-10-31 03:00:36 UTC (rev 11406)
+++ branches/SAMBA_4_0/source/libnet/libnet_join.c	2005-10-31 03:03:32 UTC (rev 11407)
@@ -144,9 +144,9 @@
 	if (rtn != 0) {
 		libnet_r->out.error_string
 			= talloc_asprintf(libnet_r,
-				"Failed to add server entry %s: %s.",
+				"Failed to add server entry %s: %s: %d",
 				server_dn_str,
-				ldb_errstring(remote_ldb));
+					  ldb_errstring(remote_ldb), rtn);
 		talloc_free(tmp_ctx);
 		return NT_STATUS_INTERNAL_DB_CORRUPTION;
 	}
@@ -881,6 +881,36 @@
 			talloc_free(tmp_ctx);
 			return status;
 		}
+
+		if (r->in.recreate_account) {
+			struct samr_DeleteUser d;
+			d.in.user_handle = u_handle;
+			d.out.user_handle = u_handle;
+			status = dcerpc_samr_DeleteUser(samr_pipe, mem_ctx, &d);
+			if (!NT_STATUS_IS_OK(status)) {
+				r->out.error_string = talloc_asprintf(mem_ctx,
+								      "samr_DeleteUser (for recreate) of [%s] failed: %s",
+								      r->in.account_name,
+								      nt_errstr(status));
+				talloc_free(tmp_ctx);
+				return status;
+			}
+
+			/* We want to recreate, so delete and another samr_CreateUser2 */
+			
+			/* &cu filled in above */
+			cu_status = dcerpc_samr_CreateUser2(samr_pipe, tmp_ctx, &cu);			
+			status = cu_status;
+			if (!NT_STATUS_IS_OK(status) && !NT_STATUS_EQUAL(status, NT_STATUS_USER_EXISTS)) {
+				r->out.error_string = talloc_asprintf(mem_ctx,
+								      "samr_CreateUser2 (recreate) for [%s] failed: %s\n",
+								      r->in.domain_name, nt_errstr(status));
+				talloc_free(tmp_ctx);
+				return status;
+			}
+			DEBUG(0, ("Recreated account in domain %s\n", domain_name));
+
+		}
 	}
 	/* Find out what password policy this user has */
 	pwp.in.user_handle = u_handle;
@@ -1093,6 +1123,7 @@
 	r2->in.netbios_name	= netbios_name;
 	r2->in.level		= LIBNET_JOINDOMAIN_AUTOMATIC;
 	r2->in.acct_type	= acct_type;
+	r2->in.recreate_account = False;
 	status = libnet_JoinDomain(ctx, r2, r2);
 	if (!NT_STATUS_IS_OK(status)) {
 		r->out.error_string = talloc_steal(mem_ctx, r2->out.error_string);

Modified: branches/SAMBA_4_0/source/libnet/libnet_join.h
===================================================================
--- branches/SAMBA_4_0/source/libnet/libnet_join.h	2005-10-31 03:00:36 UTC (rev 11406)
+++ branches/SAMBA_4_0/source/libnet/libnet_join.h	2005-10-31 03:03:32 UTC (rev 11407)
@@ -40,6 +40,7 @@
 		const char *binding;
 		enum libnet_JoinDomain_level level;
 		uint32_t  acct_type;
+		BOOL recreate_account;
 	} in;
 
 	struct {

Modified: branches/SAMBA_4_0/source/torture/rpc/testjoin.c
===================================================================
--- branches/SAMBA_4_0/source/torture/rpc/testjoin.c	2005-10-31 03:00:36 UTC (rev 11406)
+++ branches/SAMBA_4_0/source/torture/rpc/testjoin.c	2005-10-31 03:03:32 UTC (rev 11407)
@@ -319,21 +319,6 @@
 	libnet_r->in.recreate_account = True;
 
 	status = libnet_JoinDomain(libnet_ctx, libnet_r, libnet_r);
-	if (NT_STATUS_EQUAL(status, NT_STATUS_USER_EXISTS)) {
-		struct samr_DeleteUser d;
-		d.in.user_handle = libnet_r->out.user_handle;
-		d.out.user_handle = libnet_r->out.user_handle;
-		
-		/* Delete machine account */
-		status = dcerpc_samr_DeleteUser(libnet_r->out.samr_pipe, tj, &d);
-		if (!NT_STATUS_IS_OK(status)) {
-			printf("Delete of machine account failed\n");
-		} else {
-			printf("Delete of machine account was successful.\n");
-		}
-		status = libnet_JoinDomain(libnet_ctx, libnet_r, libnet_r);
-	}
-
 	if (!NT_STATUS_IS_OK(status)) {
 		if (libnet_r->out.error_string) {
 			DEBUG(0, ("Domain join failed - %s.\n", libnet_r->out.error_string));



More information about the samba-cvs mailing list