]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
mail-lua: Add deinit_pre function
authorAki Tuomi <aki.tuomi@dovecot.fi>
Tue, 25 Sep 2018 09:24:02 +0000 (12:24 +0300)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Wed, 14 Nov 2018 12:01:53 +0000 (14:01 +0200)
src/plugins/mail-lua/mail-lua-plugin.c

index 8ed86881111ed9684db2350e1502232f6beadbd9..a555aa5966bdd7bb4b9de5b73c34dedbab67f8fa 100644 (file)
@@ -11,6 +11,7 @@
 #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"
 #define MAIL_LUA_USER_CONTEXT(obj) \
        MODULE_CONTEXT(obj, mail_lua_user_module)
 
@@ -57,6 +58,23 @@ static int mail_lua_call_hook(struct dlua_script *script,
        return ret < 0 ? -1 : 1;
 }
 
+static void mail_lua_user_deinit_pre(struct mail_user *user)
+{
+       struct mail_lua_user_context *luser = MAIL_LUA_USER_CONTEXT(user);
+       const char *error;
+       int ret;
+
+       if (luser == NULL)
+               return;
+
+       if ((ret = mail_lua_call_hook(luser->script, user, MAIL_LUA_USER_DEINIT_PRE_FN,
+                                     &error)) < 0) {
+               e_error(user->event, "mail-lua: %s", error);
+       }
+
+       luser->module_ctx.super.deinit_pre(user);
+}
+
 static void mail_lua_user_deinit(struct mail_user *user)
 {
        struct mail_lua_user_context *luser = MAIL_LUA_USER_CONTEXT(user);
@@ -116,6 +134,7 @@ static void mail_lua_user_created(struct mail_user *user)
 
        luser = p_new(user->pool, struct mail_lua_user_context, 1);
        luser->module_ctx.super = *v;
+       v->deinit_pre = mail_lua_user_deinit_pre;
        v->deinit = mail_lua_user_deinit;
        luser->script = script;
        user->vlast = &luser->module_ctx.super;