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