From: Alan T. DeKok Date: Wed, 11 May 2016 18:49:20 +0000 (-0400) Subject: add timeout to rlm_ldap_bind X-Git-Tag: branch_3_1_x~393 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5d2ab4d91f6f10888e461253c386bf6473a77609;p=thirdparty%2Ffreeradius-server.git add timeout to rlm_ldap_bind --- diff --git a/src/modules/rlm_ldap/clients.c b/src/modules/rlm_ldap/clients.c index 20c94a36f90..40ebba3a1d7 100644 --- a/src/modules/rlm_ldap/clients.c +++ b/src/modules/rlm_ldap/clients.c @@ -143,7 +143,7 @@ int rlm_ldap_client_load(rlm_ldap_t const *inst, CONF_SECTION *tmpl, CONF_SECTIO */ if (conn->rebound) { status = rlm_ldap_bind(inst, NULL, &conn, conn->inst->admin_identity, conn->inst->admin_password, - &(conn->inst->admin_sasl), true, NULL, NULL); + &(conn->inst->admin_sasl), true, NULL, NULL, NULL); if (status != LDAP_PROC_SUCCESS) { ret = -1; goto finish; diff --git a/src/modules/rlm_ldap/ldap.c b/src/modules/rlm_ldap/ldap.c index bb4859c7621..d6e7a47e251 100644 --- a/src/modules/rlm_ldap/ldap.c +++ b/src/modules/rlm_ldap/ldap.c @@ -764,6 +764,7 @@ ldap_rcode_t rlm_ldap_bind(rlm_ldap_t const *inst, NDEBUG_UNUSED ldap_sasl *sasl, #endif bool retry, + struct timeval *timeout, LDAPControl **serverctrls, LDAPControl **clientctrls) { ldap_rcode_t status = LDAP_PROC_ERROR; @@ -819,7 +820,7 @@ ldap_rcode_t rlm_ldap_bind(rlm_ldap_t const *inst, ROPTIONAL(RDEBUG2, DEBUG2, "Waiting for bind result..."); } - status = rlm_ldap_result(inst, *pconn, msgid, dn, NULL, NULL, &error, &extra); + status = rlm_ldap_result(inst, *pconn, msgid, dn, timeout, NULL, &error, &extra); } switch (status) { @@ -941,7 +942,7 @@ ldap_rcode_t rlm_ldap_search(LDAPMessage **result, rlm_ldap_t const *inst, REQUE if ((*pconn)->rebound) { status = rlm_ldap_bind(inst, request, pconn, (*pconn)->inst->admin_identity, (*pconn)->inst->admin_password, &(*pconn)->inst->admin_sasl, true, - NULL, NULL); + NULL, NULL, NULL); if (status != LDAP_PROC_SUCCESS) { return LDAP_PROC_ERROR; } @@ -1102,7 +1103,7 @@ ldap_rcode_t rlm_ldap_modify(rlm_ldap_t const *inst, REQUEST *request, ldap_hand if ((*pconn)->rebound) { status = rlm_ldap_bind(inst, request, pconn, (*pconn)->inst->admin_identity, (*pconn)->inst->admin_password, &(*pconn)->inst->admin_sasl, true, - NULL, NULL); + NULL, NULL, NULL); if (status != LDAP_PROC_SUCCESS) { return LDAP_PROC_ERROR; } @@ -1232,7 +1233,7 @@ char const *rlm_ldap_find_user(rlm_ldap_t const *inst, REQUEST *request, ldap_ha if ((*pconn)->rebound) { status = rlm_ldap_bind(inst, request, pconn, (*pconn)->inst->admin_identity, (*pconn)->inst->admin_password, &(*pconn)->inst->admin_sasl, true, - NULL, NULL); + NULL, NULL, NULL); if (status != LDAP_PROC_SUCCESS) { *rcode = RLM_MODULE_FAIL; return NULL; @@ -1571,7 +1572,7 @@ static int rlm_ldap_rebind(LDAP *handle, LDAP_CONST char *url, UNUSED ber_tag_t } status = rlm_ldap_bind(inst, NULL, &conn, admin_identity, admin_password, - &inst->admin_sasl, false, NULL, NULL); + &inst->admin_sasl, false, NULL, NULL, NULL); if (status != LDAP_PROC_SUCCESS) { ldap_get_option(handle, LDAP_OPT_ERROR_NUMBER, &ldap_errno); @@ -1809,7 +1810,7 @@ void *mod_conn_create(TALLOC_CTX *ctx, void *instance, struct timeval const *tim #endif /* HAVE_LDAP_START_TLS_S */ status = rlm_ldap_bind(inst, NULL, &conn, conn->inst->admin_identity, conn->inst->admin_password, - &(conn->inst->admin_sasl), false, NULL, NULL); + &(conn->inst->admin_sasl), false, NULL, NULL, NULL); if (status != LDAP_PROC_SUCCESS) goto error; /* diff --git a/src/modules/rlm_ldap/rlm_ldap.c b/src/modules/rlm_ldap/rlm_ldap.c index 5e4baf01766..0f1f9163fad 100644 --- a/src/modules/rlm_ldap/rlm_ldap.c +++ b/src/modules/rlm_ldap/rlm_ldap.c @@ -1404,7 +1404,7 @@ static rlm_rcode_t CC_HINT(nonnull) mod_authenticate(void *instance, REQUEST *re } conn->rebound = true; status = rlm_ldap_bind(inst, request, &conn, dn, request->password->vp_strvalue, - conn->inst->user_sasl.mech ? &sasl : NULL, true, NULL, NULL); + conn->inst->user_sasl.mech ? &sasl : NULL, true, NULL, NULL, NULL); switch (status) { case LDAP_PROC_SUCCESS: rcode = RLM_MODULE_OK; @@ -1645,7 +1645,7 @@ static rlm_rcode_t mod_authorize(void *instance, REQUEST *request) * Bind as the user */ conn->rebound = true; - status = rlm_ldap_bind(inst, request, &conn, dn, vp->vp_strvalue, NULL, true, NULL, NULL); + status = rlm_ldap_bind(inst, request, &conn, dn, vp->vp_strvalue, NULL, true, NULL, NULL, NULL); switch (status) { case LDAP_PROC_SUCCESS: rcode = RLM_MODULE_OK; diff --git a/src/modules/rlm_ldap/rlm_ldap.h b/src/modules/rlm_ldap/rlm_ldap.h index 72164b6cb58..82e1a64c594 100644 --- a/src/modules/rlm_ldap/rlm_ldap.h +++ b/src/modules/rlm_ldap/rlm_ldap.h @@ -472,7 +472,7 @@ size_t rlm_ldap_normalise_dn(char *out, char const *in); ssize_t rlm_ldap_xlat_filter(REQUEST *request, char const **sub, size_t sublen, char *out, size_t outlen); ldap_rcode_t rlm_ldap_bind(rlm_ldap_t const *inst, REQUEST *request, ldap_handle_t **pconn, char const *dn, - char const *password, ldap_sasl *sasl, bool retry, + char const *password, ldap_sasl *sasl, bool retry, struct timeval *timeout, LDAPControl **serverctrls, LDAPControl **clientctrls); char const *rlm_ldap_error_str(ldap_handle_t const *conn);