]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
stats: stats_metrics_add_dynamic() - Validate event exporter
authorKarl Fleischmann <karl.fleischmann@open-xchange.com>
Thu, 6 Apr 2023 07:04:35 +0000 (09:04 +0200)
committerKarl Fleischmann <karl.fleischmann@open-xchange.com>
Wed, 12 Apr 2023 07:51:11 +0000 (09:51 +0200)
src/stats/stats-metrics.c

index dc11956d9a4bd40b135a1e108ef3b5d959f7240a..50e68290aa7e88b7fc15ad4f81c4c4e88c714f01 100644 (file)
@@ -188,6 +188,25 @@ stats_metrics_find(struct stats_metrics *metrics,
        return NULL;
 }
 
+static bool
+stats_metrics_check_for_exporter(struct stats_metrics *metrics, const char *name)
+{
+       struct exporter *exporter;
+
+       if (!array_is_created(&metrics->exporters))
+               return FALSE;
+
+       bool is_found = FALSE;
+       array_foreach_elem(&metrics->exporters, exporter) {
+               if (strcmp(exporter->name, name) == 0) {
+                       is_found = TRUE;
+                       break;
+               }
+       }
+
+       return is_found;
+}
+
 bool stats_metrics_add_dynamic(struct stats_metrics *metrics,
                               struct stats_metric_settings *set,
                               const char **error_r)
@@ -202,6 +221,13 @@ bool stats_metrics_add_dynamic(struct stats_metrics *metrics,
                stats_metric_settings_dup(metrics->pool, set);
        if (!stats_metric_setting_parser_info.check_func(_set, metrics->pool, error_r))
                return FALSE;
+
+       if (!stats_metrics_check_for_exporter(metrics, set->exporter)) {
+               *error_r = t_strdup_printf("Exporter '%s' does not exist.",
+                                          set->exporter);
+               return FALSE;
+       }
+
        stats_metrics_add_set(metrics, _set);
        return TRUE;
 }