]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-program-client, global: Move program_client_parameters.event to function parameters
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Mon, 12 Aug 2024 10:39:40 +0000 (13:39 +0300)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 12 Feb 2025 10:34:13 +0000 (12:34 +0200)
The event is required.

src/lib-program-client/program-client-local.c
src/lib-program-client/program-client-private.h
src/lib-program-client/program-client-remote.c
src/lib-program-client/program-client.c
src/lib-program-client/program-client.h
src/lib-program-client/test-program-client-local.c
src/lib-program-client/test-program-client-net.c
src/lib-program-client/test-program-client-unix.c
src/lib-smtp/smtp-submit.c
src/plugins/quota/quota.c
src/plugins/welcome/welcome-plugin.c

index 8db8a919dd1e943738d578035d9f5ef869035646..3899ea63a0f25d70fc2c694db6ea76bd575510be 100644 (file)
@@ -517,7 +517,7 @@ program_client_local_switch_ioloop(struct program_client *pclient)
 }
 
 struct program_client *
-program_client_local_create(const char *bin_path,
+program_client_local_create(struct event *event, const char *bin_path,
                            const char *const *args,
                            const struct program_client_parameters *params)
 {
@@ -529,7 +529,7 @@ program_client_local_create(const char *bin_path,
 
        pool = pool_alloconly_create("program client local", 1024);
        plclient = p_new(pool, struct program_client_local, 1);
-       program_client_init(&plclient->client, pool, label, args, params);
+       program_client_init(&plclient->client, pool, event, label, args, params);
        plclient->client.connect = program_client_local_connect;
        plclient->client.close_output = program_client_local_close_output;
        plclient->client.switch_ioloop = program_client_local_switch_ioloop;
index 9c6a441b3969e2fc111c55192ebca8f53d02b1c6..f3ff357049e8d4a94a8b673f8dbbd0a61a89f34e 100644 (file)
@@ -67,7 +67,7 @@ void program_client_set_label(struct program_client *pclient,
                              const char *label);
 
 void program_client_init(struct program_client *pclient, pool_t pool,
-                        const char *initial_label,
+                        struct event *event, const char *initial_label,
                         const char *const *args,
                         const struct program_client_parameters *params)
                         ATTR_NULL(5);
index 7468dc463c88005258b506c7fb8b76a67cb91319..8b671f64fa1a30c1f17e97237172df4f87523d32 100644 (file)
@@ -616,7 +616,8 @@ program_client_remote_switch_ioloop(struct program_client *pclient)
 }
 
 struct program_client *
-program_client_unix_create(const char *socket_path, const char *const *args,
+program_client_unix_create(struct event *event,
+                          const char *socket_path, const char *const *args,
                           const struct program_client_parameters *params)
 {
        struct program_client_remote *prclient;
@@ -627,7 +628,7 @@ program_client_unix_create(const char *socket_path, const char *const *args,
 
        pool = pool_alloconly_create("program client unix", 1024);
        prclient = p_new(pool, struct program_client_remote, 1);
-       program_client_init(&prclient->client, pool, label, args, params);
+       program_client_init(&prclient->client, pool, event, label, args, params);
        prclient->client.connect = program_client_unix_connect;
        prclient->client.close_output = program_client_remote_close_output;
        prclient->client.disconnect = program_client_remote_disconnect;
@@ -639,7 +640,7 @@ program_client_unix_create(const char *socket_path, const char *const *args,
 }
 
 struct program_client *
-program_client_net_create(const char *host, in_port_t port,
+program_client_net_create(struct event *event, const char *host, in_port_t port,
                          const char *const *args,
                          const struct program_client_parameters *params)
 {
@@ -651,7 +652,7 @@ program_client_net_create(const char *host, in_port_t port,
 
        pool = pool_alloconly_create("program client net", 1024);
        prclient = p_new(pool, struct program_client_remote, 1);
-       program_client_init(&prclient->client, pool, label, args, params);
+       program_client_init(&prclient->client, pool, event, label, args, params);
        prclient->client.connect = program_client_net_connect_init;
        prclient->client.close_output = program_client_remote_close_output;
        prclient->client.disconnect = program_client_remote_disconnect;
@@ -664,7 +665,8 @@ program_client_net_create(const char *host, in_port_t port,
 }
 
 struct program_client *
-program_client_net_create_ips(const struct ip_addr *ips, size_t ips_count,
+program_client_net_create_ips(struct event *event,
+                             const struct ip_addr *ips, size_t ips_count,
                              in_port_t port,
                              const char *const *args,
                              const struct program_client_parameters *params)
@@ -679,7 +681,7 @@ program_client_net_create_ips(const struct ip_addr *ips, size_t ips_count,
 
        pool = pool_alloconly_create("program client net", 1024);
        prclient = p_new(pool, struct program_client_remote, 1);
-       program_client_init(&prclient->client, pool, label, args, params);
+       program_client_init(&prclient->client, pool, event, label, args, params);
        prclient->client.connect = program_client_net_connect_init;
        prclient->client.close_output = program_client_remote_close_output;
        prclient->client.disconnect = program_client_remote_disconnect;
index 539d3588a74bf7ff6056d758d959b9aa17a3d5b2..4c2ac82b1fd29dfa52dcef6fb38d81f3dc7793fa 100644 (file)
@@ -464,23 +464,21 @@ void program_client_connected(struct program_client *pclient)
 }
 
 void program_client_init(struct program_client *pclient, pool_t pool,
-                        const char *initial_label, const char *const *args,
+                        struct event *event, const char *initial_label,
+                        const char *const *args,
                         const struct program_client_parameters *params)
 {
        pclient->pool = pool;
+       pclient->event = event_create(event);
        if (args != NULL)
                pclient->args = p_strarray_dup(pool, args);
        pclient->fd_in = -1;
        pclient->fd_out = -1;
 
-       if (params == NULL)
-               pclient->event = event_create(NULL);
-       else {
+       if (params != NULL) {
                pclient->params = *params;
                pclient->params.dns_client_socket_path =
                        p_strdup(pool, params->dns_client_socket_path);
-
-               pclient->event = event_create(params->event);
        }
 
        program_client_set_label(pclient, initial_label);
@@ -662,17 +660,18 @@ void program_client_switch_ioloop(struct program_client *pclient)
        pclient->switch_ioloop(pclient);
 }
 
-int program_client_create(const char *uri, const char *const *args,
+int program_client_create(struct event *event, const char *uri,
+                         const char *const *args,
                          const struct program_client_parameters *params,
                          struct program_client **pc_r, const char **error_r)
 {
        const char *suffix;
 
        if (str_begins(uri, "exec:", &suffix)) {
-               *pc_r = program_client_local_create(suffix, args, params);
+               *pc_r = program_client_local_create(event, suffix, args, params);
                return 0;
        } else if (str_begins(uri, "unix:", &suffix)) {
-               *pc_r = program_client_unix_create(suffix, args, params);
+               *pc_r = program_client_unix_create(event, suffix, args, params);
                return 0;
        } else if (str_begins(uri, "tcp:", &suffix)) {
                const char *host;
@@ -685,7 +684,7 @@ int program_client_create(const char *uri, const char *const *args,
                                "must be host:port in '%s'", suffix);
                        return -1;
                }
-               *pc_r = program_client_net_create(host, port, args, params);
+               *pc_r = program_client_net_create(event, host, port, args, params);
                return 0;
        } else {
                *error_r = t_strdup_printf(
index 2397f7a375fad4ab60680d9f49084455a97db855..e5083ff5c84bf7641574fad4eee6d907795d79ea 100644 (file)
@@ -17,9 +17,6 @@ struct program_client_parameters {
        unsigned int input_idle_timeout_msecs;
        const char *dns_client_socket_path;
 
-       /* Event to use for the program client. */
-       struct event *event;
-
        /* use o_stream_dot, which is mainly useful to make sure that an
           unexpectedly closed connection doesn't cause the partial input to
           be accepted as valid and complete program input. This is always
@@ -34,21 +31,26 @@ typedef void program_client_callback_t(enum program_client_exit_status status,
                                       void *context);
 
 struct program_client *
-program_client_local_create(const char *bin_path, const char *const *args,
+program_client_local_create(struct event *event,
+                           const char *bin_path, const char *const *args,
                            const struct program_client_parameters *params)
                            ATTR_NULL(3);
 struct program_client *
-program_client_unix_create(const char *socket_path, const char *const *args,
+program_client_unix_create(struct event *event,
+                          const char *socket_path, const char *const *args,
                           const struct program_client_parameters *params);
 struct program_client *
-program_client_net_create(const char *host, in_port_t port,
+program_client_net_create(struct event *event,
+                         const char *host, in_port_t port,
                          const char *const *args,
                          const struct program_client_parameters *params);
 struct program_client *
-program_client_net_create_ips(const struct ip_addr *ips, size_t ips_count,
+program_client_net_create_ips(struct event *event,
+                             const struct ip_addr *ips, size_t ips_count,
                              in_port_t port, const char *const *args,
                              const struct program_client_parameters *params);
-int program_client_create(const char *uri, const char *const *args,
+int program_client_create(struct event *event, const char *uri,
+                         const char *const *args,
                          const struct program_client_parameters *params,
                          struct program_client **pc_r, const char **error_r);
 
index b08e229ff1078c3a91bae2cad3698fc00539e3d8..5973991a781ed8501aac11873dbf51d027f3de7e 100644 (file)
@@ -27,6 +27,7 @@ static struct program_client_parameters pc_params = {
        .client_connect_timeout_msecs = 10000,
        .input_idle_timeout_msecs = 5000,
 };
+static struct event *event;
 
 static void test_program_success(void)
 {
@@ -38,7 +39,7 @@ static void test_program_success(void)
 
        test_begin("test_program_success");
 
-       pc = program_client_local_create("/bin/echo", args, &pc_params);
+       pc = program_client_local_create(event, "/bin/echo", args, &pc_params);
 
        buffer_t *output = buffer_create_dynamic(default_pool, 16);
        struct ostream *os = test_ostream_create(output);
@@ -65,7 +66,7 @@ static void test_program_io_sync(void)
 
        test_begin("test_program_io (sync)");
 
-       pc = program_client_local_create("/bin/cat", args, &pc_params);
+       pc = program_client_local_create(event, "/bin/cat", args, &pc_params);
 
        struct istream *is = test_istream_create(pclient_test_io_string);
        program_client_set_input(pc, is);
@@ -108,7 +109,7 @@ static void test_program_io_async(void)
        prev_ioloop = current_ioloop;
        ioloop = io_loop_create();
 
-       pc = program_client_local_create("/bin/cat", args, &pc_params);
+       pc = program_client_local_create(event, "/bin/cat", args, &pc_params);
 
        struct istream *is = test_istream_create(pclient_test_io_string);
        program_client_set_input(pc, is);
@@ -146,7 +147,7 @@ static void test_program_failure(void)
 
        test_begin("test_program_failure");
 
-       pc = program_client_local_create("/bin/false", args, &pc_params);
+       pc = program_client_local_create(event, "/bin/false", args, &pc_params);
 
        buffer_t *output = buffer_create_dynamic(default_pool, 16);
        struct ostream *os = test_ostream_create(output);
@@ -182,7 +183,7 @@ static void test_program_io_big(void)
 
        test_begin("test_program_io (big)");
 
-       pc = program_client_local_create("/bin/sh", args, &pc_params);
+       pc = program_client_local_create(event, "/bin/sh", args, &pc_params);
 
        /* make big input with only a small reference string */
        struct istream *is1 = test_istream_create(pclient_test_io_string);
@@ -235,7 +236,7 @@ static void test_program_wait_no_io(void)
 
        params.client_connect_timeout_msecs = 0;
        params.input_idle_timeout_msecs = 0;
-       pc = program_client_local_create("/bin/sh", args, &params);
+       pc = program_client_local_create(event, "/bin/sh", args, &params);
 
        test_assert(program_client_run(pc) == 1);
 
@@ -261,11 +262,11 @@ int main(int argc, char *argv[])
 
        lib_init();
 
-       pc_params.event = event_create(NULL);
+       event = event_create(NULL);
        while ((c = getopt(argc, argv, "D")) > 0) {
                switch (c) {
                case 'D':
-                       event_set_forced_debug(pc_params.event, TRUE);
+                       event_set_forced_debug(event, TRUE);
                        break;
                default:
                        i_fatal("Usage: %s [-D]", argv[0]);
@@ -278,7 +279,7 @@ int main(int argc, char *argv[])
        lib_signals_deinit();
        io_loop_destroy(&ioloop);
 
-       event_unref(&pc_params.event);
+       event_unref(&event);
        lib_deinit();
        return ret;
 }
index 5368aeda7c402cfae95c682d3fe507668129ad5d..b4c588be536c7f64076db5a071eacb56f54e2a1a 100644 (file)
@@ -31,6 +31,7 @@ static struct program_client_parameters pc_params = {
        .client_connect_timeout_msecs = 5000,
        .input_idle_timeout_msecs = 10000,
 };
+struct event *event;
 
 static struct test_server {
        struct ioloop *ioloop;
@@ -336,8 +337,8 @@ static void test_program_success(void)
        test_begin("test_program_success");
 
        pc_params.no_reply = FALSE;
-       pc = program_client_net_create("127.0.0.1", test_globals.port, args,
-                                      &pc_params);
+       pc = program_client_net_create(event, "127.0.0.1", test_globals.port,
+                                      args, &pc_params);
 
        buffer_t *output = buffer_create_dynamic(default_pool, 16);
        struct ostream *os = test_ostream_create(output);
@@ -367,8 +368,8 @@ static void test_program_io_common(const char *const *args)
        int ret = -2;
 
        pc_params.no_reply = FALSE;
-       pc = program_client_net_create("127.0.0.1", test_globals.port, args,
-                                      &pc_params);
+       pc = program_client_net_create(event, "127.0.0.1", test_globals.port,
+                                      args, &pc_params);
 
        struct istream *is = test_istream_create(pclient_test_io_string);
        program_client_set_input(pc, is);
@@ -427,8 +428,8 @@ static void test_program_failure(void)
        test_begin("test_program_failure");
 
        pc_params.no_reply = FALSE;
-       pc = program_client_net_create("127.0.0.1", test_globals.port, args,
-                                      &pc_params);
+       pc = program_client_net_create(event, "127.0.0.1", test_globals.port,
+                                      args, &pc_params);
 
        buffer_t *output = buffer_create_dynamic(default_pool, 16);
        struct ostream *os = test_ostream_create(output);
@@ -463,8 +464,8 @@ static void test_program_noreply(void)
        test_begin("test_program_noreply");
 
        pc_params.no_reply = TRUE;
-       pc = program_client_net_create("127.0.0.1", test_globals.port, args,
-                                      &pc_params);
+       pc = program_client_net_create(event, "127.0.0.1", test_globals.port,
+                                      args, &pc_params);
 
        program_client_run_async(pc, test_program_async_callback, &ret);
 
@@ -500,7 +501,7 @@ static void test_program_refused(void)
        }
 
        pc_params.no_reply = TRUE;
-       pc = program_client_net_create_ips(ips, N_ELEMENTS(ips),
+       pc = program_client_net_create_ips(event, ips, N_ELEMENTS(ips),
                                           test_globals.port, args,
                                           &pc_params);
 
@@ -534,11 +535,11 @@ int main(int argc, char *argv[])
 
        lib_init();
 
-       pc_params.event = event_create(NULL);
+       event = event_create(NULL);
        while ((c = getopt(argc, argv, "D")) > 0) {
                switch (c) {
                case 'D':
-                       event_set_forced_debug(pc_params.event, TRUE);
+                       event_set_forced_debug(event, TRUE);
                        break;
                default:
                        i_fatal("Usage: %s [-D]", argv[0]);
@@ -547,7 +548,7 @@ int main(int argc, char *argv[])
 
        ret = test_run(tests);
 
-       event_unref(&pc_params.event);
+       event_unref(&event);
        lib_deinit();
        return ret;
 }
index c9d321920f460e5e9706f6f25412754d1183da65..849205f826aa721bfde5e0a257308c8222ab53d3 100644 (file)
@@ -30,6 +30,7 @@ static struct program_client_parameters pc_params = {
        .client_connect_timeout_msecs = 1000,
        .input_idle_timeout_msecs = 5000,
 };
+static struct event *event;
 
 static struct test_server {
        struct ioloop *ioloop;
@@ -289,7 +290,7 @@ static void test_program_success(void)
        test_begin("test_program_success");
 
        pc_params.no_reply = FALSE;
-       pc = program_client_unix_create(TEST_SOCKET, args, &pc_params);
+       pc = program_client_unix_create(event, TEST_SOCKET, args, &pc_params);
 
        buffer_t *output = buffer_create_dynamic(default_pool, 16);
        struct ostream *os = test_ostream_create(output);
@@ -316,7 +317,7 @@ static void test_program_io_common(const char *const *args)
        int ret;
 
        pc_params.no_reply = FALSE;
-       pc = program_client_unix_create(TEST_SOCKET, args, &pc_params);
+       pc = program_client_unix_create(event, TEST_SOCKET, args, &pc_params);
 
        struct istream *is = test_istream_create(pclient_test_io_string);
        program_client_set_input(pc, is);
@@ -372,7 +373,7 @@ static void test_program_failure(void)
        test_begin("test_program_failure");
 
        pc_params.no_reply = FALSE;
-       pc = program_client_unix_create(TEST_SOCKET, args, &pc_params);
+       pc = program_client_unix_create(event, TEST_SOCKET, args, &pc_params);
 
        buffer_t *output = buffer_create_dynamic(default_pool, 16);
        struct ostream *os = test_ostream_create(output);
@@ -404,7 +405,7 @@ static void test_program_noreply(void)
        test_begin("test_program_noreply");
 
        pc_params.no_reply = TRUE;
-       pc = program_client_unix_create(TEST_SOCKET, args, &pc_params);
+       pc = program_client_unix_create(event, TEST_SOCKET, args, &pc_params);
 
        program_client_run_async(pc, test_program_async_callback, &ret);
 
@@ -429,7 +430,7 @@ static void test_program_sync(void)
        test_begin("test_program_sync");
 
        pc_params.no_reply = TRUE;
-       pc = program_client_unix_create(TEST_SOCKET, args, &pc_params);
+       pc = program_client_unix_create(event, TEST_SOCKET, args, &pc_params);
        ret = program_client_run(pc);
        test_assert(ret == 1);
 
@@ -455,7 +456,7 @@ static void test_program_async_wait(void)
        test_begin("test_program_async_wait");
 
        pc_params.no_reply = TRUE;
-       test_globals.async_client = program_client_unix_create(TEST_SOCKET,
+       test_globals.async_client = program_client_unix_create(event, TEST_SOCKET,
                        args, &pc_params);
 
        program_client_run_async(test_globals.async_client,
@@ -483,11 +484,11 @@ int main(int argc, char *argv[])
 
        lib_init();
 
-       pc_params.event = event_create(NULL);
+       event = event_create(NULL);
        while ((c = getopt(argc, argv, "D")) > 0) {
                switch (c) {
                case 'D':
-                       event_set_forced_debug(pc_params.event, TRUE);
+                       event_set_forced_debug(event, TRUE);
                        break;
                default:
                        i_fatal("Usage: %s [-D]", argv[0]);
@@ -496,7 +497,7 @@ int main(int argc, char *argv[])
 
        ret = test_run(tests);
 
-       event_unref(&pc_params.event);
+       event_unref(&event);
        lib_deinit();
        return ret;
 }
index a947b39e1209d904e25d99d1ed8a3f3ca74efcf4..5b8e23177f02aceda29ce0d17767fc02836733d2 100644 (file)
@@ -410,10 +410,9 @@ smtp_submit_send_sendmail(struct smtp_submit *subm)
        i_zero(&pc_params);
        pc_params.client_connect_timeout_msecs = set->submission_timeout * 1000;
        pc_params.input_idle_timeout_msecs = set->submission_timeout * 1000;
-       pc_params.event = subm->event;
 
-       pc = program_client_local_create
-               (sendmail_bin, array_front(&args), &pc_params);
+       pc = program_client_local_create(subm->event, sendmail_bin,
+                                        array_front(&args), &pc_params);
 
        program_client_set_input(pc, subm->input);
        i_stream_unref(&subm->input);
index 915e5a047f6d11c6f74d12e17a8ea8270fad0777..7340436d0f66ae644dd9de15fd8b0116a8856bf4 100644 (file)
@@ -1010,7 +1010,6 @@ static void quota_warning_execute(struct quota_root *root, const char *cmd,
 
        struct program_client_parameters params = {
                .client_connect_timeout_msecs = 1000,
-               .event = root->quota->event,
                .no_reply = TRUE,
        };
        struct program_client *pc;
@@ -1045,8 +1044,8 @@ static void quota_warning_execute(struct quota_root *root, const char *cmd,
 
        args++;
 
-       if (program_client_create(socket_path, args, &params,
-                                 &pc, &error) < 0) {
+       if (program_client_create(root->quota->event, socket_path, args,
+                                 &params, &pc, &error) < 0) {
                e_error(root->quota->event,
                        "program_client_create(%s) failed: %s", socket_path,
                        error);
index ff00abff646ac3438d212ee2acde8838a9a95845..2a94019b867fdfca5eb6709a19bf54f1215026b5 100644 (file)
@@ -51,7 +51,6 @@ static void script_execute(struct mail_user *user, const char *cmd, bool wait)
 
        struct program_client_parameters params = {
                .client_connect_timeout_msecs = 1000,
-               .event = user->event,
                .no_reply = !wait,
        };
 
@@ -67,7 +66,8 @@ static void script_execute(struct mail_user *user, const char *cmd, bool wait)
        }
 
        struct welcome_client_list *wclient = i_new(struct welcome_client_list, 1);
-       wclient->client = program_client_unix_create(socket_path, args, &params);
+       wclient->client = program_client_unix_create(user->event, socket_path,
+                                                    args, &params);
 
        if (wait) {
                enum program_client_exit_status ret =