]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
plugins/mail-lua: mail_lua_user_created() - Use dlua_script_create_auto()
authorMarkus Valentin <markus.valentin@open-xchange.com>
Thu, 14 Mar 2024 12:54:19 +0000 (13:54 +0100)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 12 Feb 2025 10:34:12 +0000 (12:34 +0200)
src/plugins/mail-lua/Makefile.am
src/plugins/mail-lua/mail-lua-plugin.c
src/plugins/mail-lua/mail-lua-settings.c [new file with mode: 0644]
src/plugins/mail-lua/mail-lua-settings.h [new file with mode: 0644]

index 1698cb424b0bb99a98edd3e645ec1ddbb985def2..2f4b9c76f74daba792628c98d9d292e6d0d084e1 100644 (file)
@@ -3,6 +3,7 @@ AM_CPPFLAGS = \
        -I$(top_srcdir)/src/lib-mail \
        -I$(top_srcdir)/src/lib-index \
        -I$(top_srcdir)/src/lib-storage \
+       -I$(top_srcdir)/src/lib-settings \
        -I$(top_srcdir)/src/lib-lua \
        $(LUA_CFLAGS)
 
@@ -16,11 +17,13 @@ lib01_mail_lua_plugin_la_LIBADD = \
        ../../lib-storage/libdovecot-storage-lua.la \
        $(LIBDOVECOT)
 lib01_mail_lua_plugin_la_SOURCES = \
-       mail-lua-plugin.c
+       mail-lua-plugin.c \
+       mail-lua-settings.c
 
 pkginc_libdir=$(pkgincludedir)
 pkginc_lib_HEADERS = \
-       mail-lua-plugin.h
+       mail-lua-plugin.h \
+       mail-lua-settings.h
 
 test_programs =
 
@@ -30,3 +33,5 @@ check-local:
        done
 
 noinst_PROGRAMS = $(test_programs)
+noinst_HEADERS = \
+       mail-lua-settings.h
index 47f374f753e52ded048a8e2abe694570822ddc1c..04c45fa895f2741a4c3c0eaa55b3a9059095bffe 100644 (file)
@@ -6,9 +6,10 @@
 #include "mail-storage-lua.h"
 #include "mail-storage-private.h"
 #include "mail-storage-hooks.h"
+#include "settings.h"
+#include "mail-lua-settings.h"
 #include "dlua-script-private.h"
 
-#define MAIL_LUA_SCRIPT "mail_lua_script"
 #define MAIL_LUA_USER_CREATED_FN "mail_user_created"
 #define MAIL_LUA_USER_DEINIT_FN "mail_user_deinit"
 #define MAIL_LUA_USER_DEINIT_PRE_FN "mail_user_deinit_pre"
@@ -96,25 +97,29 @@ static void mail_lua_user_created(struct mail_user *user)
        struct mail_user_vfuncs *v = user->vlast;
        struct dlua_script *script;
        const char *error;
-       const char *script_fn = mail_user_plugin_getenv(user, MAIL_LUA_SCRIPT);
+       struct event *event;
        int ret;
 
-       if (script_fn == NULL)
-               return;
-
-       if (dlua_script_create_file(script_fn, &script, user->event, &error) < 0) {
-               user->error = p_strdup_printf(user->pool, "dlua_script_create_file(%s) failed: %s",
-                                             script_fn, error);
+       event = event_create(user->event);
+       event_set_ptr(event, SETTINGS_EVENT_FILTER_NAME, MAIL_LUA_FILTER);
+       if ((ret = dlua_script_create_auto(event, &script, &error)) < 0) {
+               user->error = p_strdup_printf(user->pool,
+                                             "dlua_script_create_auto() failed: %s",
+                                             error);
+               event_unref(&event);
                return;
        }
-
+       event_unref(&event);
+       if (ret == 0)
+               return;
        dlua_dovecot_register(script);
        dlua_register_mail_storage(script);
 
        /* init */
        if (dlua_script_init(script, &error) < 0) {
-               user->error = p_strdup_printf(user->pool, "dlua_script_init(%s) failed: %s",
-                                             script_fn, error);
+               user->error = p_strdup_printf(user->pool,
+                                             "dlua_script_init(%s) failed: %s",
+                                             script->filename, error);
                dlua_script_unref(&script);
                return;
        }
diff --git a/src/plugins/mail-lua/mail-lua-settings.c b/src/plugins/mail-lua/mail-lua-settings.c
new file mode 100644 (file)
index 0000000..338627e
--- /dev/null
@@ -0,0 +1,24 @@
+/* Copyright (c) 2024 Dovecot authors, see the included COPYING file */
+
+#include "lib.h"
+#include "settings-parser.h"
+#include "mail-storage-settings.h"
+#include "mail-lua-settings.h"
+
+static const struct setting_define mail_lua_setting_defines[] = {
+       { .type = SET_FILTER_NAME, .key = MAIL_LUA_FILTER },
+       SETTING_DEFINE_LIST_END
+};
+
+static const struct mail_lua_settings mail_lua_default_settings = {
+};
+
+const struct setting_parser_info mail_lua_setting_parser_info = {
+       .name = "mail_lua",
+
+       .defines = mail_lua_setting_defines,
+       .defaults = &mail_lua_default_settings,
+
+       .struct_size = sizeof(struct mail_lua_settings),
+       .pool_offset1 = 1 + offsetof(struct mail_lua_settings, pool),
+};
diff --git a/src/plugins/mail-lua/mail-lua-settings.h b/src/plugins/mail-lua/mail-lua-settings.h
new file mode 100644 (file)
index 0000000..38c3a75
--- /dev/null
@@ -0,0 +1,14 @@
+#ifndef MAIL_LUA_SETTINGS_H
+#define MAIL_LUA_SETTINGS_H
+
+/* <settings checks> */
+#define MAIL_LUA_FILTER "mail_lua"
+/* </settings checks> */
+
+struct mail_lua_settings {
+       pool_t pool;
+};
+
+extern const struct setting_parser_info mail_lua_setting_parser_info;
+
+#endif