mirror of
https://github.com/samba-team/samba.git
synced 2025-08-02 00:22:11 +03:00
This is metze's LDAP rebind sleep patch:
When smb.conf tells us to write to a read-only LDAP replica and we are
redirected by the LDAP server, the replication might take some seconds,
especially over slow links. This patch delays the next read after a rebind for
'ldap rebind sleep' milliseconds.
Metze, thanks for your patience.
Volker
(This used to be commit 63ffa770b6
)
This commit is contained in:
@ -661,6 +661,9 @@ static int rebindproc_with_state (LDAP * ld, char **whop, char **credp,
|
||||
}
|
||||
*methodp = LDAP_AUTH_SIMPLE;
|
||||
}
|
||||
|
||||
gettimeofday(&(ldap_state->last_rebind),NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif /*defined(LDAP_API_FEATURE_X_OPENLDAP) && (LDAP_API_VERSION > 2000)*/
|
||||
@ -687,6 +690,8 @@ static int rebindproc_connect_with_state (LDAP *ldap_struct,
|
||||
|
||||
rc = ldap_simple_bind_s(ldap_struct, ldap_state->bind_dn, ldap_state->bind_secret);
|
||||
|
||||
gettimeofday(&(ldap_state->last_rebind),NULL);
|
||||
|
||||
return rc;
|
||||
}
|
||||
#endif /*defined(LDAP_API_FEATURE_X_OPENLDAP) && (LDAP_API_VERSION > 2000)*/
|
||||
@ -909,6 +914,29 @@ int smbldap_search(struct smbldap_state *ldap_state,
|
||||
|
||||
SMB_ASSERT(ldap_state);
|
||||
|
||||
if (ldap_state->last_rebind.tv_sec > 0) {
|
||||
struct timeval tval;
|
||||
int tdiff = 0;
|
||||
int sleep_time = 0;
|
||||
|
||||
ZERO_STRUCT(tval);
|
||||
|
||||
gettimeofday(&tval,NULL);
|
||||
|
||||
tdiff = 1000000 *(tval.tv_sec - ldap_state->last_rebind.tv_sec) +
|
||||
(tval.tv_usec - ldap_state->last_rebind.tv_usec);
|
||||
|
||||
sleep_time = ((1000*lp_ldap_rebind_sleep())-tdiff)/1000;
|
||||
|
||||
if (sleep_time > 0) {
|
||||
/* we wait for the LDAP replication */
|
||||
DEBUG(5,("smbldap_search: waiting %d milliseconds for LDAP replication.\n",sleep_time));
|
||||
msleep(sleep_time);
|
||||
DEBUG(5,("smbldap_search: go on!\n"));
|
||||
ZERO_STRUCT(ldap_state->last_rebind);
|
||||
}
|
||||
}
|
||||
|
||||
if (push_utf8_allocate(&utf8_filter, filter) == (size_t)-1) {
|
||||
return LDAP_NO_MEMORY;
|
||||
}
|
||||
|
Reference in New Issue
Block a user