]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib, lib-master: Move version_*() to lib/version.[ch]
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Sun, 5 Oct 2025 15:49:13 +0000 (18:49 +0300)
committermarkus.valentin <markus.valentin@open-xchange.com>
Mon, 13 Oct 2025 09:54:28 +0000 (11:54 +0200)
24 files changed:
src/anvil/anvil-connection.c
src/config/config-connection.c
src/config/config-parser.c
src/config/old-set-parser.c
src/doveadm/client-connection-tcp.c
src/doveadm/doveadm-penalty.c
src/doveadm/doveadm-stats.c
src/doveadm/doveadm-util.c
src/doveadm/doveadm-who.c
src/doveadm/dsync/dsync-ibc-stream.c
src/imap-urlauth-login/imap-urlauth-login.c
src/imap/imap-client-hibernate.c
src/lib-doveadm/doveadm-client.c
src/lib-master/Makefile.am
src/lib-master/master-service-settings.c
src/lib-master/master-service.c
src/lib-master/master-service.h
src/lib/Makefile.am
src/lib/test-lib.inc
src/lib/test-version.c [moved from src/lib-master/test-master-service.c with 83% similarity]
src/lib/version.c [new file with mode: 0644]
src/lib/version.h [new file with mode: 0644]
src/util/script-login.c
src/util/script.c

index 13c57bf3e7eeb74630c4f8f552140402da1031f6..9cd44563edd0d6a695e57ab5d74cb20991213d01 100644 (file)
@@ -11,6 +11,7 @@
 #include "connection.h"
 #include "str.h"
 #include "strescape.h"
+#include "version.h"
 #include "master-service.h"
 #include "master-interface.h"
 #include "connect-limit.h"
index 658d00f990a6be1194bd410d1802eeca11b5bc0e..258032eeb1f537c707b169f4bdcf765db25af2f0 100644 (file)
@@ -7,6 +7,7 @@
 #include "ostream.h"
 #include "ostream-unix.h"
 #include "strescape.h"
+#include "version.h"
 #include "settings-parser.h"
 #include "master-service.h"
 #include "master-service-settings.h"
index 19a684ff095fa8c2e406d0958ba5626515d271d5..d69db348541df17cac57b58909aa3c1305eddeb9 100644 (file)
@@ -9,9 +9,9 @@
 #include "strescape.h"
 #include "istream.h"
 #include "module-dir.h"
+#include "version.h"
 #include "settings.h"
 #include "service-settings.h"
-#include "master-service.h"
 #include "master-service-settings.h"
 #include "all-settings.h"
 #include "old-set-parser.h"
@@ -22,6 +22,7 @@
 
 #include "default-settings-import.h"
 
+#include <stdio.h>
 #include <unistd.h>
 #include <fcntl.h>
 #include <time.h>
index 4ae8506dc71bf53232645df41be755c4bc715c92..ee2cb513c99fd821e4908a8474df8f614daf4a5a 100644 (file)
@@ -2,7 +2,7 @@
 
 #include "lib.h"
 #include "array.h"
-#include "master-service.h"
+#include "version.h"
 #include "settings-history.h"
 #include "config-parser-private.h"
 #include "old-set-parser.h"
index 9299596f29ea7b704da286ef4b64e6513e45d982..936bb03f014409dca3ead1e5c907ca4ac4a2a851 100644 (file)
@@ -8,9 +8,9 @@
 #include "istream.h"
 #include "ostream.h"
 #include "strescape.h"
+#include "version.h"
 #include "iostream-ssl.h"
 #include "ostream-multiplex.h"
-#include "master-service.h"
 #include "master-service-ssl.h"
 #include "mail-storage-service.h"
 #include "doveadm-util.h"
index 8a098b3453e6776f37333d570cb5969f688e332f..71a997e2e882f677defc37222574f5217271e364 100644 (file)
@@ -7,7 +7,7 @@
 #include "hash.h"
 #include "strescape.h"
 #include "time-util.h"
-#include "master-service.h"
+#include "version.h"
 #include "doveadm.h"
 #include "doveadm-print.h"
 
index bd7552211adfdb1df1cee5756eeaa8b8d4679776..87aef26a89412a0c4df05e0a675272078cdf620c 100644 (file)
@@ -6,7 +6,7 @@
 #include "str.h"
 #include "strescape.h"
 #include "write-full.h"
-#include "master-service.h"
+#include "version.h"
 #include "doveadm.h"
 #include "doveadm-print.h"
 #include "stats-settings.h"
index d8a3cd42bfbb0174957a8eff664684ddd7c00f97..ceb3d99c708ba5e4d70b295db4bba2aad8d4343e 100644 (file)
@@ -7,6 +7,7 @@
 #include "ostream.h"
 #include "net.h"
 #include "time-util.h"
