]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
config: Add command to request all filters
authorAki Tuomi <aki.tuomi@dovecot.fi>
Thu, 30 Nov 2017 13:46:52 +0000 (15:46 +0200)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Tue, 6 Mar 2018 10:14:10 +0000 (12:14 +0200)
src/config/config-connection.c

index 1beff7eaab16ceeb604cae2d4293bea9f53bd351..fe31d80d36e90e7723b41c308ccd8c7381c1a58d 100644 (file)
@@ -150,6 +150,36 @@ static int config_connection_request(struct config_connection *conn,
        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 @@ static void config_connection_input(struct config_connection *conn)
                        if (config_connection_request(conn, args + 1) < 0)
                                break;
                }
+               if (strcmp(args[0], "FILTERS") == 0) {
+                       if (config_filters_request(conn) < 0)
+                               break;
+               }
        }
 }