summaryrefslogtreecommitdiffstats
path: root/pigeonhole/src/managesieve/cmd-renamescript.c
diff options
context:
space:
mode:
Diffstat (limited to 'pigeonhole/src/managesieve/cmd-renamescript.c')
-rw-r--r--pigeonhole/src/managesieve/cmd-renamescript.c54
1 files changed, 54 insertions, 0 deletions
diff --git a/pigeonhole/src/managesieve/cmd-renamescript.c b/pigeonhole/src/managesieve/cmd-renamescript.c
new file mode 100644
index 0000000..bc7a99d
--- /dev/null
+++ b/pigeonhole/src/managesieve/cmd-renamescript.c
@@ -0,0 +1,54 @@
+/* Copyright (c) 2002-2018 Pigeonhole authors, see the included COPYING file
+ */
+
+#include "lib.h"
+#include "str.h"
+
+#include "sieve.h"
+#include "sieve-script.h"
+#include "sieve-storage.h"
+
+#include "managesieve-common.h"
+#include "managesieve-commands.h"
+
+bool cmd_renamescript(struct client_command_context *cmd)
+{
+ struct client *client = cmd->client;
+ struct sieve_storage *storage = client->storage;
+ const char *scriptname, *newname;
+ struct sieve_script *script;
+
+ /* <oldname> <newname> */
+ if (!client_read_string_args(cmd, TRUE, 2, &scriptname, &newname))
+ return FALSE;
+
+ event_add_str(cmd->event, "old_script_name", scriptname);
+ event_add_str(cmd->event, "new_script_name", newname);
+
+ script = sieve_storage_open_script(storage, scriptname, NULL);
+ if (script == NULL) {
+ client_command_storage_error(
+ cmd, "Failed to open script `%s' for rename to `%s'",
+ scriptname, newname);
+ return TRUE;
+ }
+
+ if (sieve_script_rename(script, newname) < 0) {
+ client_command_storage_error(
+ cmd, "Failed to rename script `%s' to `%s'",
+ scriptname, newname);
+ } else {
+ client->renamed_count++;
+
+ struct event_passthrough *e =
+ client_command_create_finish_event(cmd);
+ e_debug(e->event(), "Renamed script `%s' to `%s'",
+ scriptname, newname);
+
+ client_send_ok(client, "Renamescript completed.");
+ }
+
+ sieve_script_unref(&script);
+ return TRUE;
+}
+