]> 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)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Thu, 24 Aug 2023 09:34:43 +0000 (09:34 +0000)
src/stats/stats-metrics.c

index 632c4865b6338ab394dabc396532f420a263dfca..e63edaef5bb80a780d3d7304054960c325fd6277 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;
 }