dovecot-2.2-pigeonhole: lib-sieve: Added sieve_enabled setting t...
pigeonhole at rename-it.nl
pigeonhole at rename-it.nl
Thu Oct 29 21:20:53 UTC 2015
details: http://hg.rename-it.nl/dovecot-2.2-pigeonhole/rev/96d06e6a9127
changeset: 2124:96d06e6a9127
user: Stephan Bosch <stephan at rename-it.nl>
date: Thu Oct 29 22:14:32 2015 +0100
description:
lib-sieve: Added sieve_enabled setting that defaults to "yes".
This allows completely disabling Sieve processing for a particular user.
diffstat:
src/lib-sieve/sieve-storage.c | 39 +++++++++++++++++++++++--------
src/managesieve/managesieve-client.c | 13 +++++++++-
src/plugins/lda-sieve/lda-sieve-plugin.c | 12 +++++++--
3 files changed, 49 insertions(+), 15 deletions(-)
diffs (144 lines):
diff -r 49391f7404ab -r 96d06e6a9127 src/lib-sieve/sieve-storage.c
--- a/src/lib-sieve/sieve-storage.c Thu Oct 29 22:14:24 2015 +0100
+++ b/src/lib-sieve/sieve-storage.c Thu Oct 29 22:14:32 2015 +0100
@@ -378,7 +378,7 @@
/* disabled */
if ( debug ) {
sieve_sys_debug(svinst, "storage: "
- "Sieve is disabled (sieve=\"\")");
+ "Personal storage is disabled (sieve=\"\")");
}
*error_r = SIEVE_ERROR_NOT_FOUND;
return NULL;
@@ -478,7 +478,8 @@
enum sieve_storage_flags flags, enum sieve_error *error_r)
{
struct sieve_storage *storage;
- const char *set_default, *set_default_name;
+ const char *set_enabled, *set_default, *set_default_name;
+ bool debug = svinst->debug;
enum sieve_error error;
if ( error_r != NULL )
@@ -486,6 +487,18 @@
else
error_r = &error;
+ /* Check whether Sieve is disabled for this user */
+ if ( (set_enabled=sieve_setting_get
+ (svinst, "sieve_enabled")) != NULL &&
+ strcasecmp(set_enabled, "no") == 0) {
+ if ( debug ) {
+ sieve_sys_debug(svinst,
+ "Sieve is disabled for this user");
+ }
+ *error_r = SIEVE_ERROR_NOT_POSSIBLE;
+ return NULL;
+ }
+
/* Determine location for default script */
set_default =
sieve_setting_get(svinst, "sieve_default");
@@ -527,21 +540,27 @@
/* Failed; try using default script location
(not for temporary failures, read/write access, or dsync) */
if ( set_default == NULL ) {
- sieve_sys_debug(svinst, "storage: "
- "No default script location configured");
+ if ( debug ) {
+ sieve_sys_debug(svinst, "storage: "
+ "No default script location configured");
+ }
} else {
- sieve_sys_debug(svinst, "storage: "
- "Trying default script location `%s'",
- set_default);
+ if ( debug ) {
+ sieve_sys_debug(svinst, "storage: "
+ "Trying default script location `%s'",
+ set_default);
+ }
storage = sieve_storage_create
(svinst, set_default, 0, error_r);
if ( storage == NULL ) {
switch ( *error_r ) {
case SIEVE_ERROR_NOT_FOUND:
- sieve_sys_debug(svinst, "storage: "
- "Default script location `%s' not found",
- set_default);
+ if ( debug ) {
+ sieve_sys_debug(svinst, "storage: "
+ "Default script location `%s' not found",
+ set_default);
+ }
break;
case SIEVE_ERROR_TEMP_FAILURE:
sieve_sys_error(svinst, "storage: "
diff -r 49391f7404ab -r 96d06e6a9127 src/managesieve/managesieve-client.c
--- a/src/managesieve/managesieve-client.c Thu Oct 29 22:14:24 2015 +0100
+++ b/src/managesieve/managesieve-client.c Thu Oct 29 22:14:32 2015 +0100
@@ -64,14 +64,23 @@
struct sieve_storage *storage;
enum sieve_error error;
+ /* Open personal script storage */
+
storage = sieve_storage_create_main
(svinst, user, SIEVE_STORAGE_FLAG_READWRITE, &error);
if (storage == NULL) {
switch (error) {
+ case SIEVE_ERROR_NOT_POSSIBLE:
+ printf("BYE \"Sieve processing is disabled for this user.\"\n");
+
+ i_fatal("Failed to open Sieve storage: "
+ "Sieve is disabled for this user.");
+ break;
case SIEVE_ERROR_NOT_FOUND:
- printf("BYE \"Sieve filtering is disabled for this user.\"\n");
+ printf("BYE \"This user cannot manage personal Sieve scripts.\"\n");
- i_fatal("Failed to open Sieve storage: Sieve disabled for user");
+ i_fatal("Failed to open Sieve storage: "
+ "Personal script storage disabled or not found.");
break;
default:
{
diff -r 49391f7404ab -r 96d06e6a9127 src/plugins/lda-sieve/lda-sieve-plugin.c
--- a/src/plugins/lda-sieve/lda-sieve-plugin.c Thu Oct 29 22:14:24 2015 +0100
+++ b/src/plugins/lda-sieve/lda-sieve-plugin.c Thu Oct 29 22:14:32 2015 +0100
@@ -181,6 +181,7 @@
*storage_r = sieve_storage_create_main(svinst, user, 0, &error);
if (*storage_r == NULL) {
switch (error) {
+ case SIEVE_ERROR_NOT_POSSIBLE:
case SIEVE_ERROR_NOT_FOUND:
break;
case SIEVE_ERROR_TEMP_FAILURE:
@@ -640,6 +641,8 @@
ret = lda_sieve_get_personal_storage
(svinst, mdctx->dest_user, &main_storage);
+ if ( ret == 0 && error == SIEVE_ERROR_NOT_POSSIBLE )
+ return 0;
if ( ret > 0 ) {
srctx->main_script =
sieve_storage_active_script_open(main_storage, &error);
@@ -920,11 +923,14 @@
T_BEGIN {
if (lda_sieve_find_scripts(&srctx) < 0)
ret = -1;
- else
+ else if ( srctx.scripts == NULL )
+ ret = 0;
+ else {
ret = lda_sieve_execute(&srctx, storage_r);
- for ( i = 0; i < srctx.script_count; i++ )
- sieve_script_unref(&srctx.scripts[i]);
+ for ( i = 0; i < srctx.script_count; i++ )
+ sieve_script_unref(&srctx.scripts[i]);
+ }
} T_END;
/* Clean up */
More information about the dovecot-cvs
mailing list