From: Karl Fleischmann Date: Thu, 6 Apr 2023 07:04:35 +0000 (+0200) Subject: stats: stats_metrics_add_dynamic() - Validate event exporter X-Git-Tag: 2.3.21~41 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=08528c38e187b03e26a3ba38283ef02059cf2122;p=thirdparty%2Fdovecot%2Fcore.git stats: stats_metrics_add_dynamic() - Validate event exporter --- diff --git a/src/stats/stats-metrics.c b/src/stats/stats-metrics.c index 632c4865b6..e63edaef5b 100644 --- a/src/stats/stats-metrics.c +++ b/src/stats/stats-metrics.c @@ -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; }