dovecot-2.2-pigeonhole: doveadm-sieve: Fixed problem with synchr...

pigeonhole at rename-it.nl pigeonhole at rename-it.nl
Mon Oct 27 20:58:31 UTC 2014


details:   http://hg.rename-it.nl/dovecot-2.2-pigeonhole/rev/79d66ccc9bfc
changeset: 1938:79d66ccc9bfc
user:      Stephan Bosch <stephan at rename-it.nl>
date:      Mon Oct 27 21:58:13 2014 +0100
description:
doveadm-sieve: Fixed problem with synchronizing the active script.

diffstat:

 src/lib-sieve/sieve-script.c                     |   8 ++++-
 src/lib-sieve/sieve-storage-private.h            |   6 ++++
 src/lib-sieve/sieve-storage-sync.c               |  30 ++++++++++++++++++++++++
 src/lib-sieve/sieve-storage.c                    |   7 ++++-
 src/plugins/doveadm-sieve/doveadm-sieve-plugin.c |   2 +-
 5 files changed, 48 insertions(+), 5 deletions(-)

diffs (105 lines):

diff -r 79988ab8b2df -r 79d66ccc9bfc src/lib-sieve/sieve-script.c
--- a/src/lib-sieve/sieve-script.c	Sun Oct 26 14:10:27 2014 +0100
+++ b/src/lib-sieve/sieve-script.c	Mon Oct 27 21:58:13 2014 +0100
@@ -520,15 +520,19 @@
 
 int sieve_script_activate(struct sieve_script *script, time_t mtime)
 {
+	struct sieve_storage *storage = script->storage;
 	int ret;
 
-	i_assert( (script->storage->flags & SIEVE_STORAGE_FLAG_READWRITE) != 0 );
+	i_assert( (storage->flags & SIEVE_STORAGE_FLAG_READWRITE) != 0 );
 	i_assert( script->open ); // FIXME: auto-open?
 
 	i_assert( script->v.activate != NULL );
 	ret = script->v.activate(script);
 
-	sieve_storage_set_modified(script->storage, mtime);
+	if (ret >= 0) {
+		sieve_storage_set_modified(storage, mtime);
+		sieve_storage_sync_script_activate(storage);
+	}
 
 	return ret;
 }
diff -r 79988ab8b2df -r 79d66ccc9bfc src/lib-sieve/sieve-storage-private.h
--- a/src/lib-sieve/sieve-storage-private.h	Sun Oct 26 14:10:27 2014 +0100
+++ b/src/lib-sieve/sieve-storage-private.h	Mon Oct 27 21:58:13 2014 +0100
@@ -243,4 +243,10 @@
 void sieve_storage_sync_script_delete
 	(struct sieve_storage *storage, const char *name);
 
+void sieve_storage_sync_script_activate
+(struct sieve_storage *storage);
+void sieve_storage_sync_deactivate
+(struct sieve_storage *storage);
+
+
 #endif
diff -r 79988ab8b2df -r 79d66ccc9bfc src/lib-sieve/sieve-storage-sync.c
--- a/src/lib-sieve/sieve-storage-sync.c	Sun Oct 26 14:10:27 2014 +0100
+++ b/src/lib-sieve/sieve-storage-sync.c	Mon Oct 27 21:58:13 2014 +0100
@@ -134,3 +134,33 @@
 	mail_index_attribute_unset(t->itrans, TRUE, key, ioloop_time);
 	sieve_storage_sync_transaction_finish(storage, &t);
 }
+
+void sieve_storage_sync_script_activate
+(struct sieve_storage *storage)
+{
+	struct mailbox_transaction_context *t;
+
+	if (storage->sync_inbox == NULL)
+		return;
+
+	t = mailbox_transaction_begin(storage->sync_inbox, 0);	
+	mail_index_attribute_set
+		(t->itrans, TRUE, MAILBOX_ATTRIBUTE_SIEVE_DEFAULT, ioloop_time, 0);
+	sieve_storage_sync_transaction_finish(storage, &t);
+}
+
+void sieve_storage_sync_deactivate
+(struct sieve_storage *storage)
+{
+	struct mailbox_transaction_context *t;
+
+	if (storage->sync_inbox == NULL)
+		return;
+	
+	t = mailbox_transaction_begin(storage->sync_inbox, 0);	
+	mail_index_attribute_unset
+		(t->itrans, TRUE, MAILBOX_ATTRIBUTE_SIEVE_DEFAULT, ioloop_time);
+	sieve_storage_sync_transaction_finish(storage, &t);
+}
+
+
diff -r 79988ab8b2df -r 79d66ccc9bfc src/lib-sieve/sieve-storage.c
--- a/src/lib-sieve/sieve-storage.c	Sun Oct 26 14:10:27 2014 +0100
+++ b/src/lib-sieve/sieve-storage.c	Mon Oct 27 21:58:13 2014 +0100
@@ -670,8 +670,11 @@
 
 	i_assert(storage->v.deactivate != NULL);
 	ret = storage->v.deactivate(storage);
-
-	sieve_storage_set_modified(storage, mtime);
+	
+	if (ret >= 0) {
+		sieve_storage_set_modified(storage, mtime);
+		sieve_storage_sync_deactivate(storage);
+	}
 
 	return ret;
 }
diff -r 79988ab8b2df -r 79d66ccc9bfc src/plugins/doveadm-sieve/doveadm-sieve-plugin.c
--- a/src/plugins/doveadm-sieve/doveadm-sieve-plugin.c	Sun Oct 26 14:10:27 2014 +0100
+++ b/src/plugins/doveadm-sieve/doveadm-sieve-plugin.c	Mon Oct 27 21:58:13 2014 +0100
@@ -188,7 +188,7 @@
 {
 	int ret;
 
-	if ((ret=sieve_storage_is_singular(svstorage)) <= 0) {
+	if ((ret=sieve_storage_is_singular(svstorage)) != 0) {
 		if (ret < 0)
 			mail_storage_set_internal_error(storage);
 		return ret;


More information about the dovecot-cvs mailing list