From: Timo Sirainen Date: Fri, 1 May 2026 16:56:21 +0000 (+0000) Subject: [PATCH 10/12] lib-master: Move config_version_find() from src/config/config-parser.c X-Git-Tag: archive/raspbian/1%2.4.1+dfsg1-6+rpi1+deb13u7^2~31 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=c46f66eb2cf2d7f98c857591629d682b5725cf45;p=dovecot.git [PATCH 10/12] lib-master: Move config_version_find() from src/config/config-parser.c Rename to dovecot_config_version_find() and expose it via master-service-settings.h so non-config callers (e.g. the upcoming dovecot_storage_version validation in master_service_settings_check()) can share the same supported-versions list. No behaviour change. Gbp-Pq: Name 0010-lib-master-Move-config_version_find-from-src-config-.patch --- diff --git a/src/config/config-parser.c b/src/config/config-parser.c index 7e9db59..61dbeba 100644 --- a/src/config/config-parser.c +++ b/src/config/config-parser.c @@ -2580,30 +2580,6 @@ config_parser_check_warnings(struct config_parser_context *ctx, const char *key, hash_table_insert(ctx->seen_settings, path, first_pos); } -static bool config_version_find(const char *version, const char **error_r) -{ - const char *const supported_versions[] = { -#ifdef DOVECOT_PRO_EDITION - "3.1.0", -#else - "2.4.0", -#endif - NULL - }; - /* FIXME: implement full version checking later */ - if (!str_array_find(supported_versions, version) && - strcmp(DOVECOT_CONFIG_VERSION, version) != 0) { - *error_r = t_strdup_printf( - "Currently supported versions are: %s%s", - t_strarray_join(supported_versions, " "), - str_array_find(supported_versions, - DOVECOT_CONFIG_VERSION) ? "" : - t_strdup_printf(" %s", DOVECOT_CONFIG_VERSION)); - return FALSE; - } - return TRUE; -} - static bool dovecot_config_version_equals(struct config_parser_context *ctx, const char *value) { @@ -2644,7 +2620,7 @@ static bool config_parser_get_version(struct config_parser_context *ctx, if (line->type != CONFIG_LINE_TYPE_KEYVALUE) ctx->error = "Invalid dovecot_config_version: value is not a string"; - else if (!config_version_find(line->value, &error)) { + else if (!dovecot_config_version_find(line->value, &error)) { ctx->error = p_strdup_printf(ctx->pool, "Invalid dovecot_config_version: %s", error); } else if (strcmp(line->value, CONFIG_VERSION_GIT) == 0) { diff --git a/src/lib-master/master-service-settings.c b/src/lib-master/master-service-settings.c index 399d753..71438c0 100644 --- a/src/lib-master/master-service-settings.c +++ b/src/lib-master/master-service-settings.c @@ -146,6 +146,44 @@ master_service_set_process_shutdown_filter_wrapper(struct event_filter *filter) master_service_set_process_shutdown_filter(master_service, filter); } +/* List of dovecot_config_versions accepted at parse / startup time. + dovecot_storage_version accepts these as well, plus an extra legacy set + defined in storage_version_check(). */ +static const char *const dovecot_config_supported_versions[] = { +#ifdef DOVECOT_PRO_EDITION + "3.1.0", + "3.1.1", + "3.1.2", + "3.1.3", + "3.1.4", + "3.1.5", + "3.2.0", +#else + "2.4.0", + "2.4.1", + "2.4.2", + "2.4.3", + "2.4.4", +#endif + NULL +}; + +bool dovecot_config_version_find(const char *version, const char **error_r) +{ + /* FIXME: implement full version checking later */ + if (!str_array_find(dovecot_config_supported_versions, version) && + strcmp(DOVECOT_CONFIG_VERSION, version) != 0) { + *error_r = t_strdup_printf( + "Currently supported versions are: %s%s", + t_strarray_join(dovecot_config_supported_versions, " "), + str_array_find(dovecot_config_supported_versions, + DOVECOT_CONFIG_VERSION) ? "" : + t_strdup_printf(" %s", DOVECOT_CONFIG_VERSION)); + return FALSE; + } + return TRUE; +} + static bool storage_version_check(const char *version, const char **error_r) { #define STORAGE_MIN_VERSION "2.3.0" diff --git a/src/lib-master/master-service-settings.h b/src/lib-master/master-service-settings.h index d378700..33d642d 100644 --- a/src/lib-master/master-service-settings.h +++ b/src/lib-master/master-service-settings.h @@ -95,4 +95,9 @@ master_service_get_service_settings(struct master_service *service); const char * master_service_get_import_environment_keyvals(struct master_service *service); +/* Returns TRUE if version is in the list of dovecot_config_version values + accepted by this build. Sets *error_r to a descriptive list of supported + versions on FALSE. */ +bool dovecot_config_version_find(const char *version, const char **error_r); + #endif