]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
login-common: login-settings - Perform login_settings_read() in a new datastack frame.
authorStephan Bosch <stephan.bosch@open-xchange.com>
Mon, 25 Sep 2023 23:47:21 +0000 (01:47 +0200)
committerStephan Bosch <stephan.bosch@open-xchange.com>
Mon, 25 Sep 2023 23:47:21 +0000 (01:47 +0200)
It can use much datastack space and cause undue datastack growth, particularly
in ManageSieve for some reason.

src/login-common/login-settings.c

index 5213ace30324698404bbe4589783ffafd03cc9ae..a2cab493a703409c0abf2614161913fc2cb9216f 100644 (file)
@@ -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;
+}