diff options
Diffstat (limited to 'pigeonhole/src/managesieve/cmd-deletescript.c')
-rw-r--r-- | pigeonhole/src/managesieve/cmd-deletescript.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/pigeonhole/src/managesieve/cmd-deletescript.c b/pigeonhole/src/managesieve/cmd-deletescript.c new file mode 100644 index 0000000..a8be5c9 --- /dev/null +++ b/pigeonhole/src/managesieve/cmd-deletescript.c @@ -0,0 +1,43 @@ +/* Copyright (c) 2002-2018 Pigeonhole authors, see the included COPYING file + */ + +#include "lib.h" + +#include "sieve.h" +#include "sieve-script.h" +#include "sieve-storage.h" + +#include "managesieve-common.h" +#include "managesieve-commands.h" + +bool cmd_deletescript(struct client_command_context *cmd) +{ + struct client *client = cmd->client; + struct sieve_storage *storage = client->storage; + const char *scriptname; + struct sieve_script *script; + + /* <script name>*/ + if (!client_read_string_args(cmd, TRUE, 1, &scriptname)) + return FALSE; + + event_add_str(cmd->event, "script_name", scriptname); + + script = sieve_storage_open_script(storage, scriptname, NULL); + if (script == NULL || sieve_script_delete(script, FALSE) < 0) { + client_command_storage_error( + cmd, "Failed to delete script `%s'", scriptname); + sieve_script_unref(&script); + return TRUE; + } + + struct event_passthrough *e = + client_command_create_finish_event(cmd); + e_debug(e->event(), "Deleted script `%s'", scriptname); + + client->deleted_count++; + client_send_ok(client, "Deletescript completed."); + + sieve_script_unref(&script); + return TRUE; +} |