changeset 22701:8dcf3b113b6d

imap: Include mail user variables in logout format
author Aki Tuomi <aki.tuomi@dovecot.fi>
date Mon, 04 Dec 2017 11:04:09 +0200
parents 59c0869770eb
children 024c9456f8e5
files src/imap/imap-client.c
diffstat 1 files changed, 14 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/imap/imap-client.c	Mon Dec 04 11:03:45 2017 +0200
+++ b/src/imap/imap-client.c	Mon Dec 04 11:04:09 2017 +0200
@@ -233,7 +233,7 @@
 
 const char *client_stats(struct client *client)
 {
-	const struct var_expand_table tab[] = {
+	const struct var_expand_table logout_tab[] = {
 		{ 'i', dec2str(i_stream_get_absolute_offset(client->input)), "input" },
 		{ 'o', dec2str(client->output->offset), "output" },
 		{ '\0', client->session_id, "session" },
@@ -246,11 +246,22 @@
 		{ '\0', dec2str(client->trashed_count), "trashed" },
 		{ '\0', dec2str(client->autoexpunged_count), "autoexpunged" },
 		{ '\0', dec2str(client->append_count), "appended" },
-		{ '\0', NULL, NULL }
 	};
+	ARRAY(struct var_expand_table) tab;
+	const struct var_expand_table *user_tab =
+		mail_user_var_expand_table(client->user);
 	string_t *str;
+	size_t n;
 
-	var_expand(str, client->set->imap_logout_format, tab);
+	t_array_init(&tab, 32);
+	array_append(&tab, logout_tab, N_ELEMENTS(logout_tab));
+	/* count elements */
+	for(n = 0; user_tab[n].long_key != NULL; n++)
+		;
+	array_append(&tab, user_tab, n);
+	array_append_zero(&tab);
+	str = t_str_new(128);
+	var_expand(str, client->set->imap_logout_format, array_idx(&tab, 0));
 	return str_c(str);
 }