From 22446bdd32448988296b209ea62a19c8d47bd9c1 Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan.bosch@open-xchange.com>
Date: Tue, 1 Oct 2024 03:09:10 +0200
Subject: [PATCH] lib-sieve: sieve-storage - Properly set error code and
 message for sieve_storage_setup_bin_path()

---
 src/lib-sieve/sieve-script.c  |  2 +-
 src/lib-sieve/sieve-storage.c | 15 +++++++++------
 2 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/src/lib-sieve/sieve-script.c b/src/lib-sieve/sieve-script.c
index 22c21b5fb..299dd23a5 100644
--- a/src/lib-sieve/sieve-script.c
+++ b/src/lib-sieve/sieve-script.c
@@ -573,7 +573,7 @@ int sieve_script_binary_save_default(struct sieve_script *script ATTR_UNUSED,
 	    str_begins_with(path, storage->bin_path) &&
 	    sieve_storage_setup_bin_path(
 		script->storage, mkdir_get_executable_mode(save_mode)) < 0) {
-		*error_code_r = SIEVE_ERROR_TEMP_FAILURE;
+		*error_code_r = script->storage->error_code;
 		return -1;
 	}
 
diff --git a/src/lib-sieve/sieve-storage.c b/src/lib-sieve/sieve-storage.c
index 706533b94..dee0b127c 100644
--- a/src/lib-sieve/sieve-storage.c
+++ b/src/lib-sieve/sieve-storage.c
@@ -624,19 +624,22 @@ int sieve_storage_setup_bin_path(struct sieve_storage *storage, mode_t mode)
 	const char *bin_path = storage->bin_path;
 	struct stat st;
 
-	if (bin_path == NULL)
+	if (bin_path == NULL) {
+		sieve_storage_set_critical(
+			storage, "script_bin_path not configured for storage");
 		return -1;
+	}
 
 	if (stat(bin_path, &st) == 0)
 		return 0;
 
 	if (errno == EACCES) {
-		e_error(storage->event,
+		sieve_storage_set_critical(storage,
 			"Failed to setup directory for binaries: "
 			"%s", eacces_error_get("stat", bin_path));
 		return -1;
 	} else if (errno != ENOENT) {
-		e_error(storage->event,
+		sieve_storage_set_critical(storage,
 			"Failed to setup directory for binaries: "
 			"stat(%s) failed: %m",
 			bin_path);
@@ -653,16 +656,16 @@ int sieve_storage_setup_bin_path(struct sieve_storage *storage, mode_t mode)
 	case EEXIST:
 		return 0;
 	case ENOENT:
-		e_error(storage->event,
+		sieve_storage_set_critical(storage,
 			"Directory for binaries was deleted while it was being created");
 		break;
 	case EACCES:
-		e_error(storage->event,
+		sieve_storage_set_critical(storage,
 			"%s", eacces_error_get_creating("mkdir_parents_chgrp",
 							bin_path));
 		break;
 	default:
-		e_error(storage->event,
+		sieve_storage_set_critical(storage,
 			"mkdir_parents_chgrp(%s) failed: %m", bin_path);
 		break;
 	}
-- 
GitLab