]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
fr_redis_cluster_conn_create(): tls session should be allocated in `conn' context
authorMax Khon <fjoe@samodelkin.net>
Wed, 14 Jun 2023 20:18:04 +0000 (21:18 +0100)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Wed, 21 Jun 2023 17:44:13 +0000 (13:44 -0400)
src/lib/redis/cluster.c

index 33d19d8204793836b558695cb8e50070d388aea1..96eb079772f39e4f4673ef029179b46dadac6a2b 100644 (file)
@@ -1481,13 +1481,17 @@ void *fr_redis_cluster_conn_create(TALLOC_CTX *ctx, void *instance, fr_time_delt
                return NULL;
        }
 
+       conn = talloc_zero(ctx, fr_redis_conn_t);
+       conn->handle = handle;
+       talloc_set_destructor(conn, _cluster_conn_free);
+
 #ifdef HAVE_REDIS_SSL
        if (node->cluster->ssl_ctx != NULL) {
-               fr_tls_session_t *tls_session = fr_tls_session_alloc_client(ctx, node->cluster->ssl_ctx);
+               fr_tls_session_t *tls_session = fr_tls_session_alloc_client(conn, node->cluster->ssl_ctx);
                if (!tls_session) {
                        fr_tls_strerror_printf("%s - [%i]", log_prefix, node->id);
                        ERROR("%s - [%i] Failed to allocate TLS session", log_prefix, node->id);
-                       redisFree(handle);
+                       talloc_free(conn);
                        return NULL;
                }
 
@@ -1496,7 +1500,7 @@ void *fr_redis_cluster_conn_create(TALLOC_CTX *ctx, void *instance, fr_time_delt
                if (redisInitiateSSL(handle, tls_session->ssl) != REDIS_OK) {
                        ERROR("%s - [%i] Failed to initiate SSL: %s", log_prefix, node->id, handle->errstr);
                        SSL_free(tls_session->ssl);
-                       redisFree(handle);
+                       talloc_free(conn);
                        return NULL;
                }
        }
@@ -1518,7 +1522,7 @@ void *fr_redis_cluster_conn_create(TALLOC_CTX *ctx, void *instance, fr_time_delt
                        ERROR("%s - [%i] Failed authenticating: %s", log_prefix, node->id, handle->errstr);
                error:
                        if (reply) fr_redis_reply_free(&reply);
-                       redisFree(handle);
+                       talloc_free(conn);
                        return NULL;
                }
 
@@ -1574,10 +1578,6 @@ void *fr_redis_cluster_conn_create(TALLOC_CTX *ctx, void *instance, fr_time_delt
                }
        }
 
-       conn = talloc_zero(ctx, fr_redis_conn_t);
-       conn->handle = handle;
-       talloc_set_destructor(conn, _cluster_conn_free);
-
        return conn;
 }