From 24678074e0361dc0132f1c0866b3bec11ba3edd8 Mon Sep 17 00:00:00 2001 From: Karl Fleischmann <karl.fleischmann@open-xchange.com> Date: Mon, 3 Apr 2023 09:09:52 +0200 Subject: [PATCH] lib-sieve: sieve-storage, sieve-file-storage - Drop deprecated handling of 'sieve_dir' configuration --- src/lib-sieve/sieve-storage-private.h | 9 +- src/lib-sieve/sieve-storage.c | 46 +--------- .../storage/file/sieve-file-storage.c | 90 ++++++------------- 3 files changed, 36 insertions(+), 109 deletions(-) diff --git a/src/lib-sieve/sieve-storage-private.h b/src/lib-sieve/sieve-storage-private.h index 16af3d41c..104191629 100644 --- a/src/lib-sieve/sieve-storage-private.h +++ b/src/lib-sieve/sieve-storage-private.h @@ -208,11 +208,10 @@ extern const struct sieve_storage sieve_data_storage; extern const struct sieve_storage sieve_file_storage; struct sieve_storage * -sieve_file_storage_init_legacy(struct sieve_instance *svinst, - const char *active_path, - const char *storage_path, - enum sieve_storage_flags flags, - enum sieve_error *error_r) ATTR_NULL(6); +sieve_file_storage_init_default(struct sieve_instance *svinst, + const char *active_path, + enum sieve_storage_flags flags, + enum sieve_error *error_r) ATTR_NULL(4); /* dict */ diff --git a/src/lib-sieve/sieve-storage.c b/src/lib-sieve/sieve-storage.c index 9e12d1c45..11149d5f2 100644 --- a/src/lib-sieve/sieve-storage.c +++ b/src/lib-sieve/sieve-storage.c @@ -397,11 +397,8 @@ sieve_storage_do_create_main(struct sieve_instance *svinst, enum sieve_error *error_r) { struct sieve_storage *storage = NULL; - const struct sieve_storage - *sieve_class = NULL, - *sieve_dir_class = NULL; - const char *set_sieve, *set_sieve_dir; - const char *data, *storage_path; + const struct sieve_storage *sieve_class = NULL; + const char *set_sieve, *data; unsigned long long int uint_setting; size_t size_setting; int ret; @@ -438,43 +435,8 @@ sieve_storage_do_create_main(struct sieve_instance *svinst, } if (storage == NULL) { - /* Script storage directory configuration (deprecated) */ - - set_sieve_dir = sieve_setting_get(svinst, "sieve_dir"); - if (set_sieve_dir == NULL) { - set_sieve_dir = sieve_setting_get(svinst, - "sieve_storage"); - } - - if (set_sieve_dir == NULL || *set_sieve_dir == '\0') { - storage_path = ""; - } else { - const char *p; - - /* Parse and check driver */ - storage_path = set_sieve_dir; - if ((ret = sieve_storage_driver_parse( - svinst, &storage_path, &sieve_dir_class)) < 0) { - *error_r = SIEVE_ERROR_TEMP_FAILURE; - return NULL; - } - - if (ret > 0 && sieve_dir_class != &sieve_file_storage) { - e_error(svinst->event, "storage: " - "Cannot use deprecated sieve_dir= setting " - "with `%s' driver for main Sieve storage", - sieve_dir_class->driver_name); - } - - /* Ignore any options */ - p = strchr(storage_path, ';'); - if (p != NULL) - storage_path = t_strdup_until(storage_path, p); - } - - storage = sieve_file_storage_init_legacy(svinst, set_sieve, - storage_path, flags, - error_r); + storage = sieve_file_storage_init_default(svinst, set_sieve, + flags, error_r); } if (storage == NULL) diff --git a/src/lib-sieve/storage/file/sieve-file-storage.c b/src/lib-sieve/storage/file/sieve-file-storage.c index 8eab8be5c..75558b60b 100644 --- a/src/lib-sieve/storage/file/sieve-file-storage.c +++ b/src/lib-sieve/storage/file/sieve-file-storage.c @@ -636,69 +636,37 @@ sieve_file_storage_autodetect(struct sieve_file_storage *fstorage, } static int -sieve_file_storage_do_init_legacy(struct sieve_file_storage *fstorage, - const char *active_path, - const char *storage_path, - enum sieve_error *error_r) +sieve_file_storage_do_init_default(struct sieve_file_storage *fstorage, + const char *active_path, + enum sieve_error *error_r) { struct sieve_storage *storage = &fstorage->storage; - bool explicit = FALSE, exists = FALSE; - - if (storage_path == NULL || *storage_path == '\0') { - /* Try autodectection */ - sieve_file_storage_autodetect(fstorage, &storage_path); - - if (storage_path != NULL && *storage_path != '\0') { - /* Got something: stat it */ - if (sieve_file_storage_stat(fstorage, storage_path, - error_r) < 0) { - if (*error_r != SIEVE_ERROR_NOT_FOUND) { - /* Error */ - return -1; - } - } else if (S_ISDIR(fstorage->st.st_mode)) { - /* Success */ - exists = TRUE; - } - } - - if ((storage_path == NULL || *storage_path == '\0') && - (storage->flags & SIEVE_STORAGE_FLAG_READWRITE) != 0) { - sieve_storage_set_critical(storage, - "Could not find storage root directory for write access; " - "path was left unconfigured and autodetection failed"); - *error_r = SIEVE_ERROR_TEMP_FAILURE; - return -1; - } + const char *storage_path; + bool exists = FALSE; - } else { - /* Get full storage path */ - if (sieve_file_storage_get_full_path(fstorage, &storage_path, - error_r) < 0) - return -1; + sieve_file_storage_autodetect(fstorage, &storage_path); - /* Stat storage directory */ + if (storage_path != NULL && *storage_path != '\0') { + /* Got something: stat it */ if (sieve_file_storage_stat(fstorage, storage_path, error_r) < 0) { - if (*error_r != SIEVE_ERROR_NOT_FOUND) + if (*error_r != SIEVE_ERROR_NOT_FOUND) { + /* Error */ return -1; - if ((storage->flags & - SIEVE_STORAGE_FLAG_READWRITE) == 0) - storage_path = NULL; - } else { + } + } else if (S_ISDIR(fstorage->st.st_mode)) { + /* Success */ exists = TRUE; } + } - /* Storage path must be a directory */ - if (exists && !S_ISDIR(fstorage->st.st_mode)) { - sieve_storage_set_critical(storage, - "Sieve storage path `%s' configured using sieve_dir " - "is not a directory", storage_path); - *error_r = SIEVE_ERROR_TEMP_FAILURE; - return -1; - } - - explicit = TRUE; + if ((storage_path == NULL || *storage_path == '\0') && + (storage->flags & SIEVE_STORAGE_FLAG_READWRITE) != 0) { + sieve_storage_set_critical(storage, + "Could not find storage root directory for write access; " + "path was left unconfigured and autodetection failed"); + *error_r = SIEVE_ERROR_TEMP_FAILURE; + return -1; } if (active_path == NULL || *active_path == '\0') { @@ -714,8 +682,7 @@ sieve_file_storage_do_init_legacy(struct sieve_file_storage *fstorage, } } - if (!explicit && !exists && - active_path != NULL && *active_path != '\0' && + if (!exists && active_path != NULL && *active_path != '\0' && (storage->flags & SIEVE_STORAGE_FLAG_READWRITE) == 0) storage_path = NULL; @@ -726,10 +693,10 @@ sieve_file_storage_do_init_legacy(struct sieve_file_storage *fstorage, } struct sieve_storage * -sieve_file_storage_init_legacy(struct sieve_instance *svinst, - const char *active_path, const char *storage_path, - enum sieve_storage_flags flags, - enum sieve_error *error_r) +sieve_file_storage_init_default(struct sieve_instance *svinst, + const char *active_path, + enum sieve_storage_flags flags, + enum sieve_error *error_r) { struct sieve_storage *storage; struct sieve_file_storage *fstorage; @@ -739,9 +706,8 @@ sieve_file_storage_init_legacy(struct sieve_instance *svinst, fstorage = (struct sieve_file_storage *)storage; T_BEGIN { - if (sieve_file_storage_do_init_legacy(fstorage, active_path, - storage_path, - error_r) < 0) { + if (sieve_file_storage_do_init_default(fstorage, active_path, + error_r) < 0) { sieve_storage_unref(&storage); storage = NULL; } -- GitLab