From: Stephan Bosch Date: Sun, 2 Mar 2025 18:32:53 +0000 (+0100) Subject: lib-auth-client: auth-master - Drop AUTH_MASTER_FLAG_NO_INNER_IOLOOP flag X-Git-Tag: 2.4.2~476 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c60b650db28a81712a31442bf36892f187dd12bd;p=thirdparty%2Fdovecot%2Fcore.git lib-auth-client: auth-master - Drop AUTH_MASTER_FLAG_NO_INNER_IOLOOP flag It is no longer needed for testing, as async requests can be used instead. --- diff --git a/src/auth/test-auth-master.c b/src/auth/test-auth-master.c index f0440cf137..1911520dd9 100644 --- a/src/auth/test-auth-master.c +++ b/src/auth/test-auth-master.c @@ -16,6 +16,25 @@ static void auth_master_connected(int *server_fd) auth_master_server_connected(server_fd, TEST_AUTH_MASTER_SOCKET); } +static void +test_client_passdb_lookup_callback(void *context ATTR_UNUSED, + int result, const char *const *fields) +{ + test_assert_cmp(result, ==, 1); + test_assert_strcmp(fields[0], "user=testuser"); + io_loop_stop(current_ioloop); +} + +static void +test_client_userdb_lookup_callback(void *context ATTR_UNUSED, + int result, const char *username, + const char *const *fields ATTR_UNUSED) +{ + test_assert_cmp(result, ==, 1); + test_assert_strcmp(username, "testuser"); + io_loop_stop(current_ioloop); +} + static void test_auth_master(void) { test_begin("auth master"); @@ -28,23 +47,22 @@ static void test_auth_master(void) struct auth_master_connection *client = auth_master_init(TEST_AUTH_MASTER_SOCKET, - AUTH_MASTER_FLAG_NO_IDLE_TIMEOUT | - AUTH_MASTER_FLAG_NO_INNER_IOLOOP); + AUTH_MASTER_FLAG_NO_IDLE_TIMEOUT); pool_t pool = pool_alloconly_create("test pool", 128); struct auth_user_info info = { .session_id = "1", .protocol = "default", }; - const char *const *fields; - const char *username; - int ret = auth_master_pass_lookup(client, "testuser", &info, pool, &fields); - test_assert_cmp(ret, ==, 1); - test_assert_strcmp(fields[0], "user=testuser"); - ret = auth_master_user_lookup(client, "testuser", &info, pool, &username, &fields); - test_assert_cmp(ret, ==, 1); - test_assert_strcmp(username, "testuser"); + (void)auth_master_pass_lookup_async( + client, "testuser", &info, + test_client_passdb_lookup_callback, NULL); + io_loop_run(current_ioloop); + (void)auth_master_user_lookup_async( + client, "testuser", &info, + test_client_userdb_lookup_callback, NULL); + io_loop_run(current_ioloop); pool_unref(&pool); auth_master_deinit(&client); diff --git a/src/lib-auth-client/auth-master-request.c b/src/lib-auth-client/auth-master-request.c index 81e0b9713f..925e3c6a0b 100644 --- a/src/lib-auth-client/auth-master-request.c +++ b/src/lib-auth-client/auth-master-request.c @@ -370,15 +370,11 @@ bool auth_master_request_wait(struct auth_master_request *req) e_debug(req->event, "Waiting for request to complete"); - if ((conn->flags & AUTH_MASTER_FLAG_NO_INNER_IOLOOP) != 0) - ioloop = conn->ioloop; - else { - prev_ioloop = conn->ioloop; - if (!waiting) - conn->prev_ioloop = prev_ioloop; - ioloop = io_loop_create(); - auth_master_switch_ioloop_to(conn, ioloop); - } + prev_ioloop = conn->ioloop; + if (!waiting) + conn->prev_ioloop = prev_ioloop; + ioloop = io_loop_create(); + auth_master_switch_ioloop_to(conn, ioloop); if (conn->conn.input != NULL && i_stream_get_data_size(conn->conn.input) > 0) @@ -418,12 +414,10 @@ bool auth_master_request_wait(struct auth_master_request *req) last_state = req->state; freed = !auth_master_request_unref(&req); - if ((conn->flags & AUTH_MASTER_FLAG_NO_INNER_IOLOOP) == 0) { - auth_master_switch_ioloop_to(conn, prev_ioloop); - io_loop_destroy(&ioloop); - if (!waiting) - conn->prev_ioloop = NULL; - } + auth_master_switch_ioloop_to(conn, prev_ioloop); + io_loop_destroy(&ioloop); + if (!waiting) + conn->prev_ioloop = NULL; return (freed || last_state >= AUTH_MASTER_REQUEST_STATE_FINISHED); } diff --git a/src/lib-auth-client/auth-master.c b/src/lib-auth-client/auth-master.c index 1e0ae62e8f..9960eb9813 100644 --- a/src/lib-auth-client/auth-master.c +++ b/src/lib-auth-client/auth-master.c @@ -81,9 +81,6 @@ auth_master_init(const char *auth_socket_path, enum auth_master_flags flags) conn->auth_socket_path); event_unref(&event_parent); - if ((flags & AUTH_MASTER_FLAG_NO_INNER_IOLOOP) != 0) - conn->ioloop = current_ioloop; - hash_table_create_direct(&conn->requests, pool, 0); /* Try to use auth request ID numbers from wider range to ease @@ -624,15 +621,11 @@ void auth_master_wait(struct auth_master_connection *conn) e_debug(conn->conn.event, "Waiting for all requests to complete"); - if ((conn->flags & AUTH_MASTER_FLAG_NO_INNER_IOLOOP) != 0) - ioloop = conn->ioloop; - else { - prev_ioloop = conn->ioloop; - if (!waiting) - conn->prev_ioloop = prev_ioloop; - ioloop = io_loop_create(); - auth_master_switch_ioloop_to(conn, ioloop); - } + prev_ioloop = conn->ioloop; + if (!waiting) + conn->prev_ioloop = prev_ioloop; + ioloop = io_loop_create(); + auth_master_switch_ioloop_to(conn, ioloop); if (conn->conn.input != NULL && i_stream_get_data_size(conn->conn.input) > 0) @@ -661,12 +654,10 @@ void auth_master_wait(struct auth_master_connection *conn) if (conn->conn.output != NULL && was_corked) o_stream_cork(conn->conn.output); - if ((conn->flags & AUTH_MASTER_FLAG_NO_INNER_IOLOOP) == 0) { - auth_master_switch_ioloop_to(conn, prev_ioloop); - io_loop_destroy(&ioloop); - if (!waiting) - conn->prev_ioloop = NULL; - } + auth_master_switch_ioloop_to(conn, prev_ioloop); + io_loop_destroy(&ioloop); + if (!waiting) + conn->prev_ioloop = NULL; e_debug(conn->conn.event, "Finished waiting for requests"); diff --git a/src/lib-auth-client/auth-master.h b/src/lib-auth-client/auth-master.h index 1e82cc7c83..fa8447749b 100644 --- a/src/lib-auth-client/auth-master.h +++ b/src/lib-auth-client/auth-master.h @@ -13,8 +13,6 @@ enum auth_master_flags { AUTH_MASTER_FLAG_DEBUG = 0x01, /* Don't disconnect from auth socket when idling */ AUTH_MASTER_FLAG_NO_IDLE_TIMEOUT = 0x02, - /* No inner ioloop (testing only) */ - AUTH_MASTER_FLAG_NO_INNER_IOLOOP = 0x04, }; /*