-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)
../../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 =
done
noinst_PROGRAMS = $(test_programs)
+noinst_HEADERS = \
+ mail-lua-settings.h
#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"
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;
}
--- /dev/null
+/* 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),
+};