summaryrefslogtreecommitdiffstats
path: root/source/nsswitch
diff options
context:
space:
mode:
authorTim Potter <tpot@samba.org>2001-07-25 06:16:27 +0000
committerTim Potter <tpot@samba.org>2001-07-25 06:16:27 +0000
commit6e698d65ecb13b0b46d15bce7e0314fa1a46a13a (patch)
treebf078a05fd3f16a9aea97bc8a149baf32e6350e2 /source/nsswitch
parente6773b08a4a1a54dca4a2e2ec5d4e9c43383b072 (diff)
downloadsamba-6e698d65ecb13b0b46d15bce7e0314fa1a46a13a.tar.gz
samba-6e698d65ecb13b0b46d15bce7e0314fa1a46a13a.tar.xz
samba-6e698d65ecb13b0b46d15bce7e0314fa1a46a13a.zip
Merge of change machine account password race fix from appliance branch.
Diffstat (limited to 'source/nsswitch')
-rw-r--r--source/nsswitch/winbindd_misc.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/source/nsswitch/winbindd_misc.c b/source/nsswitch/winbindd_misc.c
index 163837d1c3a..9520fc218b3 100644
--- a/source/nsswitch/winbindd_misc.c
+++ b/source/nsswitch/winbindd_misc.c
@@ -70,12 +70,15 @@ enum winbindd_result winbindd_check_machine_acct(
int count;
uint16 validation_level;
fstring controller, trust_account;
+ int num_retries = 0;
DEBUG(3, ("[%5d]: check machine account\n", state->pid));
/* Get trust account password */
- if (!_get_trust_account_password(lp_workgroup(), trust_passwd, NULL)) {
+ again:
+ if (!_get_trust_account_password(lp_workgroup(), trust_passwd,
+ NULL)) {
result = NT_STATUS_INTERNAL_ERROR;
goto done;
}
@@ -104,6 +107,19 @@ enum winbindd_result winbindd_check_machine_acct(
SEC_CHAN_WKSTA, &validation_level);
#endif
+ /* There is a race condition between fetching the trust account
+ password and joining the domain so it's possible that the trust
+ account password has been changed on us. We are returned
+ NT_STATUS_ACCESS_DENIED if this happens. */
+
+#define MAX_RETRIES 8
+
+ if ((num_retries < MAX_RETRIES) &&
+ result == NT_STATUS_ACCESS_DENIED) {
+ num_retries++;
+ goto again;
+ }
+
/* Pass back result code - zero for success, other values for
specific failures. */