autofs-5.0.6 - dont retry ldap connect if not required
From: Ian Kent <ikent@redhat.com>
When using LDAP and the server is not available autofs retries the
connection when it fails in case the SASL credentail has expired.
But this is done even when not using SASL, so change it check if
SASL authentication is required.
---
CHANGELOG | 1 +
include/lookup_ldap.h | 1 +
modules/lookup_ldap.c | 6 +++---
3 files changed, 5 insertions(+), 3 deletions(-)
--- autofs-5.0.6.orig/CHANGELOG
+++ autofs-5.0.6/CHANGELOG
@@ -47,6 +47,7 @@
- update ->timeout() function to not return timeout.
- move timeout to map_source (allow per direct map timeout).
- fix kernel verion check of version components.
+- dont retry ldap connect if not required.
28/06/2011 autofs-5.0.6
-----------------------
--- autofs-5.0.6.orig/include/lookup_ldap.h
+++ autofs-5.0.6/include/lookup_ldap.h
@@ -104,6 +104,7 @@ struct lookup_context {
#define LDAP_AUTH_NOTREQUIRED 0x0001
#define LDAP_AUTH_REQUIRED 0x0002
#define LDAP_AUTH_AUTODETECT 0x0004
+#define LDAP_NEED_AUTH (LDAP_AUTH_REQUIRED|LDAP_AUTH_AUTODETECT)
#endif
#define LDAP_AUTH_USESIMPLE 0x0008
--- autofs-5.0.6.orig/modules/lookup_ldap.c
+++ autofs-5.0.6/modules/lookup_ldap.c
@@ -511,7 +511,7 @@ static int do_bind(unsigned logopt, LDAP
debug(logopt, MODPREFIX "auth_required: %d, sasl_mech %s",
ctxt->auth_required, ctxt->sasl_mech);
- if (ctxt->auth_required & (LDAP_AUTH_REQUIRED|LDAP_AUTH_AUTODETECT)) {
+ if (ctxt->auth_required & LDAP_NEED_AUTH) {
rv = autofs_sasl_bind(logopt, ldap, ctxt);
debug(logopt, MODPREFIX "autofs_sasl_bind returned %d", rv);
} else {
@@ -731,7 +731,7 @@ static LDAP *do_reconnect(unsigned logop
ldap = do_connect(logopt, ctxt->server, ctxt);
#ifdef WITH_SASL
/* Dispose of the sasl authentication connection and try again. */
- if (!ldap) {
+ if (!ldap && ctxt->auth_required & LDAP_NEED_AUTH) {
autofs_sasl_dispose(ctxt);
ldap = connect_to_server(logopt, ctxt->server, ctxt);
}
@@ -767,7 +767,7 @@ static LDAP *do_reconnect(unsigned logop
* Dispose of the sasl authentication connection and try the
* current server again before trying other servers in the list.
*/
- if (!ldap) {
+ if (!ldap && ctxt->auth_required & LDAP_NEED_AUTH) {
autofs_sasl_dispose(ctxt);
ldap = connect_to_server(logopt, ctxt->uri->uri, ctxt);
}