From bcbfec5764cbe92f3cb84d26160f02de5d224810 Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan.bosch@open-xchange.com> Date: Mon, 7 Oct 2024 12:41:38 +0200 Subject: [PATCH] lib-sieve: sieve - Add sieve_error_create_internal() and use it --- src/lib-sieve/sieve-common.h | 7 +++++++ src/lib-sieve/sieve-storage.c | 20 +++----------------- src/lib-sieve/sieve.c | 26 ++++++++++++++++++++++++++ 3 files changed, 36 insertions(+), 17 deletions(-) diff --git a/src/lib-sieve/sieve-common.h b/src/lib-sieve/sieve-common.h index 6d1c78ad5..53ccffbd1 100644 --- a/src/lib-sieve/sieve-common.h +++ b/src/lib-sieve/sieve-common.h @@ -206,6 +206,13 @@ struct sieve_instance { const struct smtp_address *user_email_implicit; }; +/* + * Errors + */ + +void sieve_error_create_internal(enum sieve_error *error_code_r, + const char **error_r); + /* * Script trace log */ diff --git a/src/lib-sieve/sieve-storage.c b/src/lib-sieve/sieve-storage.c index ca92b431d..c8be0c32b 100644 --- a/src/lib-sieve/sieve-storage.c +++ b/src/lib-sieve/sieve-storage.c @@ -22,10 +22,6 @@ #include <time.h> #include <utime.h> -#define CRITICAL_MSG \ - "Internal error occurred. Refer to server log for more information." -#define CRITICAL_MSG_STAMP CRITICAL_MSG " [%Y-%m-%d %H:%M:%S]" - struct event_category event_category_sieve_storage = { .parent = &event_category_sieve, .name = "sieve-storage", @@ -1544,21 +1540,11 @@ void sieve_storage_copy_error(struct sieve_storage *storage, void sieve_storage_set_internal_error(struct sieve_storage *storage) { - struct tm *tm; - char str[256]; + const char *error; sieve_storage_clear_error(storage); - - /* critical errors may contain sensitive data, so let user - see only "Internal error" with a timestamp to make it - easier to look from log files the actual error message. */ - tm = localtime(&ioloop_time); - - storage->error = - (strftime(str, sizeof(str), CRITICAL_MSG_STAMP, tm) > 0 ? - i_strdup(str) : i_strdup(CRITICAL_MSG)); - - storage->error_code = SIEVE_ERROR_TEMP_FAILURE; + sieve_error_create_internal(&storage->error_code, &error); + storage->error = i_strdup(error); } void sieve_storage_set_critical(struct sieve_storage *storage, diff --git a/src/lib-sieve/sieve.c b/src/lib-sieve/sieve.c index f3625c1b7..fd74d1929 100644 --- a/src/lib-sieve/sieve.c +++ b/src/lib-sieve/sieve.c @@ -1011,6 +1011,32 @@ size_t sieve_max_script_size(struct sieve_instance *svinst) return svinst->set->max_script_size; } +/* + * Errors + */ + +#define CRITICAL_MSG \ + "Internal error occurred. Refer to server log for more information." +#define CRITICAL_MSG_STAMP CRITICAL_MSG " [%Y-%m-%d %H:%M:%S]" + +void sieve_error_create_internal(enum sieve_error *error_code_r, + const char **error_r) +{ + struct tm *tm; + char buf[256]; + + /* Critical errors may contain sensitive data, so let user see only + "Internal error" with a timestamp to make it easier to look from log + files the actual error message. */ + tm = localtime(&ioloop_time); + + if (strftime(buf, sizeof(buf), CRITICAL_MSG_STAMP, tm) > 0) + *error_r = t_strdup(buf); + else + *error_r = CRITICAL_MSG; + *error_code_r = SIEVE_ERROR_TEMP_FAILURE; +} + /* * User log */ -- GitLab