+#include "version.h"
 #include "master-service.h"
 #include "module-dir.h"
 #include "doveadm-settings.h"
index ec768d7e7d6a118cb4affe06b728260d1cd220a0..7d3d6cb5e36297844ca8679b643cbfb302eaf216 100644 (file)
@@ -8,7 +8,7 @@
 #include "hash.h"
 #include "str.h"
 #include "strescape.h"
-#include "master-service.h"
+#include "version.h"
 #include "doveadm.h"
 #include "doveadm-print.h"
 #include "doveadm-who.h"
index 957c569cee9b5f0e1f81afdc786e331ad51f1dc9..472d1fc5171110bbda6e50debd326d8921ade7f3 100644 (file)
@@ -10,7 +10,7 @@
 #include "ostream.h"
 #include "str.h"
 #include "strescape.h"
-#include "master-service.h"
+#include "version.h"
 #include "mail-cache.h"
 #include "mail-storage-private.h"
 #include "dsync-serializer.h"
index 31648034cba00683143d233c1cde6a266afa7de6..03c6b4f3d30e961865654c718fdbd957dcb51ba5 100644 (file)
@@ -8,7 +8,7 @@
 #include "ioloop.h"
 #include "istream.h"
 #include "ostream.h"
-#include "master-service.h"
+#include "version.h"
 #include "auth-client.h"
 #include "client-common.h"
 
index ade5d250ead2415cc886ca2550244b9601841edb..067b984cc04e9da40fe67168bc16b3c76ff32028 100644 (file)
@@ -9,7 +9,7 @@
 #include "base64.h"
 #include "str.h"
 #include "strescape.h"
-#include "master-service.h"
+#include "version.h"
 #include "compression.h"
 #include "mailbox-watch.h"
 #include "imap-state.h"
index 37b7ec2f9b627c2ac965efa0398726005e8385e0..fa98d0a91f559e14e72de6a1fb6867d83334677f 100644 (file)
@@ -10,8 +10,8 @@
 #include "ostream-dot.h"
 #include "str.h"
 #include "strescape.h"
+#include "version.h"
 #include "iostream-ssl.h"
-#include "master-service.h"
 #include "doveadm-protocol.h"
 #include "doveadm-client.h"
 #include "dns-lookup.h"
index fbc748b222dbc62d8d45d59473cca5eeffa0b9b9..bfead4f0dd2d086226e95e6cf8a092ea0b359b5b 100644 (file)
@@ -46,7 +46,6 @@ pkginc_lib_HEADERS = $(headers)
 
 test_programs = \
        test-event-stats \
-       test-master-service \
        test-master-service-settings
 
 noinst_PROGRAMS = $(test_programs)
@@ -71,10 +70,6 @@ test_event_stats_SOURCES = test-event-stats.c
 test_event_stats_LDADD = $(test_libs)
 test_event_stats_DEPENDENCIES = $(test_deps)
 
-test_master_service_SOURCES = test-master-service.c
-test_master_service_LDADD = $(test_libs)
-test_master_service_DEPENDENCIES = $(test_deps)
-
 test_master_service_settings_SOURCES = test-master-service-settings.c
 test_master_service_settings_LDADD = $(test_libs)
 test_master_service_settings_DEPENDENCIES = $(test_deps)
index 87892bc575c79346c1a1efdb68bcff49d9f7a64c..b94fa3a472f64bc8e93350477f4210973342d7d0 100644 (file)
@@ -15,6 +15,7 @@
 #include "eacces-error.h"
 #include "env-util.h"
 #include "execv-const.h"
+#include "version.h"
 #include "settings.h"
 #include "stats-client.h"
 #include "master-service-private.h"
index 5250dd4347ef1cbb0b67d0069f122f47f4b7ef62..e9f73cc1ffc0e6bcba3e2cd065eba6b8314222b9 100644 (file)
@@ -2034,91 +2034,6 @@ void master_status_update(struct master_service *service)
        master_status_send(service, important_update);
 }
 
