From 18ad56ff6ab65ec235e8fb93af36d73c32a2d252 Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan.bosch@open-xchange.com> Date: Tue, 27 Aug 2024 19:47:13 +0200 Subject: [PATCH] lib-sieve: enotify extension: mailto method: Migrate settings to new config structure --- .../plugins/enotify/mailto/Makefile.am | 6 +- .../enotify/mailto/ntfy-mailto-settings.c | 58 +++++++++++++++++++ .../enotify/mailto/ntfy-mailto-settings.h | 18 ++++++ .../plugins/enotify/mailto/ntfy-mailto.c | 31 +++++----- 4 files changed, 97 insertions(+), 16 deletions(-) create mode 100644 src/lib-sieve/plugins/enotify/mailto/ntfy-mailto-settings.c create mode 100644 src/lib-sieve/plugins/enotify/mailto/ntfy-mailto-settings.h diff --git a/src/lib-sieve/plugins/enotify/mailto/Makefile.am b/src/lib-sieve/plugins/enotify/mailto/Makefile.am index 83f129c62..f19a689a6 100644 --- a/src/lib-sieve/plugins/enotify/mailto/Makefile.am +++ b/src/lib-sieve/plugins/enotify/mailto/Makefile.am @@ -8,9 +8,9 @@ AM_CPPFLAGS = \ libsieve_ext_enotify_mailto_la_SOURCES = \ uri-mailto.c \ + ntfy-mailto-settings.c \ ntfy-mailto.c noinst_HEADERS = \ - uri-mailto.h - - + uri-mailto.h \ + ntfy-mailto-settings.h diff --git a/src/lib-sieve/plugins/enotify/mailto/ntfy-mailto-settings.c b/src/lib-sieve/plugins/enotify/mailto/ntfy-mailto-settings.c new file mode 100644 index 000000000..677b4020e --- /dev/null +++ b/src/lib-sieve/plugins/enotify/mailto/ntfy-mailto-settings.c @@ -0,0 +1,58 @@ +/* Copyright (c) 2024 Pigeonhole authors, see the included COPYING file + */ + +#include "lib.h" +#include "array.h" +#include "settings.h" +#include "settings-parser.h" + +#include "ntfy-mailto-settings.h" + +static bool +ntfy_mailto_settings_check(void *_set, pool_t pool, const char **error_r); + +#undef DEF +#define DEF(type, name) \ + SETTING_DEFINE_STRUCT_##type("sieve_notify_mailto_"#name, name, \ + struct ntfy_mailto_settings) + +static const struct setting_define ntfy_mailto_setting_defines[] = { + DEF(STR, envelope_from), + + SETTING_DEFINE_LIST_END, +}; + +static const struct ntfy_mailto_settings ntfy_mailto_default_settings = { + .envelope_from = "", +}; + +const struct setting_parser_info ntfy_mailto_setting_parser_info = { + .name = "sieve_notify_mailto", + + .defines = ntfy_mailto_setting_defines, + .defaults = &ntfy_mailto_default_settings, + + .struct_size = sizeof(struct ntfy_mailto_settings), + + .check_func = ntfy_mailto_settings_check, + + .pool_offset1 = 1 + offsetof(struct ntfy_mailto_settings, pool), +}; + +/* <settings checks> */ +static bool +ntfy_mailto_settings_check(void *_set, pool_t pool, const char **error_r) +{ + struct ntfy_mailto_settings *set = _set; + + if (!sieve_address_source_parse(pool, set->envelope_from, + &set->parsed.envelope_from)) { + *error_r = t_strdup_printf("sieve_notify_mailto_envelope_from: " + "Invalid address source '%s'", + set->envelope_from); + return FALSE; + } + + return TRUE; +} +/* </settings checks> */ diff --git a/src/lib-sieve/plugins/enotify/mailto/ntfy-mailto-settings.h b/src/lib-sieve/plugins/enotify/mailto/ntfy-mailto-settings.h new file mode 100644 index 000000000..512ce1128 --- /dev/null +++ b/src/lib-sieve/plugins/enotify/mailto/ntfy-mailto-settings.h @@ -0,0 +1,18 @@ +#ifndef NTFY_MAILTO_SETTINGS_H +#define NTFY_MAILTO_SETTINGS_H + +#include "sieve-address-source.h" + +struct ntfy_mailto_settings { + pool_t pool; + + const char *envelope_from; + + struct { + struct sieve_address_source envelope_from; + } parsed; +}; + +extern const struct setting_parser_info ntfy_mailto_setting_parser_info; + +#endif diff --git a/src/lib-sieve/plugins/enotify/mailto/ntfy-mailto.c b/src/lib-sieve/plugins/enotify/mailto/ntfy-mailto.c index 5620e28de..dd71d0b02 100644 --- a/src/lib-sieve/plugins/enotify/mailto/ntfy-mailto.c +++ b/src/lib-sieve/plugins/enotify/mailto/ntfy-mailto.c @@ -24,6 +24,7 @@ #include "ioloop.h" #include "str-sanitize.h" #include "ostream.h" +#include "settings.h" #include "message-date.h" #include "mail-storage.h" @@ -33,13 +34,13 @@ #include "sieve-address-source.h" #include "sieve-message.h" #include "sieve-smtp.h" -#include "sieve-settings.old.h" #include "sieve-ext-enotify.h" #include "rfc2822.h" #include "uri-mailto.h" +#include "ntfy-mailto-settings.h" /* * Configuration @@ -53,7 +54,7 @@ */ static int -ntfy_mailto_load(const struct sieve_enotify_method *nmth, void **context); +ntfy_mailto_load(const struct sieve_enotify_method *nmth, void **context_r); static void ntfy_mailto_unload(const struct sieve_enotify_method *nmth); @@ -151,24 +152,25 @@ struct ntfy_mailto_action_context { */ struct ntfy_mailto_context { - pool_t pool; - struct sieve_address_source envelope_from; + const struct ntfy_mailto_settings *set; }; static int ntfy_mailto_load(const struct sieve_enotify_method *nmth, void **context_r) { struct sieve_instance *svinst = nmth->svinst; + const struct ntfy_mailto_settings *set; struct ntfy_mailto_context *mtctx; - pool_t pool; + const char *error; - pool = pool_alloconly_create("ntfy_mailto_context", 256); - mtctx = p_new(pool, struct ntfy_mailto_context, 1); - mtctx->pool = pool; + if (settings_get(svinst->event, &ntfy_mailto_setting_parser_info, 0, + &set, &error) < 0) { + e_error(svinst->event, "%s", error); + return -1; + } - (void)sieve_address_source_parse_from_setting( - svinst, mtctx->pool, "sieve_notify_mailto_envelope_from", - &mtctx->envelope_from); + mtctx = i_new(struct ntfy_mailto_context, 1); + mtctx->set = set; *context_r = mtctx; return 0; @@ -178,7 +180,10 @@ static void ntfy_mailto_unload(const struct sieve_enotify_method *nmth) { struct ntfy_mailto_context *mtctx = nmth->context; - pool_unref(&mtctx->pool); + if (mtctx == NULL) + return; + settings_free(mtctx->set); + i_free(mtctx); } /* @@ -516,7 +521,7 @@ ntfy_mailto_send(const struct sieve_enotify_exec_env *nenv, const struct sieve_script_env *senv = nenv->scriptenv; struct ntfy_mailto_action_context *mtactx = nact->method_context; struct ntfy_mailto_context *mtctx = nenv->method->context; - struct sieve_address_source env_from = mtctx->envelope_from; + struct sieve_address_source env_from = mtctx->set->parsed.envelope_from; const char *from = NULL; const struct smtp_address *from_smtp = NULL; const char *subject = mtactx->uri->subject; -- GitLab