From: Markus Valentin Date: Thu, 8 May 2025 10:57:54 +0000 (+0200) Subject: lib-storage: Deprecate IMAP4rev1 mail_search_register_args for IMAP4rev2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d40e7cddbb93fe7f54675d417969ee6afc8fdd7a;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Deprecate IMAP4rev1 mail_search_register_args for IMAP4rev2 Also introduce mail_search_register_get_imap4rev2() and mail_search_register_get_imap4rev1(). --- diff --git a/src/imap/imap-search-args.c b/src/imap/imap-search-args.c index a7e9db0b50..df73a70c84 100644 --- a/src/imap/imap-search-args.c +++ b/src/imap/imap-search-args.c @@ -58,7 +58,7 @@ int imap_search_args_build(struct client_command_context *cmd, } parser = mail_search_parser_init_imap(args); - ret = mail_search_build(mail_search_register_get_imap(), + ret = mail_search_build(mail_search_register_get_imap4rev1(), parser, &charset, &sargs, &client_error); mail_search_parser_deinit(&parser); if (ret < 0) { diff --git a/src/lib-storage/mail-search-register-human.c b/src/lib-storage/mail-search-register-human.c index 7400111e8e..dcde6a549a 100644 --- a/src/lib-storage/mail-search-register-human.c +++ b/src/lib-storage/mail-search-register-human.c @@ -223,7 +223,7 @@ struct mail_search_register *mail_search_register_get_human(void) { if (mail_search_register_human == NULL) { struct mail_search_register *imap_reg = - mail_search_register_get_imap(); + mail_search_register_get_imap4rev1(); mail_search_register_human = mail_search_register_init_human(imap_reg); diff --git a/src/lib-storage/mail-search-register-imap.c b/src/lib-storage/mail-search-register-imap.c index cf6db101ec..5a9a46b1ee 100644 --- a/src/lib-storage/mail-search-register-imap.c +++ b/src/lib-storage/mail-search-register-imap.c @@ -14,7 +14,8 @@ #include "mail-search-build.h" #include "mail-search-mime-build.h" -struct mail_search_register *mail_search_register_imap; +struct mail_search_register *mail_search_register_imap4rev2; +struct mail_search_register *mail_search_register_imap4rev1; static struct mail_search_arg * imap_search_fallback(struct mail_search_build_context *ctx, @@ -617,21 +618,42 @@ static const struct mail_search_register_arg imap_register_args[] = { { "X-REAL-UID", imap_search_x_real_uid, 0 } }; -static struct mail_search_register *mail_search_register_init_imap(void) +static struct mail_search_register +*mail_search_register_init_imap(enum mail_search_register_arg_flags flags) { struct mail_search_register *reg; reg = mail_search_register_init(); - mail_search_register_add(reg, imap_register_args, - N_ELEMENTS(imap_register_args)); + for (unsigned int i = 0; i < N_ELEMENTS(imap_register_args); i++) { + if (HAS_ALL_BITS(flags, imap_register_args[i].flags)) + mail_search_register_add(reg, &imap_register_args[i], 1); + } mail_search_register_fallback(reg, imap_search_fallback); return reg; } +static struct mail_search_register *mail_search_register_init_imap4rev2(void) +{ + return mail_search_register_init_imap(0); +} + +static struct mail_search_register *mail_search_register_init_imap4rev1(void) +{ + return mail_search_register_init_imap(MAIL_SEARCH_REGISTER_IMAP4REV1); +} + +struct mail_search_register * +mail_search_register_get_imap4rev2(void) +{ + if (mail_search_register_imap4rev2 == NULL) + mail_search_register_imap4rev2 = mail_search_register_init_imap4rev2(); + return mail_search_register_imap4rev2; +} + struct mail_search_register * -mail_search_register_get_imap(void) +mail_search_register_get_imap4rev1(void) { - if (mail_search_register_imap == NULL) - mail_search_register_imap = mail_search_register_init_imap(); - return mail_search_register_imap; + if (mail_search_register_imap4rev1 == NULL) + mail_search_register_imap4rev1 = mail_search_register_init_imap4rev1(); + return mail_search_register_imap4rev1; } diff --git a/src/lib-storage/mail-search-register.h b/src/lib-storage/mail-search-register.h index 11840fc877..27648ffdc1 100644 --- a/src/lib-storage/mail-search-register.h +++ b/src/lib-storage/mail-search-register.h @@ -45,7 +45,8 @@ mail_search_register_find(struct mail_search_register *reg, const char *key); bool mail_search_register_get_fallback(struct mail_search_register *reg, mail_search_register_fallback_t **fallback_r); -struct mail_search_register *mail_search_register_get_imap(void); +struct mail_search_register *mail_search_register_get_imap4rev1(void); +struct mail_search_register *mail_search_register_get_imap4rev2(void); struct mail_search_register *mail_search_register_get_human(void); #endif diff --git a/src/lib-storage/mail-storage.c b/src/lib-storage/mail-storage.c index ca51ab5d13..751e832502 100644 --- a/src/lib-storage/mail-storage.c +++ b/src/lib-storage/mail-storage.c @@ -42,7 +42,8 @@ #define MAILBOX_DELETE_RETRY_SECS 30 #define MAILBOX_MAX_HIERARCHY_NAME_LENGTH 255 -extern struct mail_search_register *mail_search_register_imap; +extern struct mail_search_register *mail_search_register_imap4rev2; +extern struct mail_search_register *mail_search_register_imap4rev1; extern struct mail_search_register *mail_search_register_human; struct event_category event_category_storage = { @@ -103,8 +104,10 @@ void mail_storage_deinit(void) return; if (mail_search_register_human != NULL) mail_search_register_deinit(&mail_search_register_human); - if (mail_search_register_imap != NULL) - mail_search_register_deinit(&mail_search_register_imap); + if (mail_search_register_imap4rev1 != NULL) + mail_search_register_deinit(&mail_search_register_imap4rev1); + if (mail_search_register_imap4rev2 != NULL) + mail_search_register_deinit(&mail_search_register_imap4rev2); mail_search_mime_register_deinit(); if (array_is_created(&mail_storage_classes)) array_free(&mail_storage_classes); diff --git a/src/lib-storage/test-mail-search-args-imap.c b/src/lib-storage/test-mail-search-args-imap.c index c6cda9c41c..13c34a52d4 100644 --- a/src/lib-storage/test-mail-search-args-imap.c +++ b/src/lib-storage/test-mail-search-args-imap.c @@ -137,7 +137,7 @@ test_build_search_args(const char *args) const char *error, *charset = "UTF-8"; parser = mail_search_parser_init_cmdline(t_strsplit(args, " ")); - if (mail_search_build(mail_search_register_get_imap(), + if (mail_search_build(mail_search_register_get_imap4rev1(), parser, &charset, &sargs, &error) < 0) i_panic("%s", error); mail_search_parser_deinit(&parser); diff --git a/src/lib-storage/test-mail-search-args-simplify.c b/src/lib-storage/test-mail-search-args-simplify.c index dcde23665b..545ddb48df 100644 --- a/src/lib-storage/test-mail-search-args-simplify.c +++ b/src/lib-storage/test-mail-search-args-simplify.c @@ -239,7 +239,7 @@ test_build_search_args(const char *args) const char *error, *charset = "UTF-8"; parser = mail_search_parser_init_cmdline(t_strsplit(args, " ")); - if (mail_search_build(mail_search_register_get_imap(), + if (mail_search_build(mail_search_register_get_imap4rev1(), parser, &charset, &sargs, &error) < 0) i_panic("%s", error); mail_search_parser_deinit(&parser); diff --git a/src/plugins/virtual/virtual-config.c b/src/plugins/virtual/virtual-config.c index 44e024b0f1..a23c459bed 100644 --- a/src/plugins/virtual/virtual-config.c +++ b/src/plugins/virtual/virtual-config.c @@ -61,7 +61,7 @@ virtual_search_args_parse(const string_t *rule, const char **error_r) *error_r = t_strdup(imap_parser_get_error(imap_parser, NULL)); } else { parser = mail_search_parser_init_imap(args); - if (mail_search_build(mail_search_register_get_imap(), + if (mail_search_build(mail_search_register_get_imap4rev1(), parser, &charset, &sargs, error_r) < 0) sargs = NULL; mail_search_parser_deinit(&parser);