]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
add timeout to rlm_ldap_bind
authorAlan T. DeKok <aland@freeradius.org>
Wed, 11 May 2016 18:49:20 +0000 (14:49 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Wed, 11 May 2016 18:49:20 +0000 (14:49 -0400)
src/modules/rlm_ldap/clients.c
src/modules/rlm_ldap/ldap.c
src/modules/rlm_ldap/rlm_ldap.c
src/modules/rlm_ldap/rlm_ldap.h

index 20c94a36f90ebfa8be61e9bb8a7dbdbdda859d18..40ebba3a1d7ad9d62e6e9b722b35820376756bf2 100644 (file)
@@ -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;
index bb4859c76213bf0b8864c179ecb5f2fd424d31fa..d6e7a47e251138c739f0e2e6dc9c71dd0b714530 100644 (file)
@@ -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;
 
        /*
index 5e4baf01766ac57465e23186f776de79ce61122d..0f1f9163fadd66e9c258a4c04df968761035f833 100644 (file)
@@ -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;
index 72164b6cb5889dc6f92b3651a246d4db89f094bc..82e1a64c594a26014b451f010e7cd1f11b0c5990 100644 (file)
@@ -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);