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