From: Stephan Bosch Date: Mon, 25 Sep 2023 23:47:21 +0000 (+0200) Subject: login-common: login-settings - Perform login_settings_read() in a new datastack frame. X-Git-Tag: 2.4.0~2577 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=55daa0489bb0f1ff31b1c4482e97e4df67150c6a;p=thirdparty%2Fdovecot%2Fcore.git login-common: login-settings - Perform login_settings_read() in a new datastack frame. It can use much datastack space and cause undue datastack growth, particularly in ManageSieve for some reason. --- diff --git a/src/login-common/login-settings.c b/src/login-common/login-settings.c index 5213ace303..a2cab493a7 100644 --- a/src/login-common/login-settings.c +++ b/src/login-common/login-settings.c @@ -155,14 +155,13 @@ login_setting_dup(pool_t pool, const struct setting_parser_info *info, return dest; } -struct login_settings * -login_settings_read(pool_t pool, - const struct ip_addr *local_ip, - const struct ip_addr *remote_ip, - const char *local_name, - const struct master_service_ssl_settings **ssl_set_r, - const struct master_service_ssl_server_settings **ssl_server_set_r, - void ***other_settings_r) +static struct login_settings * +login_settings_read_real( + pool_t pool, const struct ip_addr *local_ip, + const struct ip_addr *remote_ip, const char *local_name, + const struct master_service_ssl_settings **ssl_set_r, + const struct master_service_ssl_server_settings **ssl_server_set_r, + void ***other_settings_r) { struct master_service_settings_input input; struct master_service_settings_output output; @@ -204,3 +203,23 @@ login_settings_read(pool_t pool, *other_settings_r = sets + 1; return sets[0]; } + +struct login_settings * +login_settings_read( + pool_t pool, const struct ip_addr *local_ip, + const struct ip_addr *remote_ip, const char *local_name, + const struct master_service_ssl_settings **ssl_set_r, + const struct master_service_ssl_server_settings **ssl_server_set_r, + void ***other_settings_r) +{ + struct login_settings *login_set; + + T_BEGIN { + login_set = login_settings_read_real(pool, local_ip, remote_ip, + local_name, ssl_set_r, + ssl_server_set_r, + other_settings_r); + } T_END; + + return login_set; +}