-bool version_string_verify(const char *line, const char *service_name,
-                          unsigned int major_version)
-{
-       unsigned int minor_version;
-
-       return version_string_verify_full(line, service_name,
-                                         major_version, &minor_version);
-}
-
-bool version_string_verify_full(const char *line, const char *service_name,
-                               unsigned int major_version,
-                               unsigned int *minor_version_r)
-{
-       size_t service_name_len = strlen(service_name);
-       bool ret;
-
-       if (!str_begins(line, "VERSION\t", &line))
-               return FALSE;
-
-       if (strncmp(line, service_name, service_name_len) != 0 ||
-           line[service_name_len] != '\t')
-               return FALSE;
-       line += service_name_len + 1;
-
-       T_BEGIN {
-               const char *p = strchr(line, '\t');
-
-               if (p == NULL)
-                       ret = FALSE;
-               else {
-                       ret = str_uint_equals(t_strdup_until(line, p),
-                                             major_version);
-                       if (str_to_uint(p+1, minor_version_r) < 0)
-                               ret = FALSE;
-               }
-       } T_END;
-       return ret;
-}
-
-int version_cmp(const char *version1, const char *version2)
-{
-       unsigned int v1, v2;
-
-       do {
-               if (str_parse_uint(version1, &v1, &version1) < 0)
-                       i_unreached();
-               if (str_parse_uint(version2, &v2, &version2) < 0)
-                       i_unreached();
-               if (*version1 == '.')
-                       version1++;
-               else
-                       i_assert(*version1 == '\0');
-               if (*version2 == '.')
-                       version2++;
-               else
-                       i_assert(*version2 == '\0');
-
-               if (v1 < v2)
-                       return -1;
-               if (v1 > v2)
-                       return 1;
-       } while (*version1 != '\0' && *version2 != '\0');
-
-       if (*version1 != '\0')
-               return 1;
-       if (*version2 != '\0')
-               return -1;
-       return 0;
-}
-
-bool version_is_valid(const char *version)
-{
-       unsigned int i;
-
-       for (i = 0; version[i] != '\0'; i++) {
-               if (version[i] == '.') {
-                       if (i == 0 || version[i-1] == '.' ||
-                           version[i+1] == '\0')
-                               return FALSE;
-               } else if (version[i] < '0' || version[i] > '9')
-                       return FALSE;
-       }
-       return i > 0;
-}
-
 void master_service_set_process_shutdown_filter(struct master_service *service,
                                                struct event_filter *filter)
 {
index 9ee6af923b81e7fa0d3a953fc7d82170e488340c..27253ce607ba12bd04947a56218c96a60aa4c980 100644 (file)
@@ -312,21 +312,6 @@ void master_service_deinit(struct master_service **service);
  */
 void master_service_deinit_forked(struct master_service **_service);
 
-/* Returns TRUE if line contains compatible service name and major version.
-   The line is expected to be in format:
-   VERSION <tab> service_name <tab> major version <tab> minor version */
-bool version_string_verify(const char *line, const char *service_name,
-                          unsigned int major_version);
-/* Same as version_string_verify(), but return the minor version. */
-bool version_string_verify_full(const char *line, const char *service_name,
-                               unsigned int major_version,
-                               unsigned int *minor_version_r);
-/* Compare number[.number[...]] style version numbers. Assert-crash if the
-   version strings are invalid. */
-int version_cmp(const char *version1, const char *version2);
-/* Returns TRUE if version string is a valid number[.number[...]] string. */
-bool version_is_valid(const char *version);
-
 /* Sets process shutdown filter */
 void master_service_set_process_shutdown_filter(struct master_service *service,
                                                struct event_filter *filter);
index b968527037a4960d47004c6a66ec16bd94a177c9..26d04b851372002bddfe06256f8cb26d1dccc469 100644 (file)
@@ -244,6 +244,7 @@ liblib_la_SOURCES = \
        uri-util.c \
        utc-offset.c \
        utc-mktime.c \
+       version.c \
        wildcard-match.c \
        write-full.c
 
@@ -409,6 +410,7 @@ headers = \
        uri-util.h \
        utc-offset.h \
        utc-mktime.h \
+       version.h \
        wildcard-match.h \
        write-full.h
 
@@ -519,6 +521,7 @@ test_lib_SOURCES = \
        test-unicode-casemap.c \
        test-utc-mktime.c \
        test-uri.c \
+       test-version.c \
        test-wildcard-match.c
 
 test_headers = \
index facdc413a01e8b762ac6ba41277b6e1492832e0f..d2b279820e518b8334a56a4feec2b6fe9911ca9c 100644 (file)
@@ -112,4 +112,5 @@ TEST(test_unicode_nf)
 TEST(test_unicode_casemap)
 TEST(test_uri)
 TEST(test_utc_mktime)
+TEST(test_version)
 TEST(test_wildcard_match)
similarity index 83%
rename from src/lib-master/test-master-service.c
rename to src/lib/test-version.c
index f30b2506281fb26b382148aa1a8f4b8c3fb7a95c..e938333f08a0c547a2d8c97cff0580ef2d145fb2 100644 (file)
@@ -1,7 +1,7 @@
-/* Copyright (c) 2023 Dovecot authors, see the included COPYING file */
+/* Copyright (c) 2023-2025 Dovecot authors, see the included COPYING file */
 
-#include "lib.h"
-#include "master-service.h"
+#include "test-lib.h"
+#include "version.h"
 #include "test-common.h"
 
 static void test_version_is_valid(void)
@@ -56,12 +56,8 @@ static void test_version_cmp(void)
        test_end();
 }
 
