From: Timo Sirainen Date: Mon, 12 Aug 2024 10:39:40 +0000 (+0300) Subject: lib-program-client, global: Move program_client_parameters.event to function parameters X-Git-Tag: 2.4.1~705 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=477369b4be5f4c1fc59f5777129064f8d612713d;p=thirdparty%2Fdovecot%2Fcore.git lib-program-client, global: Move program_client_parameters.event to function parameters The event is required. --- diff --git a/src/lib-program-client/program-client-local.c b/src/lib-program-client/program-client-local.c index 8db8a919dd..3899ea63a0 100644 --- a/src/lib-program-client/program-client-local.c +++ b/src/lib-program-client/program-client-local.c @@ -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; diff --git a/src/lib-program-client/program-client-private.h b/src/lib-program-client/program-client-private.h index 9c6a441b39..f3ff357049 100644 --- a/src/lib-program-client/program-client-private.h +++ b/src/lib-program-client/program-client-private.h @@ -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); diff --git a/src/lib-program-client/program-client-remote.c b/src/lib-program-client/program-client-remote.c index 7468dc463c..8b671f64fa 100644 --- a/src/lib-program-client/program-client-remote.c +++ b/src/lib-program-client/program-client-remote.c @@ -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; diff --git a/src/lib-program-client/program-client.c b/src/lib-program-client/program-client.c index 539d3588a7..4c2ac82b1f 100644 --- a/src/lib-program-client/program-client.c +++ b/src/lib-program-client/program-client.c @@ -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( diff --git a/src/lib-program-client/program-client.h b/src/lib-program-client/program-client.h index 2397f7a375..e5083ff5c8 100644 --- a/src/lib-program-client/program-client.h +++ b/src/lib-program-client/program-client.h @@ -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); diff --git a/src/lib-program-client/test-program-client-local.c b/src/lib-program-client/test-program-client-local.c index b08e229ff1..5973991a78 100644 --- a/src/lib-program-client/test-program-client-local.c +++ b/src/lib-program-client/test-program-client-local.c @@ -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, ¶ms); + pc = program_client_local_create(event, "/bin/sh", args, ¶ms); 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; } diff --git a/src/lib-program-client/test-program-client-net.c b/src/lib-program-client/test-program-client-net.c index 5368aeda7c..b4c588be53 100644 --- a/src/lib-program-client/test-program-client-net.c +++ b/src/lib-program-client/test-program-client-net.c @@ -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; } diff --git a/src/lib-program-client/test-program-client-unix.c b/src/lib-program-client/test-program-client-unix.c index c9d321920f..849205f826 100644 --- a/src/lib-program-client/test-program-client-unix.c +++ b/src/lib-program-client/test-program-client-unix.c @@ -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; } diff --git a/src/lib-smtp/smtp-submit.c b/src/lib-smtp/smtp-submit.c index a947b39e12..5b8e23177f 100644 --- a/src/lib-smtp/smtp-submit.c +++ b/src/lib-smtp/smtp-submit.c @@ -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); diff --git a/src/plugins/quota/quota.c b/src/plugins/quota/quota.c index 915e5a047f..7340436d0f 100644 --- a/src/plugins/quota/quota.c +++ b/src/plugins/quota/quota.c @@ -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, ¶ms, - &pc, &error) < 0) { + if (program_client_create(root->quota->event, socket_path, args, + ¶ms, &pc, &error) < 0) { e_error(root->quota->event, "program_client_create(%s) failed: %s", socket_path, error); diff --git a/src/plugins/welcome/welcome-plugin.c b/src/plugins/welcome/welcome-plugin.c index ff00abff64..2a94019b86 100644 --- a/src/plugins/welcome/welcome-plugin.c +++ b/src/plugins/welcome/welcome-plugin.c @@ -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, ¶ms); + wclient->client = program_client_unix_create(user->event, socket_path, + args, ¶ms); if (wait) { enum program_client_exit_status ret =