]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Correct passing of fr_ldap_connection_t in async functions
authorNick Porter <nick@portercomputing.co.uk>
Tue, 5 Sep 2023 11:22:09 +0000 (12:22 +0100)
committerNick Porter <nick@portercomputing.co.uk>
Tue, 5 Sep 2023 16:42:44 +0000 (17:42 +0100)
The comment about changing the connection due to auto re-connect is
wrong - that was the old sync code behaviour.

src/lib/ldap/base.c
src/lib/ldap/base.h
src/lib/ldap/connection.c
src/lib/ldap/directory.c
src/listen/ldap_sync/active_directory.c
src/listen/ldap_sync/persistent_search.c
src/listen/ldap_sync/rfc4533.c

index 28dd59dffb98c64f9ea9d24bb41b29696ab0845f..1cb1141fe49e19a9762c118309e1aa1a8340c416 100644 (file)
@@ -516,7 +516,7 @@ fr_ldap_rcode_t fr_ldap_result(LDAPMessage **result, LDAPControl ***ctrls,
  *
  * @param[out] msgid           to match response to request.
  * @param[in] request          Current request.
- * @param[in,out] pconn                to use. May change as this function calls functions which auto re-connect.
+ * @param[in] pconn            to use.
  * @param[in] dn               to use as base for the search.
  * @param[in] scope            to use (LDAP_SCOPE_BASE, LDAP_SCOPE_ONE, LDAP_SCOPE_SUB).
  * @param[in] filter           to use, should be pre-escaped.
@@ -526,11 +526,11 @@ fr_ldap_rcode_t fr_ldap_result(LDAPMessage **result, LDAPControl ***ctrls,
  * @return One of the LDAP_PROC_* (#fr_ldap_rcode_t) values.
  */
 fr_ldap_rcode_t fr_ldap_search_async(int *msgid, request_t *request,
-                                    fr_ldap_connection_t **pconn,
+                                    fr_ldap_connection_t *pconn,
                                     char const *dn, int scope, char const *filter, char const * const *attrs,
                                     LDAPControl **serverctrls, LDAPControl **clientctrls)
 {
-       fr_ldap_config_t const  *handle_config = (*pconn)->config;
+       fr_ldap_config_t const  *handle_config = pconn->config;
 
        struct timeval                  tv;             // Holds timeout values.
 
@@ -542,12 +542,12 @@ fr_ldap_rcode_t fr_ldap_search_async(int *msgid, request_t *request,
        fr_ldap_control_merge(our_serverctrls, our_clientctrls,
                              NUM_ELEMENTS(our_serverctrls),
                              NUM_ELEMENTS(our_clientctrls),
-                             *pconn, serverctrls, clientctrls);
+                             pconn, serverctrls, clientctrls);
 
-       fr_assert(*pconn && (*pconn)->handle);
+       fr_assert(pconn && pconn->handle);
 
        if (DEBUG_ENABLED4 || (request && RDEBUG_ENABLED4)) {
-               fr_ldap_timeout_debug(request, *pconn, fr_time_delta_wrap(0), __FUNCTION__);
+               fr_ldap_timeout_debug(request, pconn, fr_time_delta_wrap(0), __FUNCTION__);
        }
 
        /*
@@ -570,9 +570,9 @@ fr_ldap_rcode_t fr_ldap_search_async(int *msgid, request_t *request,
         */
        memset(&tv, 0, sizeof(tv));
 
-       if (ldap_search_ext((*pconn)->handle, dn, scope, filter, search_attrs,
+       if (ldap_search_ext(pconn->handle, dn, scope, filter, search_attrs,
                            0, our_serverctrls, our_clientctrls, NULL, 0, msgid) != LDAP_SUCCESS) {
-               fr_ldap_rcode_t ret = fr_ldap_error_check(NULL, *pconn, NULL, NULL);
+               fr_ldap_rcode_t ret = fr_ldap_error_check(NULL, pconn, NULL, NULL);
                ROPTIONAL(RPERROR, PERROR, "Failed performing search");
                return ret;
        }
@@ -751,14 +751,14 @@ unlang_action_t fr_ldap_trunk_modify(rlm_rcode_t *p_result,
  *
  * @param[out] msgid           LDAP message ID.
  * @param[in] request          Current request.
- * @param[in,out] pconn                to use. May change as this function calls functions which auto re-connect.
+ * @param[in] pconn            to use.
  * @param[in] dn               of the object to modify.
  * @param[in] mods             to make, see 'man ldap_modify' for more information.
  * @param[in] serverctrls      Search controls to pass to the server.  May be NULL.
  * @param[in] clientctrls      Search controls for ldap_modify.  May be NULL.
  * @return One of the LDAP_PROC_* (#fr_ldap_rcode_t) values.
  */
-fr_ldap_rcode_t fr_ldap_modify_async(int *msgid, request_t *request, fr_ldap_connection_t **pconn,
+fr_ldap_rcode_t fr_ldap_modify_async(int *msgid, request_t *request, fr_ldap_connection_t *pconn,
                                     char const *dn, LDAPMod *mods[],
                                     LDAPControl **serverctrls, LDAPControl **clientctrls)
 {
@@ -768,15 +768,15 @@ fr_ldap_rcode_t fr_ldap_modify_async(int *msgid, request_t *request, fr_ldap_con
        fr_ldap_control_merge(our_serverctrls, our_clientctrls,
                              NUM_ELEMENTS(our_serverctrls),
                              NUM_ELEMENTS(our_clientctrls),
-                             *pconn, serverctrls, clientctrls);
+                             pconn, serverctrls, clientctrls);
 
-       fr_assert(*pconn && (*pconn)->handle);
+       fr_assert(pconn && pconn->handle);
 
-       if (RDEBUG_ENABLED4) fr_ldap_timeout_debug(request, *pconn, fr_time_delta_wrap(0), __FUNCTION__);
+       if (RDEBUG_ENABLED4) fr_ldap_timeout_debug(request, pconn, fr_time_delta_wrap(0), __FUNCTION__);
 
        RDEBUG2("Modifying object with DN \"%s\"", dn);
-       if(ldap_modify_ext((*pconn)->handle, dn, mods, our_serverctrls, our_clientctrls, msgid) != LDAP_SUCCESS) {
-               fr_ldap_rcode_t ret = fr_ldap_error_check(NULL, *pconn, NULL, NULL);
+       if(ldap_modify_ext(pconn->handle, dn, mods, our_serverctrls, our_clientctrls, msgid) != LDAP_SUCCESS) {
+               fr_ldap_rcode_t ret = fr_ldap_error_check(NULL, pconn, NULL, NULL);
                ROPTIONAL(RPEDEBUG, RPERROR, "Failed modifying object");
 
                return ret;
@@ -845,14 +845,14 @@ unlang_action_t fr_ldap_trunk_extended(rlm_rcode_t *p_result,
  * @param[in] reqdata  Data required for the request.
  * @return One of the LDAP_PROC_* (#fr_ldap_rcode_t) values.
  */
-fr_ldap_rcode_t fr_ldap_extended_async(int *msgid, request_t *request, fr_ldap_connection_t **pconn,
+fr_ldap_rcode_t fr_ldap_extended_async(int *msgid, request_t *request, fr_ldap_connection_t *pconn,
                                       char const *reqoid, struct berval *reqdata)
 {
-       fr_assert(*pconn && (*pconn)->handle);
+       fr_assert(pconn && pconn->handle);
 
        RDEBUG2("Requesting extended operation with OID %s", reqoid);
-       if (ldap_extended_operation((*pconn)->handle, reqoid, reqdata, NULL, NULL, msgid)) {
-               fr_ldap_rcode_t ret = fr_ldap_error_check(NULL, *pconn, NULL, NULL);
+       if (ldap_extended_operation(pconn->handle, reqoid, reqdata, NULL, NULL, msgid)) {
+               fr_ldap_rcode_t ret = fr_ldap_error_check(NULL, pconn, NULL, NULL);
                RPERROR("Failed requesting extended operation");
                return ret;
        }
index 477ecd0dbe6851ea9fda88f0b50b7f69d05bd342..fddacbc1d50aa03333f2d000914d3dcabfbad022 100644 (file)
@@ -766,15 +766,15 @@ ssize_t           fr_ldap_xlat_filter(request_t *request, char const **sub, size_t sublen
 char const     *fr_ldap_error_str(fr_ldap_connection_t const *conn);
 
 fr_ldap_rcode_t        fr_ldap_search_async(int *msgid, request_t *request,
-                                    fr_ldap_connection_t **pconn,
+                                    fr_ldap_connection_t *pconn,
                                     char const *dn, int scope, char const *filter, char const * const *attrs,
                                     LDAPControl **serverctrls, LDAPControl **clientctrls);
 
-fr_ldap_rcode_t        fr_ldap_modify_async(int *msgid, request_t *request, fr_ldap_connection_t **pconn,
+fr_ldap_rcode_t        fr_ldap_modify_async(int *msgid, request_t *request, fr_ldap_connection_t *pconn,
                               char const *dn, LDAPMod *mods[],
                               LDAPControl **serverctrls, LDAPControl **clientctrls);
 
-fr_ldap_rcode_t fr_ldap_extended_async(int *msgid, request_t *request, fr_ldap_connection_t **pconn,
+fr_ldap_rcode_t fr_ldap_extended_async(int *msgid, request_t *request, fr_ldap_connection_t *pconn,
                                       char const *reqiod, struct berval *reqdata);
 
 fr_ldap_rcode_t        fr_ldap_error_check(LDAPControl ***ctrls, fr_ldap_connection_t const *conn,
index 1b86dc33755455cde1ac85e18d3b4aa565ca3cac..36a16089985b9c351548134465047990fc664005 100644 (file)
@@ -685,7 +685,7 @@ static void ldap_trunk_request_mux(UNUSED fr_event_list_t *el, fr_trunk_connecti
                         *      If we are chasing a referral, referral_url will be populated and may
                         *      have a base dn or scope to override the original query
                         */
-                       status = fr_ldap_search_async(&query->msgid, query->treq->request, &ldap_conn,
+                       status = fr_ldap_search_async(&query->msgid, query->treq->request, ldap_conn,
                                                      (referral_url && referral_url->lud_dn) ?
                                                        referral_url->lud_dn : query->dn,
                                                      (referral_url && referral_url->lud_scope) ?
@@ -702,7 +702,7 @@ static void ldap_trunk_request_mux(UNUSED fr_event_list_t *el, fr_trunk_connecti
                        POPULATE_LDAP_CONTROLS(our_clientctrls, query->clientctrls);
 
                        status = fr_ldap_modify_async(&query->msgid, query->treq->request,
-                                                     &ldap_conn, query->dn, query->mods,
+                                                     ldap_conn, query->dn, query->mods,
                                                      our_serverctrls, our_clientctrls);
                        break;
 
@@ -710,7 +710,7 @@ static void ldap_trunk_request_mux(UNUSED fr_event_list_t *el, fr_trunk_connecti
                        /*
                         *      This query is an LDAP extended operation.
                         */
-                       status = fr_ldap_extended_async(&query->msgid, query->treq->request, &ldap_conn,
+                       status = fr_ldap_extended_async(&query->msgid, query->treq->request, ldap_conn,
                                                        query->extended.reqoid, query->extended.reqdata);
                        break;
 
index da8c61b27feba4fea9a6d50783edcbf9fb7ae37b..9af4bde1933d9f774159825f74f98209204f5805 100644 (file)
@@ -288,7 +288,7 @@ int fr_ldap_conn_directory_alloc_async(fr_ldap_connection_t *ldap_conn)
        ldap_conn->directory = talloc_zero(ldap_conn, fr_ldap_directory_t);
        if (!ldap_conn->directory) return -1;
 
-       if (fr_ldap_search_async(&msgid, NULL, &ldap_conn, "", LDAP_SCOPE_BASE, "(objectclass=*)", attrs,
+       if (fr_ldap_search_async(&msgid, NULL, ldap_conn, "", LDAP_SCOPE_BASE, "(objectclass=*)", attrs,
                                 NULL, NULL) != LDAP_PROC_SUCCESS) return -1;
 
        return msgid;
index f5cad5f95b7f855a6dca6d4a108813cc3dd6e9ad..56b1537922e129ff5266050e4a748e9f6d56f38c 100644 (file)
@@ -129,7 +129,7 @@ int active_directory_sync_state_init(fr_ldap_connection_t *conn, size_t sync_no,
         */
        ldap_sync_conf_attr_add(UNCONST(sync_config_t *, config), "isDeleted");
 
-       rcode = fr_ldap_search_async(&sync->msgid, NULL, &conn, config->base_dn, config->scope,
+       rcode = fr_ldap_search_async(&sync->msgid, NULL, conn, config->base_dn, config->scope,
                                     filter ? filter : config->filter, config->attrs, ctrls, NULL);
 
        if (rcode != LDAP_PROC_SUCCESS) goto error;
index fcfd018871fed9beb15653015ef315ff03823161..314b29c12381543e4d43a48a035240c02b54c5f7 100644 (file)
@@ -113,7 +113,7 @@ int persistent_sync_state_init(fr_ldap_connection_t *conn, size_t sync_no, proto
         */
        ctrl.ldctl_iscritical = 1;
 
-       ret = fr_ldap_search_async(&sync->msgid, NULL, &conn, config->base_dn, config->scope,
+       ret = fr_ldap_search_async(&sync->msgid, NULL, conn, config->base_dn, config->scope,
                                   config->filter, config->attrs, ctrls, NULL);
        ber_free(ber, 1);
 
index 6b71226359406a290587cdb811fc893ed9285eb5..bac987ddf56d2a2257992965f70922ce4f56fcf7 100644 (file)
@@ -129,7 +129,7 @@ int rfc4533_sync_init(fr_ldap_connection_t *conn, size_t sync_no, proto_ldap_syn
        memcpy(&ctrls[0]->ldctl_oid, &sync_ctl_oid, sizeof(ctrls[0]->ldctl_oid));
        ctrl.ldctl_iscritical = 1;
 
-       ret = fr_ldap_search_async(&sync->msgid, NULL, &conn, config->base_dn, config->scope,
+       ret = fr_ldap_search_async(&sync->msgid, NULL, conn, config->base_dn, config->scope,
                                   config->filter, config->attrs, ctrls, NULL);
        ber_free(ber, 1);