From 93472b9d8ea9f2c99ad8a2851fdf6e93c6035747 Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan.bosch@open-xchange.com> Date: Mon, 2 Sep 2024 04:03:46 +0200 Subject: [PATCH] lib-sieve: sieve-script - Pass error code only through storage object --- src/lib-sieve/sieve-script-private.h | 19 ++--- src/lib-sieve/sieve-script.c | 69 ++++++++++++------- src/lib-sieve/sieve-storage-private.h | 6 +- .../storage/data/sieve-data-script.c | 4 +- .../storage/dict/sieve-dict-script.c | 36 +++------- .../storage/dict/sieve-dict-storage.c | 7 +- .../storage/dict/sieve-dict-storage.h | 9 +-- .../storage/file/sieve-file-script-sequence.c | 9 +-- .../storage/file/sieve-file-script.c | 46 ++++--------- .../storage/file/sieve-file-storage.h | 6 +- .../storage/ldap/sieve-ldap-script.c | 34 +++------ .../storage/ldap/sieve-ldap-storage.h | 6 +- 12 files changed, 100 insertions(+), 151 deletions(-) diff --git a/src/lib-sieve/sieve-script-private.h b/src/lib-sieve/sieve-script-private.h index 7ba42e12a..475465f13 100644 --- a/src/lib-sieve/sieve-script-private.h +++ b/src/lib-sieve/sieve-script-private.h @@ -11,12 +11,9 @@ struct sieve_script_vfuncs { void (*destroy)(struct sieve_script *script); - int (*open)(struct sieve_script *script, - enum sieve_error *error_code_r); - + int (*open)(struct sieve_script *script); int (*get_stream)(struct sieve_script *script, - struct istream **stream_r, - enum sieve_error *error_code_r); + struct istream **stream_r); /* binary */ int (*binary_read_metadata)(struct sieve_script *_script, @@ -29,11 +26,9 @@ struct sieve_script_vfuncs { struct sieve_binary_block *sblock, sieve_size_t *offset); int (*binary_load)(struct sieve_script *script, - struct sieve_binary **sbin_r, - enum sieve_error *error_code_r); + struct sieve_binary **sbin_r); int (*binary_save)(struct sieve_script *script, - struct sieve_binary *sbin, bool update, - enum sieve_error *error_code_r); + struct sieve_binary *sbin, bool update); const char *(*binary_get_prefix)(struct sieve_script *script); /* management */ @@ -80,13 +75,11 @@ void sieve_script_init(struct sieve_script *script, int sieve_script_binary_load_default(struct sieve_script *script, const char *path, - struct sieve_binary **sbin_r, - enum sieve_error *error_code_r); + struct sieve_binary **sbin_r); int sieve_script_binary_save_default(struct sieve_script *script, struct sieve_binary *sbin, const char *path, bool update, - mode_t save_mode, - enum sieve_error *error_code_r); + mode_t save_mode); /* * Built-in script drivers diff --git a/src/lib-sieve/sieve-script.c b/src/lib-sieve/sieve-script.c index 299dd23a5..7871763e8 100644 --- a/src/lib-sieve/sieve-script.c +++ b/src/lib-sieve/sieve-script.c @@ -178,10 +178,14 @@ int sieve_script_open(struct sieve_script *script, if (script->open) return 0; - ret = script->v.open(script, error_code_r); + ret = script->v.open(script); i_assert(ret <= 0); - if (ret < 0) + if (ret < 0) { + i_assert(storage->error_code != SIEVE_ERROR_NONE); + i_assert(storage->error != NULL); + *error_code_r = storage->error_code; return -1; + } i_assert(script->location != NULL); i_assert(script->name != NULL); @@ -319,11 +323,12 @@ int sieve_script_get_stream(struct sieve_script *script, i_assert(script->open); T_BEGIN { - ret = script->v.get_stream(script, &script->stream, - error_code_r); + ret = script->v.get_stream(script, &script->stream); } T_END; if (ret < 0) { + *error_code_r = storage->error_code; + struct event_passthrough *e = event_create_passthrough(script->event)-> add_str("error", storage->error)-> @@ -506,8 +511,7 @@ bool sieve_script_binary_dump_metadata(struct sieve_script *script, int sieve_script_binary_load_default(struct sieve_script *script, const char *path, - struct sieve_binary **sbin_r, - enum sieve_error *error_code_r) + struct sieve_binary **sbin_r) { struct sieve_instance *svinst = script->storage->svinst; enum sieve_error error_code; @@ -516,14 +520,12 @@ int sieve_script_binary_load_default(struct sieve_script *script, sieve_script_set_error( script, SIEVE_ERROR_NOT_POSSIBLE, "Cannot load script binary for this storage"); - *error_code_r = script->storage->error_code; return -1; } if (sieve_binary_open(svinst, path, script, sbin_r, &error_code) < 0) { sieve_script_set_error(script, error_code, "Failed to load script binary"); - *error_code_r = script->storage->error_code; return -1; } return 0; @@ -541,21 +543,27 @@ int sieve_script_binary_load(struct sieve_script *script, sieve_storage_clear_error(storage); if (script->v.binary_load == NULL) { - *error_code_r = SIEVE_ERROR_NOT_POSSIBLE; - return -1; + sieve_script_set_error( + script, SIEVE_ERROR_NOT_POSSIBLE, + "Cannot load script binary for this storage type"); + ret = -1; + } else { + ret = script->v.binary_load(script, sbin_r); + i_assert(ret <= 0); + i_assert(ret < 0 || *sbin_r != NULL); } - ret = script->v.binary_load(script, sbin_r, error_code_r); - i_assert(ret <= 0); - i_assert(ret < 0 || *sbin_r != NULL); - return ret; + if (ret < 0) { + *error_code_r = script->storage->error_code; + return -1; + } + return 0; } int sieve_script_binary_save_default(struct sieve_script *script ATTR_UNUSED, struct sieve_binary *sbin, const char *path, bool update, - mode_t save_mode, - enum sieve_error *error_code_r) + mode_t save_mode) { struct sieve_storage *storage = script->storage; enum sieve_error error_code; @@ -565,23 +573,19 @@ int sieve_script_binary_save_default(struct sieve_script *script ATTR_UNUSED, sieve_script_set_error( script, SIEVE_ERROR_NOT_POSSIBLE, "Cannot save script binary for this storage"); - *error_code_r = script->storage->error_code; return -1; } if (storage->bin_path != NULL && str_begins_with(path, storage->bin_path) && sieve_storage_setup_bin_path( - script->storage, mkdir_get_executable_mode(save_mode)) < 0) { - *error_code_r = script->storage->error_code; + script->storage, mkdir_get_executable_mode(save_mode)) < 0) return -1; - } ret = sieve_binary_save(sbin, path, update, save_mode, &error_code); if (ret < 0) { sieve_script_set_error(script, error_code, "Failed to save script binary"); - *error_code_r = script->storage->error_code; return -1; } return 0; @@ -593,6 +597,7 @@ int sieve_script_binary_save(struct sieve_script *script, { struct sieve_storage *storage = script->storage; struct sieve_script *bin_script = sieve_binary_script(sbin); + int ret; sieve_error_args_init(&error_code_r, NULL); sieve_storage_clear_error(storage); @@ -600,11 +605,19 @@ int sieve_script_binary_save(struct sieve_script *script, i_assert(bin_script == NULL || sieve_script_equals(bin_script, script)); if (script->v.binary_save == NULL) { - *error_code_r = SIEVE_ERROR_NOT_POSSIBLE; - return -1; + sieve_script_set_error( + script, SIEVE_ERROR_NOT_POSSIBLE, + "Cannot save script binary for this storage type"); + ret = -1; + } else { + ret = script->v.binary_save(script, sbin, update); } - return script->v.binary_save(script, sbin, update, error_code_r); + if (ret < 0) { + *error_code_r = script->storage->error_code; + return -1; + } + return 0; } const char *sieve_script_binary_get_prefix(struct sieve_script *script) @@ -952,7 +965,8 @@ int sieve_script_sequence_create(struct sieve_instance *svinst, sseq->storage = storage; i_assert(storage->v.script_sequence_init != NULL); - ret = storage->v.script_sequence_init(sseq, error_code_r); + ret = storage->v.script_sequence_init(sseq); + *error_code_r = storage->error_code; *sseq_r = sseq; return ret; @@ -963,13 +977,16 @@ int sieve_script_sequence_next(struct sieve_script_sequence *sseq, enum sieve_error *error_code_r) { struct sieve_storage *storage = sseq->storage; + int ret; *script_r = NULL; sieve_error_args_init(&error_code_r, NULL); sieve_storage_clear_error(storage); i_assert(storage->v.script_sequence_next != NULL); - return storage->v.script_sequence_next(sseq, script_r, error_code_r); + ret = storage->v.script_sequence_next(sseq, script_r); + *error_code_r = storage->error_code; + return ret; } void sieve_script_sequence_free(struct sieve_script_sequence **_sseq) diff --git a/src/lib-sieve/sieve-storage-private.h b/src/lib-sieve/sieve-storage-private.h index 81bd130b8..695b0f9bd 100644 --- a/src/lib-sieve/sieve-storage-private.h +++ b/src/lib-sieve/sieve-storage-private.h @@ -37,11 +37,9 @@ struct sieve_storage_vfuncs { struct sieve_script **script_r); /* script sequence */ - int (*script_sequence_init)(struct sieve_script_sequence *sseq, - enum sieve_error *error_code_r); + int (*script_sequence_init)(struct sieve_script_sequence *sseq); int (*script_sequence_next)(struct sieve_script_sequence *sseq, - struct sieve_script **script_r, - enum sieve_error *error_code_r); + struct sieve_script **script_r); void (*script_sequence_destroy)(struct sieve_script_sequence *sseq); /* active script */ diff --git a/src/lib-sieve/storage/data/sieve-data-script.c b/src/lib-sieve/storage/data/sieve-data-script.c index 3bc6774cd..1162b38f1 100644 --- a/src/lib-sieve/storage/data/sieve-data-script.c +++ b/src/lib-sieve/storage/data/sieve-data-script.c @@ -66,8 +66,7 @@ static void sieve_data_script_destroy(struct sieve_script *script) static int sieve_data_script_get_stream(struct sieve_script *script, - struct istream **stream_r, - enum sieve_error *error_code_r) + struct istream **stream_r) { struct sieve_data_script *dscript = container_of(script, struct sieve_data_script, script); @@ -76,7 +75,6 @@ sieve_data_script_get_stream(struct sieve_script *script, i_stream_seek(dscript->data, 0); *stream_r = dscript->data; - *error_code_r = SIEVE_ERROR_NONE; return 0; } diff --git a/src/lib-sieve/storage/dict/sieve-dict-script.c b/src/lib-sieve/storage/dict/sieve-dict-script.c index dcd062487..4448c003f 100644 --- a/src/lib-sieve/storage/dict/sieve-dict-script.c +++ b/src/lib-sieve/storage/dict/sieve-dict-script.c @@ -61,9 +61,7 @@ static void sieve_dict_script_destroy(struct sieve_script *script) pool_unref(&dscript->data_pool); } -static int -sieve_dict_script_open(struct sieve_script *script, - enum sieve_error *error_code_r) +static int sieve_dict_script_open(struct sieve_script *script) { struct sieve_storage *storage = script->storage; struct sieve_instance *svinst = storage->svinst; @@ -75,8 +73,7 @@ sieve_dict_script_open(struct sieve_script *script, const char *path, *data_id, *error; int ret; - if (sieve_dict_storage_get_dict(dstorage, &dscript->dict, - error_code_r) < 0) + if (sieve_dict_storage_get_dict(dstorage, &dscript->dict) < 0) return -1; path = t_strconcat(DICT_SIEVE_NAME_PATH, @@ -92,14 +89,10 @@ sieve_dict_script_open(struct sieve_script *script, sieve_script_set_critical(script, "Failed to lookup script id from path %s: %s", path, error); - *error_code_r = SIEVE_ERROR_TEMP_FAILURE; } else { e_debug(script->event, "Script '%s' not found at path %s", name, path); - sieve_script_set_error(script, SIEVE_ERROR_NOT_FOUND, - "Sieve script '%s' not found", - name); - *error_code_r = SIEVE_ERROR_NOT_FOUND; + sieve_script_set_not_found_error(script, name); } return -1; } @@ -110,8 +103,7 @@ sieve_dict_script_open(struct sieve_script *script, static int sieve_dict_script_get_stream(struct sieve_script *script, - struct istream **stream_r, - enum sieve_error *error_code_r) + struct istream **stream_r) { struct sieve_storage *storage = script->storage; struct sieve_instance *svinst = storage->svinst; @@ -142,7 +134,6 @@ sieve_dict_script_get_stream(struct sieve_script *script, "Data with id '%s' for script '%s' not found at path %s", dscript->data_id, name, path); } - *error_code_r = SIEVE_ERROR_TEMP_FAILURE; return -1; } @@ -226,28 +217,25 @@ sieve_dict_script_get_bin_path(struct sieve_dict_script *dscript) static int sieve_dict_script_binary_load(struct sieve_script *script, - struct sieve_binary **sbin_r, - enum sieve_error *error_code_r) + struct sieve_binary **sbin_r) { struct sieve_dict_script *dscript = container_of(script, struct sieve_dict_script, script); return sieve_script_binary_load_default( - script, sieve_dict_script_get_bin_path(dscript), - sbin_r, error_code_r); + script, sieve_dict_script_get_bin_path(dscript), sbin_r); } static int sieve_dict_script_binary_save(struct sieve_script *script, - struct sieve_binary *sbin, bool update, - enum sieve_error *error_code_r) + struct sieve_binary *sbin, bool update) { struct sieve_dict_script *dscript = container_of(script, struct sieve_dict_script, script); return sieve_script_binary_save_default( script, sbin, sieve_dict_script_get_bin_path(dscript), - update, 0600, error_code_r); + update, 0600); } static int @@ -297,8 +285,7 @@ struct sieve_dict_script_sequence { bool done:1; }; -int sieve_dict_script_sequence_init(struct sieve_script_sequence *sseq, - enum sieve_error *error_code_r ATTR_UNUSED) +int sieve_dict_script_sequence_init(struct sieve_script_sequence *sseq) { struct sieve_dict_script_sequence *dseq; @@ -310,8 +297,7 @@ int sieve_dict_script_sequence_init(struct sieve_script_sequence *sseq, } int sieve_dict_script_sequence_next(struct sieve_script_sequence *sseq, - struct sieve_script **script_r, - enum sieve_error *error_code_r) + struct sieve_script **script_r) { struct sieve_dict_script_sequence *dseq = sseq->storage_data; struct sieve_storage *storage = sseq->storage; @@ -324,7 +310,7 @@ int sieve_dict_script_sequence_next(struct sieve_script_sequence *sseq, dseq->done = TRUE; dscript = sieve_dict_script_init(dstorage, storage->script_name); - if (sieve_script_open(&dscript->script, error_code_r) < 0) { + if (sieve_script_open(&dscript->script, NULL) < 0) { struct sieve_script *script = &dscript->script; sieve_script_unref(&script); diff --git a/src/lib-sieve/storage/dict/sieve-dict-storage.c b/src/lib-sieve/storage/dict/sieve-dict-storage.c index 2d65a6765..d94ebdd5a 100644 --- a/src/lib-sieve/storage/dict/sieve-dict-storage.c +++ b/src/lib-sieve/storage/dict/sieve-dict-storage.c @@ -73,10 +73,8 @@ sieve_dict_storage_init(struct sieve_storage *storage, return 0; } -int -sieve_dict_storage_get_dict(struct sieve_dict_storage *dstorage, - struct dict **dict_r, - enum sieve_error *error_code_r) +int sieve_dict_storage_get_dict(struct sieve_dict_storage *dstorage, + struct dict **dict_r) { struct sieve_storage *storage = &dstorage->storage; struct sieve_instance *svinst = storage->svinst; @@ -93,7 +91,6 @@ sieve_dict_storage_get_dict(struct sieve_dict_storage *dstorage, sieve_storage_set_critical(storage, "Failed to initialize dict with data '%s' for user '%s': %s", dstorage->uri, svinst->username, error); - *error_code_r = SIEVE_ERROR_TEMP_FAILURE; return -1; } } diff --git a/src/lib-sieve/storage/dict/sieve-dict-storage.h b/src/lib-sieve/storage/dict/sieve-dict-storage.h index be5f269f2..b53edf441 100644 --- a/src/lib-sieve/storage/dict/sieve-dict-storage.h +++ b/src/lib-sieve/storage/dict/sieve-dict-storage.h @@ -24,8 +24,7 @@ struct sieve_dict_storage { }; int sieve_dict_storage_get_dict(struct sieve_dict_storage *dstorage, - struct dict **dict_r, - enum sieve_error *error_code_r); + struct dict **dict_r); int sieve_dict_storage_active_script_get_name(struct sieve_storage *storage, const char **name_r); @@ -53,11 +52,9 @@ sieve_dict_script_init(struct sieve_dict_storage *dstorage, const char *name); * Script sequence */ -int sieve_dict_script_sequence_init(struct sieve_script_sequence *sseq, - enum sieve_error *error_code_r); +int sieve_dict_script_sequence_init(struct sieve_script_sequence *sseq); int sieve_dict_script_sequence_next(struct sieve_script_sequence *sseq, - struct sieve_script **script_r, - enum sieve_error *error_code_r); + struct sieve_script **script_r); void sieve_dict_script_sequence_destroy(struct sieve_script_sequence *sseq); #endif diff --git a/src/lib-sieve/storage/file/sieve-file-script-sequence.c b/src/lib-sieve/storage/file/sieve-file-script-sequence.c index fba7f7ba1..b6fe1745d 100644 --- a/src/lib-sieve/storage/file/sieve-file-script-sequence.c +++ b/src/lib-sieve/storage/file/sieve-file-script-sequence.c @@ -123,8 +123,7 @@ sieve_file_script_sequence_read_dir(struct sieve_script_sequence *sseq, return ret; } -int sieve_file_script_sequence_init(struct sieve_script_sequence *sseq, - enum sieve_error *error_code_r) +int sieve_file_script_sequence_init(struct sieve_script_sequence *sseq) { struct sieve_storage *storage = sseq->storage; struct sieve_file_storage *fstorage = @@ -157,7 +156,6 @@ int sieve_file_script_sequence_init(struct sieve_script_sequence *sseq, "stat(%s) failed: %m", fstorage->path); break; } - *error_code_r = storage->error_code; return -1; } @@ -175,7 +173,6 @@ int sieve_file_script_sequence_init(struct sieve_script_sequence *sseq, /* Read all '.sieve' files in directory */ if (sieve_file_script_sequence_read_dir( sseq, fseq, fstorage->path) < 0) { - *error_code_r = storage->error_code; pool_unref(&fseq->pool); return -1; } @@ -197,8 +194,7 @@ int sieve_file_script_sequence_init(struct sieve_script_sequence *sseq, } int sieve_file_script_sequence_next(struct sieve_script_sequence *sseq, - struct sieve_script **script_r, - enum sieve_error *error_code_r) + struct sieve_script **script_r) { struct sieve_file_script_sequence *fseq = sseq->storage_data; struct sieve_storage *storage = sseq->storage; @@ -240,7 +236,6 @@ int sieve_file_script_sequence_next(struct sieve_script_sequence *sseq, if (ret < 0) { if (storage->error_code == SIEVE_ERROR_NOT_FOUND) return 0; - *error_code_r = storage->error_code; return -1; } *script_r = &fscript->script; diff --git a/src/lib-sieve/storage/file/sieve-file-script.c b/src/lib-sieve/storage/file/sieve-file-script.c index a416fbe79..babe5b419 100644 --- a/src/lib-sieve/storage/file/sieve-file-script.c +++ b/src/lib-sieve/storage/file/sieve-file-script.c @@ -53,8 +53,7 @@ const char *sieve_script_file_from_name(const char *name) static void sieve_file_script_handle_error(struct sieve_file_script *fscript, const char *op, const char *path, - const char *name, - enum sieve_error *error_code_r) + const char *name) { struct sieve_script *script = &fscript->script; const char *abspath, *error; @@ -62,28 +61,24 @@ sieve_file_script_handle_error(struct sieve_file_script *fscript, switch (errno) { case ENOENT: if (t_abspath(path, &abspath, &error) < 0) { - sieve_script_set_error(script, SIEVE_ERROR_TEMP_FAILURE, - "t_abspath(%s) failed: %s", - path, error); - *error_code_r = SIEVE_ERROR_TEMP_FAILURE; + sieve_script_set_critical(script, + "t_abspath(%s) failed: %s", + path, error); break; } e_debug(script->event, "File '%s' not found", abspath); - sieve_script_set_error(script, SIEVE_ERROR_NOT_FOUND, - "Sieve script '%s' not found", name); - *error_code_r = SIEVE_ERROR_NOT_FOUND; + sieve_script_set_not_found_error(script, name); break; case EACCES: sieve_script_set_critical(script, "Failed to %s sieve script: %s", op, eacces_error_get(op, path)); - *error_code_r = SIEVE_ERROR_NO_PERMISSION; + script->storage->error_code = SIEVE_ERROR_NO_PERMISSION; break; default: sieve_script_set_critical( script, "Failed to %s sieve script: %s(%s) failed: %m", op, op, path); - *error_code_r = SIEVE_ERROR_TEMP_FAILURE; break; } } @@ -294,9 +289,7 @@ path_split_filename(const char *path, const char **dir_path_r) return filename; } -static int -sieve_file_script_open(struct sieve_script *script, - enum sieve_error *error_code_r) +static int sieve_file_script_open(struct sieve_script *script) { struct sieve_file_script *fscript = container_of(script, struct sieve_file_script, script); @@ -333,7 +326,6 @@ sieve_file_script_open(struct sieve_script *script, if (filename == NULL || *filename == '\0') { sieve_script_set_critical( script, "Sieve script file path '%s' is a directory.", path); - *error_code_r = SIEVE_ERROR_TEMP_FAILURE; success = FALSE; } else { /* Extend storage path with filename */ @@ -374,16 +366,14 @@ sieve_file_script_open(struct sieve_script *script, i_assert(basename != NULL); name = basename; } - sieve_file_script_handle_error( - fscript, "stat", path, name, - error_code_r); + sieve_file_script_handle_error(fscript, "stat", + path, name); success = FALSE; } else if (!S_ISREG(st.st_mode)) { sieve_script_set_critical( script, "Sieve script file '%s' is not a regular file.", path); - *error_code_r = SIEVE_ERROR_TEMP_FAILURE; success = FALSE; } } @@ -433,8 +423,7 @@ sieve_file_script_open(struct sieve_script *script, static int sieve_file_script_get_stream(struct sieve_script *script, - struct istream **stream_r, - enum sieve_error *error_code_r) + struct istream **stream_r) { struct sieve_file_script *fscript = container_of(script, struct sieve_file_script, script); @@ -445,8 +434,7 @@ sieve_file_script_get_stream(struct sieve_script *script, fd = open(fscript->path, O_RDONLY); if (fd < 0) { sieve_file_script_handle_error(fscript, "open", fscript->path, - fscript->script.name, - error_code_r); + fscript->script.name); return -1; } @@ -455,14 +443,12 @@ sieve_file_script_get_stream(struct sieve_script *script, script, "Failed to open sieve script: fstat(fd=%s) failed: %m", fscript->path); - *error_code_r = SIEVE_ERROR_TEMP_FAILURE; result = NULL; /* Re-check the file type just to be sure */ } else if (!S_ISREG(st.st_mode)) { sieve_script_set_critical( script, "Sieve script file '%s' is not a regular file", fscript->path); - *error_code_r = SIEVE_ERROR_TEMP_FAILURE; result = NULL; } else { result = i_stream_create_fd_autoclose( @@ -532,27 +518,25 @@ sieve_file_script_binary_read_metadata(struct sieve_script *script, static int sieve_file_script_binary_load(struct sieve_script *script, - struct sieve_binary **sbin_r, - enum sieve_error *error_code_r) + struct sieve_binary **sbin_r) { struct sieve_file_script *fscript = container_of(script, struct sieve_file_script, script); return sieve_script_binary_load_default(script, fscript->bin_path, - sbin_r, error_code_r); + sbin_r); } static int sieve_file_script_binary_save(struct sieve_script *script, - struct sieve_binary *sbin, bool update, - enum sieve_error *error_code_r) + struct sieve_binary *sbin, bool update) { struct sieve_file_script *fscript = container_of(script, struct sieve_file_script, script); return sieve_script_binary_save_default( script, sbin, fscript->bin_path, update, - (fscript->st.st_mode & 0777), error_code_r); + (fscript->st.st_mode & 0777)); } static const char * diff --git a/src/lib-sieve/storage/file/sieve-file-storage.h b/src/lib-sieve/storage/file/sieve-file-storage.h index da614455d..eac2d98f1 100644 --- a/src/lib-sieve/storage/file/sieve-file-storage.h +++ b/src/lib-sieve/storage/file/sieve-file-storage.h @@ -172,11 +172,9 @@ const char *sieve_file_script_get_path(const struct sieve_script *script); * Script sequence */ -int sieve_file_script_sequence_init(struct sieve_script_sequence *sseq, - enum sieve_error *error_code_r); +int sieve_file_script_sequence_init(struct sieve_script_sequence *sseq); int sieve_file_script_sequence_next(struct sieve_script_sequence *sseq, - struct sieve_script **script_r, - enum sieve_error *error_code_r); + struct sieve_script **script_r); void sieve_file_script_sequence_destroy(struct sieve_script_sequence *sseq); #endif diff --git a/src/lib-sieve/storage/ldap/sieve-ldap-script.c b/src/lib-sieve/storage/ldap/sieve-ldap-script.c index 3f416daa5..374b8d0db 100644 --- a/src/lib-sieve/storage/ldap/sieve-ldap-script.c +++ b/src/lib-sieve/storage/ldap/sieve-ldap-script.c @@ -54,8 +54,7 @@ sieve_ldap_script_init(struct sieve_ldap_storage *lstorage, const char *name) } static int -sieve_ldap_script_open(struct sieve_script *script, - enum sieve_error *error_code_r) +sieve_ldap_script_open(struct sieve_script *script) { struct sieve_ldap_script *lscript = container_of(script, struct sieve_ldap_script, script); @@ -67,7 +66,6 @@ sieve_ldap_script_open(struct sieve_script *script, if (sieve_ldap_db_connect(lstorage->conn) < 0) { sieve_storage_set_critical( storage, "Failed to connect to LDAP database"); - *error_code_r = storage->error_code; return -1; } @@ -76,12 +74,10 @@ sieve_ldap_script_open(struct sieve_script *script, if (ret <= 0) { if (ret == 0) { e_debug(script->event, "Script entry not found"); - sieve_script_set_error(script, SIEVE_ERROR_NOT_FOUND, - "Sieve script not found"); + sieve_script_set_not_found_error(script, NULL); } else { sieve_script_set_internal_error(script); } - *error_code_r = script->storage->error_code; return -1; } @@ -90,8 +86,7 @@ sieve_ldap_script_open(struct sieve_script *script, static int sieve_ldap_script_get_stream(struct sieve_script *script, - struct istream **stream_r, - enum sieve_error *error_code_r) + struct istream **stream_r) { struct sieve_ldap_script *lscript = container_of(script, struct sieve_ldap_script, script); @@ -106,12 +101,10 @@ sieve_ldap_script_get_stream(struct sieve_script *script, if (ret <= 0) { if (ret == 0) { e_debug(script->event, "Script attribute not found"); - sieve_script_set_error(script, SIEVE_ERROR_NOT_FOUND, - "Sieve script not found"); + sieve_script_set_not_found_error(script, NULL); } else { sieve_script_set_internal_error(script); } - *error_code_r = script->storage->error_code; return -1; } return 0; @@ -248,28 +241,25 @@ sieve_ldap_script_get_bin_path(struct sieve_ldap_script *lscript) static int sieve_ldap_script_binary_load(struct sieve_script *script, - struct sieve_binary **sbin_r, - enum sieve_error *error_code_r) + struct sieve_binary **sbin_r) { struct sieve_ldap_script *lscript = container_of(script, struct sieve_ldap_script, script); return sieve_script_binary_load_default( - script, sieve_ldap_script_get_bin_path(lscript), - sbin_r, error_code_r); + script, sieve_ldap_script_get_bin_path(lscript), sbin_r); } static int sieve_ldap_script_binary_save(struct sieve_script *script, - struct sieve_binary *sbin, bool update, - enum sieve_error *error_code_r) + struct sieve_binary *sbin, bool update) { struct sieve_ldap_script *lscript = container_of(script, struct sieve_ldap_script, script); return sieve_script_binary_save_default( script, sbin, sieve_ldap_script_get_bin_path(lscript), - update, 0600, error_code_r); + update, 0600); } static int @@ -312,8 +302,7 @@ struct sieve_ldap_script_sequence { bool done:1; }; -int sieve_ldap_script_sequence_init(struct sieve_script_sequence *sseq, - enum sieve_error *error_code_r ATTR_UNUSED) +int sieve_ldap_script_sequence_init(struct sieve_script_sequence *sseq) { struct sieve_ldap_script_sequence *lseq = NULL; @@ -325,8 +314,7 @@ int sieve_ldap_script_sequence_init(struct sieve_script_sequence *sseq, } int sieve_ldap_script_sequence_next(struct sieve_script_sequence *sseq, - struct sieve_script **script_r, - enum sieve_error *error_code_r) + struct sieve_script **script_r) { struct sieve_ldap_script_sequence *lseq = sseq->storage_data; struct sieve_storage *storage = sseq->storage; @@ -339,7 +327,7 @@ int sieve_ldap_script_sequence_next(struct sieve_script_sequence *sseq, lseq->done = TRUE; lscript = sieve_ldap_script_init(lstorage, storage->script_name); - if (sieve_script_open(&lscript->script, error_code_r) < 0) { + if (sieve_script_open(&lscript->script, NULL) < 0) { struct sieve_script *script = &lscript->script; sieve_script_unref(&script); diff --git a/src/lib-sieve/storage/ldap/sieve-ldap-storage.h b/src/lib-sieve/storage/ldap/sieve-ldap-storage.h index a05513146..703805628 100644 --- a/src/lib-sieve/storage/ldap/sieve-ldap-storage.h +++ b/src/lib-sieve/storage/ldap/sieve-ldap-storage.h @@ -59,11 +59,9 @@ sieve_ldap_script_init(struct sieve_ldap_storage *lstorage, const char *name); * Script sequence */ -int sieve_ldap_script_sequence_init(struct sieve_script_sequence *sseq, - enum sieve_error *error_code_r); +int sieve_ldap_script_sequence_init(struct sieve_script_sequence *sseq); int sieve_ldap_script_sequence_next(struct sieve_script_sequence *sseq, - struct sieve_script **script_r, - enum sieve_error *error_code_r); + struct sieve_script **script_r); void sieve_ldap_script_sequence_destroy(struct sieve_script_sequence *sseq); #endif -- GitLab