-int main(void)
+void test_version(void)
 {
-       static void (*const test_functions[])(void) = {
-               test_version_is_valid,
-               test_version_cmp,
-               NULL
-       };
-       return test_run(test_functions);
+       test_version_is_valid();
+       test_version_cmp();
 }
diff --git a/src/lib/version.c b/src/lib/version.c
new file mode 100644 (file)
index 0000000..f8bec42
--- /dev/null
@@ -0,0 +1,90 @@
+/* Copyright (c) 2005-2025 Dovecot authors, see the included COPYING file */
+
+#include "lib.h"
+#include "version.h"
+
+bool version_string_verify(const char *line, const char *service_name,
+                          unsigned int major_version)
+{
+       unsigned int minor_version;
+
+       return version_string_verify_full(line, service_name,
+                                         major_version, &minor_version);
+}
+
+bool version_string_verify_full(const char *line, const char *service_name,
+                               unsigned int major_version,
+                               unsigned int *minor_version_r)
+{
+       size_t service_name_len = strlen(service_name);
+       bool ret;
+
+       if (!str_begins(line, "VERSION\t", &line))
+               return FALSE;
+
+       if (strncmp(line, service_name, service_name_len) != 0 ||
+           line[service_name_len] != '\t')
+               return FALSE;
+       line += service_name_len + 1;
+
+       T_BEGIN {
+               const char *p = strchr(line, '\t');
+
+               if (p == NULL)
+                       ret = FALSE;
+               else {
+                       ret = str_uint_equals(t_strdup_until(line, p),
+                                             major_version);
+                       if (str_to_uint(p+1, minor_version_r) < 0)
+                               ret = FALSE;
+               }
+       } T_END;
+       return ret;
+}
+
+int version_cmp(const char *version1, const char *version2)
+{
+       unsigned int v1, v2;
+
+       do {
+               if (str_parse_uint(version1, &v1, &version1) < 0)
+                       i_unreached();
+               if (str_parse_uint(version2, &v2, &version2) < 0)
+                       i_unreached();
+               if (*version1 == '.')
+                       version1++;
+               else
+                       i_assert(*version1 == '\0');
+               if (*version2 == '.')
+                       version2++;
+               else
+                       i_assert(*version2 == '\0');
+
+               if (v1 < v2)
+                       return -1;
+               if (v1 > v2)
+                       return 1;
+       } while (*version1 != '\0' && *version2 != '\0');
+
+       if (*version1 != '\0')
+               return 1;
+       if (*version2 != '\0')
+               return -1;
+       return 0;
+}
+
+bool version_is_valid(const char *version)
+{
+       unsigned int i;
+
+       for (i = 0; version[i] != '\0'; i++) {
+               if (version[i] == '.') {
+                       if (i == 0 || version[i-1] == '.' ||
+                           version[i+1] == '\0')
+                               return FALSE;
+               } else if (version[i] < '0' || version[i] > '9')
+                       return FALSE;
+       }
+       return i > 0;
+}
+
diff --git a/src/lib/version.h b/src/lib/version.h
new file mode 100644 (file)
index 0000000..f305f7f
--- /dev/null
@@ -0,0 +1,19 @@
+#ifndef VERSION_H
+#define VERSION_H
+
+/* Returns TRUE if line contains compatible service name and major version.
+   The line is expected to be in format:
+   VERSION <tab> service_name <tab> major version <tab> minor version */
+bool version_string_verify(const char *line, const char *service_name,
+                          unsigned int major_version);
+/* Same as version_string_verify(), but return the minor version. */
+bool version_string_verify_full(const char *line, const char *service_name,
+                               unsigned int major_version,
+                               unsigned int *minor_version_r);
+/* Compare number[.number[...]] style version numbers. Assert-crash if the
+   version strings are invalid. */
+int version_cmp(const char *version1, const char *version2);
+/* Returns TRUE if version string is a valid number[.number[...]] string. */
+bool version_is_valid(const char *version);
+
+#endif
index ed356747dc468fe8576805b9458817e85f8ff613..4df7f2317407785f56dfcdca5a69845e0781d7b3 100644 (file)
@@ -7,6 +7,7 @@
 #include "restrict-access.h"
 #include "str.h"
 #include "strescape.h"
+#include "version.h"
 #include "settings-parser.h"
 #include "mail-storage-service.h"
 #include "master-interface.h"
index 5838cdad31d0f00c755249c4845b898c0c8b6232..391b87bc0620cbea20fadeebdba9e9b7ecda0ecd 100644 (file)
@@ -8,6 +8,7 @@
 #include "execv-const.h"
 #include "write-full.h"
 #include "restrict-access.h"
+#include "version.h"
 #include "master-interface.h"
 #include "master-service.h"