dovecot-2.2-pigeonhole: lib-sieve: storage: Added parameter to s...
pigeonhole at rename-it.nl
pigeonhole at rename-it.nl
Tue May 12 18:53:57 UTC 2015
details: http://hg.rename-it.nl/dovecot-2.2-pigeonhole/rev/9308f3f2e4d4
changeset: 2059:9308f3f2e4d4
user: Stephan Bosch <stephan at rename-it.nl>
date: Tue May 12 20:53:46 2015 +0200
description:
lib-sieve: storage: Added parameter to sieve_script_delete() to allow ignoring the active status of the script.
Normally, the active script cannot be deleted.
This change is necessary to handle doveadm sieve delete -a correctly when the provided script is the default.
diffstat:
src/lib-sieve/sieve-script.c | 23 +++++++++++++------
src/lib-sieve/sieve-script.h | 6 +++-
src/lib-sieve/sieve-storage.c | 2 +-
src/managesieve/cmd-deletescript.c | 2 +-
src/plugins/doveadm-sieve/doveadm-sieve-cmd-delete.c | 8 +-----
src/plugins/doveadm-sieve/doveadm-sieve-sync.c | 2 +-
6 files changed, 25 insertions(+), 18 deletions(-)
diffs (126 lines):
diff -r 59d59552247c -r 9308f3f2e4d4 src/lib-sieve/sieve-script.c
--- a/src/lib-sieve/sieve-script.c Mon May 11 23:05:24 2015 +0200
+++ b/src/lib-sieve/sieve-script.c Tue May 12 20:53:46 2015 +0200
@@ -592,7 +592,7 @@
} else if ( sieve_script_activate(newscript, (time_t)-1) < 0 ) {
/* Failed to activate; roll back */
ret = -1;
- (void)sieve_script_delete(newscript);
+ (void)sieve_script_delete(newscript, TRUE);
sieve_script_unref(&newscript);
}
@@ -611,20 +611,25 @@
return ret;
}
-int sieve_script_delete(struct sieve_script *script)
+int sieve_script_delete(struct sieve_script *script,
+ bool ignore_active)
{
struct sieve_storage *storage = script->storage;
+ bool is_active = FALSE;
int ret = 0;
i_assert( script->open ); // FIXME: auto-open?
/* Is the requested script active? */
if ( sieve_script_is_active(script) > 0 ) {
- sieve_script_set_error(script, SIEVE_ERROR_ACTIVE,
- "Cannot delete the active Sieve script.");
- if (storage->default_for != NULL)
- sieve_storage_copy_error(storage->default_for, storage);
- return -1;
+ is_active = TRUE;
+ if ( !ignore_active ) {
+ sieve_script_set_error(script, SIEVE_ERROR_ACTIVE,
+ "Cannot delete the active Sieve script.");
+ if (storage->default_for != NULL)
+ sieve_storage_copy_error(storage->default_for, storage);
+ return -1;
+ }
}
/* Trying to delete the default script? */
@@ -635,6 +640,10 @@
i_assert( (script->storage->flags & SIEVE_STORAGE_FLAG_READWRITE) != 0 );
+ /* Deactivate it explicity */
+ if ( ignore_active && is_active )
+ (void)sieve_storage_deactivate(storage, (time_t)-1);
+
i_assert( script->v.delete != NULL );
ret = script->v.delete(script);
diff -r 59d59552247c -r 9308f3f2e4d4 src/lib-sieve/sieve-script.h
--- a/src/lib-sieve/sieve-script.h Mon May 11 23:05:24 2015 +0200
+++ b/src/lib-sieve/sieve-script.h Tue May 12 20:53:46 2015 +0200
@@ -102,8 +102,10 @@
int sieve_script_rename
(struct sieve_script *script, const char *newname);
int sieve_script_is_active(struct sieve_script *script);
-int sieve_script_activate(struct sieve_script *script, time_t mtime);
-int sieve_script_delete(struct sieve_script *script);
+int sieve_script_activate
+ (struct sieve_script *script, time_t mtime);
+int sieve_script_delete
+ (struct sieve_script *script, bool ignore_active);
/*
* Properties
diff -r 59d59552247c -r 9308f3f2e4d4 src/lib-sieve/sieve-storage.c
--- a/src/lib-sieve/sieve-storage.c Mon May 11 23:05:24 2015 +0200
+++ b/src/lib-sieve/sieve-storage.c Tue May 12 20:53:46 2015 +0200
@@ -1140,7 +1140,7 @@
} else if ( sieve_script_activate(script, (time_t)-1) < 0 ) {
/* Failed to activate; roll back */
ret = -1;
- (void)sieve_script_delete(script);
+ (void)sieve_script_delete(script, TRUE);
sieve_script_unref(&script);
}
diff -r 59d59552247c -r 9308f3f2e4d4 src/managesieve/cmd-deletescript.c
--- a/src/managesieve/cmd-deletescript.c Mon May 11 23:05:24 2015 +0200
+++ b/src/managesieve/cmd-deletescript.c Tue May 12 20:53:46 2015 +0200
@@ -28,7 +28,7 @@
return TRUE;
}
- if ( sieve_script_delete(script) < 0 ) {
+ if ( sieve_script_delete(script, FALSE) < 0 ) {
client_send_storage_error(client, storage);
} else {
client_send_ok(client, "Deletescript completed.");
diff -r 59d59552247c -r 9308f3f2e4d4 src/plugins/doveadm-sieve/doveadm-sieve-cmd-delete.c
--- a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-delete.c Mon May 11 23:05:24 2015 +0200
+++ b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-delete.c Tue May 12 20:53:46 2015 +0200
@@ -39,13 +39,9 @@
if (script == NULL) {
sret = -1;
} else {
- if (sieve_script_delete(script) < 0) {
+ if (sieve_script_delete(script, ctx->ignore_active) < 0) {
(void)sieve_storage_get_last_error(storage, &error);
- if (!ctx->ignore_active || error != SIEVE_ERROR_ACTIVE ||
- sieve_storage_deactivate(storage, (time_t)-1) < 0 ||
- sieve_script_delete(script) < 0) {
- sret = -1;
- }
+ sret = -1;
}
sieve_script_unref(&script);
}
diff -r 59d59552247c -r 9308f3f2e4d4 src/plugins/doveadm-sieve/doveadm-sieve-sync.c
--- a/src/plugins/doveadm-sieve/doveadm-sieve-sync.c Mon May 11 23:05:24 2015 +0200
+++ b/src/plugins/doveadm-sieve/doveadm-sieve-sync.c Tue May 12 20:53:46 2015 +0200
@@ -118,7 +118,7 @@
if (script == NULL) {
ret = -1;
} else {
- ret = sieve_script_delete(script);
+ ret = sieve_script_delete(script, TRUE);
sieve_script_unref(&script);
}
More information about the dovecot-cvs
mailing list