changeset 22703:fe760efc829a

pop3: Include mail user variables in logout format
author Aki Tuomi <aki.tuomi@dovecot.fi>
date Mon, 04 Dec 2017 11:18:24 +0200
parents 024c9456f8e5
children a6c0bec02b57
files src/pop3/pop3-client.c
diffstat 1 files changed, 16 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/pop3/pop3-client.c	Mon Dec 04 11:15:15 2017 +0200
+++ b/src/pop3/pop3-client.c	Mon Dec 04 11:18:24 2017 +0200
@@ -524,7 +524,7 @@
 			'o', "uidl_change"))
 		uidl_change = client_build_uidl_change_string(client);
 
-	const struct var_expand_table tab[] = {
+	const struct var_expand_table logout_tab[] = {
 		{ 'p', dec2str(client->top_bytes), "top_bytes" },
 		{ 't', dec2str(client->top_count), "top_count" },
 		{ 'b', dec2str(client->retr_bytes), "retr_bytes" },
@@ -539,10 +539,23 @@
 		{ '\0', client->session_id, "session" },
 		{ 'd', !client->delete_success ? "0" :
 		       dec2str(client->deleted_size), "deleted_bytes" },
-		{ '\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;
+
+	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->pop3_logout_format, tab);
+	var_expand(str, client->set->pop3_logout_format, array_idx(&tab, 0));
 	return str_c(str);
 }