changeset 22877:017c83019f41

config: Add command to request all filters
author Aki Tuomi <aki.tuomi@dovecot.fi>
date Thu, 30 Nov 2017 15:46:52 +0200
parents 9e2e4c1fb34e
children 6b75bab3ec79
files src/config/config-connection.c
diffstat 1 files changed, 34 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/config/config-connection.c	Thu Nov 30 15:46:40 2017 +0200
+++ b/src/config/config-connection.c	Thu Nov 30 15:46:52 2017 +0200
@@ -150,6 +150,36 @@
 	return 0;
 }
 
+static int config_filters_request(struct config_connection *conn)
+{
+	struct config_filter_parser *const *filters = config_filter_get_all(config_filter);
+	o_stream_cork(conn->output);
+	while(*filters != NULL) {
+		const struct config_filter *filter = &(*filters)->filter;
+		o_stream_nsend_str(conn->output, "FILTER");
+		if (filter->service != NULL)
+			o_stream_nsend_str(conn->output, t_strdup_printf("\tservice=%s",
+					   filter->service));
+		if (filter->local_name != NULL)
+			o_stream_nsend_str(conn->output, t_strdup_printf("\tlocal-name=%s",
+					   filter->local_name));
+		if (filter->local_bits > 0)
+			o_stream_nsend_str(conn->output, t_strdup_printf("\tlocal-net=%s/%u",
+					   net_ip2addr(&filter->local_net),
+					   filter->local_bits));
+		if (filter->remote_bits > 0)
+			o_stream_nsend_str(conn->output, t_strdup_printf("\tremote-net=%s/%u",
+					   net_ip2addr(&filter->remote_net),
+					   filter->remote_bits));
+		o_stream_nsend_str(conn->output, "\n");
+		filters++;
+	}
+	o_stream_nsend_str(conn->output, "\n");
+	o_stream_uncork(conn->output);
+	return 0;
+}
+
+
 static void config_connection_input(struct config_connection *conn)
 {
 	const char *const *args, *line;
@@ -186,6 +216,10 @@
 			if (config_connection_request(conn, args + 1) < 0)
 				break;
 		}
+		if (strcmp(args[0], "FILTERS") == 0) {
+			if (config_filters_request(conn) < 0)
+				break;
+		}
 	}
 }