summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2002-01-11 04:50:45 +0000
committerAndrew Bartlett <abartlet@samba.org>2002-01-11 04:50:45 +0000
commit4acb3125cd42728e2bb3f971bfb9373decc1d0fb (patch)
tree99b7c375da60664cbf0b79b4866c5efce3557f3d
parent9ee8213f9a6fbcfc5a52cde36bb2b3bb146f8239 (diff)
downloadsamba-4acb3125cd42728e2bb3f971bfb9373decc1d0fb.tar.gz
samba-4acb3125cd42728e2bb3f971bfb9373decc1d0fb.tar.bz2
samba-4acb3125cd42728e2bb3f971bfb9373decc1d0fb.zip
Fix up 'net ads join' to delete and rejoin if the account already exists.
This fixes up a problem where a machine would join (or downgrade by trust password change) to NT4 membership and not be able to regain full ADS membership until a 'net ads leave'. Andrew Bartlett (This used to be commit ab8ff85f03b25a0dfe4ab63886a10da81207393c)
-rw-r--r--source3/libads/ldap.c9
-rw-r--r--source3/libsmb/cliconnect.c2
2 files changed, 8 insertions, 3 deletions
diff --git a/source3/libads/ldap.c b/source3/libads/ldap.c
index c616f09b6e..2e93e11603 100644
--- a/source3/libads/ldap.c
+++ b/source3/libads/ldap.c
@@ -321,8 +321,13 @@ ADS_STATUS ads_join_realm(ADS_STRUCT *ads, const char *hostname, const char *org
status = ads_find_machine_acct(ads, (void **)&res, host);
if (ADS_ERR_OK(status) && ads_count_replies(ads, res) == 1) {
- DEBUG(0, ("Host account for %s already exists\n", host));
- return ADS_SUCCESS;
+ DEBUG(0, ("Host account for %s already exists - deleting for readd\n", host));
+ status = ads_leave_realm(ads, host);
+ if (!ADS_ERR_OK(status)) {
+ DEBUG(0, ("Failed to delete host '%s' from the '%s' realm.\n",
+ host, ads->realm));
+ return status;
+ }
}
status = ads_add_machine_acct(ads, host, org_unit);
diff --git a/source3/libsmb/cliconnect.c b/source3/libsmb/cliconnect.c
index a3b22485cf..7649a88ffd 100644
--- a/source3/libsmb/cliconnect.c
+++ b/source3/libsmb/cliconnect.c
@@ -1257,7 +1257,7 @@ again:
if (!cli_negprot(cli))
{
DEBUG(1,("failed negprot\n"));
- nt_status = cli_nt_error(cli);
+ nt_status = NT_STATUS_UNSUCCESSFUL;
cli_shutdown(cli);
return nt_status;
}