dovecot-2.2-pigeonhole: doveadm sieve plugin: Fixed incorrect in...

pigeonhole at rename-it.nl pigeonhole at rename-it.nl
Sat Aug 29 10:53:34 UTC 2015


details:   http://hg.rename-it.nl/dovecot-2.2-pigeonhole/rev/a5743e2bfef6
changeset: 2090:a5743e2bfef6
user:      Stephan Bosch <stephan at rename-it.nl>
date:      Thu Aug 06 22:23:29 2015 +0200
description:
doveadm sieve plugin: Fixed incorrect initialization of mail user.

diffstat:

 src/plugins/doveadm-sieve/doveadm-sieve-sync.c |  33 +++++++++++++++++--------
 1 files changed, 22 insertions(+), 11 deletions(-)

diffs (78 lines):

diff -r 49ac5b0000fd -r a5743e2bfef6 src/plugins/doveadm-sieve/doveadm-sieve-sync.c
--- a/src/plugins/doveadm-sieve/doveadm-sieve-sync.c	Thu Aug 06 22:23:03 2015 +0200
+++ b/src/plugins/doveadm-sieve/doveadm-sieve-sync.c	Thu Aug 06 22:23:29 2015 +0200
@@ -60,9 +60,11 @@
 {
 	struct sieve_mail_user *suser = SIEVE_USER_CONTEXT(user);
 
-	if (suser->sieve_storage != NULL)
-		sieve_storage_unref(&suser->sieve_storage);
-	sieve_deinit(&suser->svinst);
+	if ( suser->svinst != NULL ) {
+		if (suser->sieve_storage != NULL)
+			sieve_storage_unref(&suser->sieve_storage);
+		sieve_deinit(&suser->svinst);
+	}
 
 	suser->module_ctx.super.deinit(user);
 }
@@ -75,10 +77,11 @@
 	enum sieve_storage_flags storage_flags =
 		SIEVE_STORAGE_FLAG_READWRITE |
 		SIEVE_STORAGE_FLAG_SYNCHRONIZING;
-	struct mail_user_vfuncs *v = user->vlast;
 	struct sieve_environment svenv;
 
-	if (suser != NULL) {
+	i_assert( suser != NULL );
+
+	if ( suser->svinst != NULL ) {
 		*svstorage_r = suser->sieve_storage;
 		return suser->sieve_storage != NULL ? 1 : 0;
 	}
@@ -90,17 +93,11 @@
 	svenv.base_dir = user->set->base_dir;
 	svenv.flags = SIEVE_FLAG_HOME_RELATIVE;
 
-	suser = p_new(user->pool, struct sieve_mail_user, 1);
-	suser->module_ctx.super = *v;
-	user->vlast = &suser->module_ctx.super;
-	v->deinit = mail_sieve_user_deinit;
-
 	suser->svinst = sieve_init(&svenv, &mail_sieve_callbacks,
 				   user, user->mail_debug);
 	suser->sieve_storage = sieve_storage_create_main
 			(suser->svinst, user, storage_flags, NULL);
 
-	MODULE_CONTEXT_SET(user, sieve_user_module, suser);
 	*svstorage_r = suser->sieve_storage;
 	return suser->sieve_storage != NULL ? 1 : 0;
 }
@@ -703,6 +700,19 @@
 }
 
 static void
+sieve_mail_user_created(struct mail_user *user)
+{
+	struct sieve_mail_user *suser;
+	struct mail_user_vfuncs *v = user->vlast;
+
+	suser = p_new(user->pool, struct sieve_mail_user, 1);
+	suser->module_ctx.super = *v;
+	user->vlast = &suser->module_ctx.super;
+	v->deinit = mail_sieve_user_deinit;
+	MODULE_CONTEXT_SET(user, sieve_user_module, suser);
+}
+
+static void
 sieve_mailbox_allocated(struct mailbox *box)
 {
 	struct mailbox_vfuncs *v = box->vlast;
@@ -724,6 +734,7 @@
 }
 
 static struct mail_storage_hooks doveadm_sieve_mail_storage_hooks = {
+	.mail_user_created = sieve_mail_user_created,
 	.mailbox_allocated = sieve_mailbox_allocated
 };
 


More information about the dovecot-cvs mailing list