dovecot-2.2-pigeonhole: doveadm-sieve plugin: Fixed a few crash ...

pigeonhole at rename-it.nl pigeonhole at rename-it.nl
Wed Sep 4 19:12:51 EEST 2013


details:   http://hg.rename-it.nl/dovecot-2.2-pigeonhole/rev/00fbc2bc1fad
changeset: 1794:00fbc2bc1fad
user:      Stephan Bosch <stephan at rename-it.nl>
date:      Wed Sep 04 18:12:44 2013 +0200
description:
doveadm-sieve plugin: Fixed a few crash issues.
Patches by Timo Sirainen.

diffstat:

 src/plugins/doveadm-sieve/doveadm-sieve-plugin.c |  28 +++++++++++++++++------
 1 files changed, 20 insertions(+), 8 deletions(-)

diffs (93 lines):

diff -r 09ce20eaa1c2 -r 00fbc2bc1fad src/plugins/doveadm-sieve/doveadm-sieve-plugin.c
--- a/src/plugins/doveadm-sieve/doveadm-sieve-plugin.c	Thu Aug 15 21:07:56 2013 +0200
+++ b/src/plugins/doveadm-sieve/doveadm-sieve-plugin.c	Wed Sep 04 18:12:44 2013 +0200
@@ -105,7 +105,7 @@
 
 	MODULE_CONTEXT_SET(user, sieve_user_module, suser);
 	*svstorage_r = suser->sieve_storage;
-	return 0;
+	return suser->sieve_storage != NULL ? 1 : 0;
 }
 
 static int sieve_attribute_unset_script(struct mail_storage *storage,
@@ -248,7 +248,7 @@
 
 	if (value->value != NULL) {
 		type = value->value[0];
-	} else {
+	} else if (value->value_stream != NULL) {
 		ret = i_stream_read_data(value->value_stream, &data, &size, 0);
 		if (ret == -1) {
 			mail_storage_set_critical(storage, "read(%s) failed: %m",
@@ -257,6 +257,8 @@
 		}
 		i_assert(ret > 0);
 		type = data[0];
+	} else {
+		type = MAILBOX_ATTRIBUTE_SIEVE_DEFAULT_SCRIPT;
 	}
 	if (type == MAILBOX_ATTRIBUTE_SIEVE_DEFAULT_LINK)
 		return sieve_attribute_set_active(storage, svstorage, value);
@@ -276,10 +278,15 @@
 	struct sieve_save_context *save_ctx;
 	struct istream *input;
 	const char *scriptname;
-	int ret = 0;
+	int ret;
 
-	if (mail_sieve_user_init(storage->user, &svstorage) < 0)
+	if ((ret = mail_sieve_user_init(storage->user, &svstorage)) <= 0) {
+		if (ret == 0) {
+			mail_storage_set_error(storage, MAIL_ERROR_NOTFOUND,
+					       "Sieve not enabled for user");
+		}
 		return -1;
+	}
 
 	if (strcmp(key, MAILBOX_ATTRIBUTE_SIEVE_DEFAULT) == 0)
 		return sieve_attribute_set_default(storage, svstorage, value);
@@ -312,6 +319,7 @@
 			sieve_storage_get_last_error(svstorage, NULL));
 		return -1;
 	}
+	ret = 0;
 	while (i_stream_read(input) > 0) {
 		if (sieve_storage_save_continue(save_ctx) < 0) {
 			mail_storage_set_critical(storage,
@@ -481,8 +489,8 @@
 	const char *scriptname, *errstr;
 	int ret;
 
-	if (mail_sieve_user_init(storage->user, &svstorage) < 0)
-		return -1;
+	if ((ret = mail_sieve_user_init(storage->user, &svstorage)) <= 0)
+		return ret;
 
 	if (strcmp(key, MAILBOX_ATTRIBUTE_SIEVE_DEFAULT) == 0)
 		return sieve_attribute_get_default(storage, svstorage, value_r);
@@ -547,12 +555,13 @@
 {
 	struct mail_user *user = siter->iter.box->storage->user;
 	struct sieve_storage *svstorage;
+	int ret;
 
 	if (user->mail_debug)
 		i_debug("doveadm-sieve: Iterating Sieve mailbox attributes");
 
-	if (mail_sieve_user_init(user, &svstorage) < 0)
-		return -1;
+	if ((ret = mail_sieve_user_init(user, &svstorage)) <= 0)
+		return ret;
 
 	siter->sieve_list = sieve_storage_list_init(svstorage);
 	if (siter->sieve_list == NULL) {
@@ -597,6 +606,9 @@
 	bool active;
 	int ret;
 
+	if (siter->sieve_list == NULL)
+		return NULL;
+
 	/* Iterate through all scripts in sieve_dir */
 	while ((scriptname = sieve_storage_list_next(siter->sieve_list, &active))
 		!= NULL) {


More information about the dovecot-cvs mailing list