doveadm-mail-mailbox.c revision 23878bd03d1de531e3261a25598beec621351910
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen/* Copyright (c) 2010 Dovecot authors, see the included COPYING file */
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen#include "lib.h"
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen#include "array.h"
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen#include "mail-namespace.h"
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen#include "mail-storage.h"
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen#include "mail-search-build.h"
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen#include "doveadm-mail-list-iter.h"
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen#include "doveadm-mail.h"
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen#include <stdio.h>
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainenstruct mailbox_cmd_context {
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen struct doveadm_mail_cmd_context ctx;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen ARRAY_TYPE(const_string) mailboxes;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen};
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainenstruct rename_cmd_context {
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen struct doveadm_mail_cmd_context ctx;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen const char *oldname, *newname;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen};
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainenstruct list_cmd_context {
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen struct doveadm_mail_cmd_context ctx;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen struct mail_search_args *search_args;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen};
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainenstatic void
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainencmd_mailbox_list_run(struct doveadm_mail_cmd_context *_ctx,
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen struct mail_user *user)
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen{
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen struct list_cmd_context *ctx = (struct list_cmd_context *)_ctx;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen const enum mailbox_list_iter_flags iter_flags =
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen MAILBOX_LIST_ITER_RAW_LIST |
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen MAILBOX_LIST_ITER_VIRTUAL_NAMES |
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen MAILBOX_LIST_ITER_NO_AUTO_INBOX |
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen MAILBOX_LIST_ITER_RETURN_NO_FLAGS;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen struct doveadm_mail_list_iter *iter;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen const struct mailbox_info *info;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen iter = doveadm_mail_list_iter_init(user, ctx->search_args, iter_flags);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen while ((info = doveadm_mail_list_iter_next(iter)) != NULL) {
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen printf("%s\n", info->name);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen }
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen doveadm_mail_list_iter_deinit(&iter);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen}
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen
23878bd03d1de531e3261a25598beec621351910Timo Sirainenstatic void cmd_mailbox_list_init(struct doveadm_mail_cmd_context *_ctx,
23878bd03d1de531e3261a25598beec621351910Timo Sirainen const char *const args[])
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen{
23878bd03d1de531e3261a25598beec621351910Timo Sirainen struct list_cmd_context *ctx = (struct list_cmd_context *)_ctx;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen struct mail_search_arg *arg;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen unsigned int i;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen ctx->search_args = mail_search_build_init();
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen for (i = 0; args[i] != NULL; i++) {
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen arg = mail_search_build_add(ctx->search_args,
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen SEARCH_MAILBOX_GLOB);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen arg->value.str = p_strdup(ctx->search_args->pool, args[i]);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen }
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen if (i > 1) {
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen struct mail_search_arg *subargs = ctx->search_args->args;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen ctx->search_args->args = NULL;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen arg = mail_search_build_add(ctx->search_args, SEARCH_OR);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen arg->value.subargs = subargs;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen }
23878bd03d1de531e3261a25598beec621351910Timo Sirainen}
23878bd03d1de531e3261a25598beec621351910Timo Sirainen
23878bd03d1de531e3261a25598beec621351910Timo Sirainenstatic struct doveadm_mail_cmd_context *cmd_mailbox_list_alloc(void)
23878bd03d1de531e3261a25598beec621351910Timo Sirainen{
23878bd03d1de531e3261a25598beec621351910Timo Sirainen struct list_cmd_context *ctx;
23878bd03d1de531e3261a25598beec621351910Timo Sirainen
23878bd03d1de531e3261a25598beec621351910Timo Sirainen ctx = doveadm_mail_cmd_alloc(struct list_cmd_context);
23878bd03d1de531e3261a25598beec621351910Timo Sirainen ctx->ctx.init = cmd_mailbox_list_init;
23878bd03d1de531e3261a25598beec621351910Timo Sirainen ctx->ctx.run = cmd_mailbox_list_run;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen return &ctx->ctx;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen}
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainenstatic void
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainencmd_mailbox_create_run(struct doveadm_mail_cmd_context *_ctx,
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen struct mail_user *user)
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen{
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen struct mailbox_cmd_context *ctx = (struct mailbox_cmd_context *)_ctx;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen struct mail_namespace *ns;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen struct mailbox *box;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen const char *const *namep;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen array_foreach(&ctx->mailboxes, namep) {
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen const char *storage_name = *namep;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen unsigned int len;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen bool directory = FALSE;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen ns = mail_namespace_find(user->namespaces, &storage_name);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen if (ns == NULL)
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen i_fatal("Can't find namespace for: %s", *namep);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen len = strlen(storage_name);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen if (len > 0 && storage_name[len-1] == ns->real_sep) {
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen storage_name = t_strndup(storage_name, len-1);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen directory = TRUE;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen }
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen box = mailbox_alloc(ns->list, storage_name, 0);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen if (mailbox_create(box, NULL, directory) < 0) {
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen struct mail_storage *storage = mailbox_get_storage(box);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen i_error("Can't create mailbox %s: %s", *namep,
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen mail_storage_get_last_error(storage, NULL));
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen }
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen mailbox_free(&box);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen }
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen}
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen
23878bd03d1de531e3261a25598beec621351910Timo Sirainenstatic void cmd_mailbox_create_init(struct doveadm_mail_cmd_context *_ctx,
23878bd03d1de531e3261a25598beec621351910Timo Sirainen const char *const args[])
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen{
23878bd03d1de531e3261a25598beec621351910Timo Sirainen struct mailbox_cmd_context *ctx = (struct mailbox_cmd_context *)_ctx;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen const char *name;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen unsigned int i;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen if (args[0] == NULL)
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen doveadm_mail_help_name("mailbox create");
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen for (i = 0; args[i] != NULL; i++) {
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen name = p_strdup(ctx->ctx.pool, args[i]);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen array_append(&ctx->mailboxes, &name, 1);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen }
23878bd03d1de531e3261a25598beec621351910Timo Sirainen}
23878bd03d1de531e3261a25598beec621351910Timo Sirainen
23878bd03d1de531e3261a25598beec621351910Timo Sirainenstatic struct doveadm_mail_cmd_context *cmd_mailbox_create_alloc(void)
23878bd03d1de531e3261a25598beec621351910Timo Sirainen{
23878bd03d1de531e3261a25598beec621351910Timo Sirainen struct mailbox_cmd_context *ctx;
23878bd03d1de531e3261a25598beec621351910Timo Sirainen
23878bd03d1de531e3261a25598beec621351910Timo Sirainen ctx = doveadm_mail_cmd_alloc(struct mailbox_cmd_context);
23878bd03d1de531e3261a25598beec621351910Timo Sirainen ctx->ctx.init = cmd_mailbox_create_init;
23878bd03d1de531e3261a25598beec621351910Timo Sirainen ctx->ctx.run = cmd_mailbox_create_run;
23878bd03d1de531e3261a25598beec621351910Timo Sirainen p_array_init(&ctx->mailboxes, ctx->ctx.pool, 16);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen return &ctx->ctx;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen}
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainenstatic void
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainencmd_mailbox_delete_run(struct doveadm_mail_cmd_context *_ctx,
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen struct mail_user *user)
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen{
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen struct mailbox_cmd_context *ctx = (struct mailbox_cmd_context *)_ctx;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen struct mail_namespace *ns;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen struct mailbox *box;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen const char *const *namep;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen array_foreach(&ctx->mailboxes, namep) {
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen const char *storage_name = *namep;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen ns = mail_namespace_find(user->namespaces, &storage_name);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen if (ns == NULL)
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen i_fatal("Can't find namespace for: %s", *namep);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen box = mailbox_alloc(ns->list, storage_name, 0);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen if (mailbox_delete(box) < 0) {
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen struct mail_storage *storage = mailbox_get_storage(box);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen i_error("Can't delete mailbox %s: %s", *namep,
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen mail_storage_get_last_error(storage, NULL));
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen }
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen mailbox_free(&box);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen }
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen}
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen
23878bd03d1de531e3261a25598beec621351910Timo Sirainenstatic void cmd_mailbox_delete_init(struct doveadm_mail_cmd_context *_ctx,
23878bd03d1de531e3261a25598beec621351910Timo Sirainen const char *const args[])
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen{
23878bd03d1de531e3261a25598beec621351910Timo Sirainen struct mailbox_cmd_context *ctx = (struct mailbox_cmd_context *)_ctx;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen const char *name;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen unsigned int i;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen if (args[0] == NULL)
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen doveadm_mail_help_name("mailbox delete");
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen for (i = 0; args[i] != NULL; i++) {
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen name = p_strdup(ctx->ctx.pool, args[i]);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen array_append(&ctx->mailboxes, &name, 1);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen }
23878bd03d1de531e3261a25598beec621351910Timo Sirainen}
23878bd03d1de531e3261a25598beec621351910Timo Sirainen
23878bd03d1de531e3261a25598beec621351910Timo Sirainenstatic struct doveadm_mail_cmd_context *cmd_mailbox_delete_alloc(void)
23878bd03d1de531e3261a25598beec621351910Timo Sirainen{
23878bd03d1de531e3261a25598beec621351910Timo Sirainen struct mailbox_cmd_context *ctx;
23878bd03d1de531e3261a25598beec621351910Timo Sirainen
23878bd03d1de531e3261a25598beec621351910Timo Sirainen ctx = doveadm_mail_cmd_alloc(struct mailbox_cmd_context);
23878bd03d1de531e3261a25598beec621351910Timo Sirainen ctx->ctx.init = cmd_mailbox_delete_init;
23878bd03d1de531e3261a25598beec621351910Timo Sirainen ctx->ctx.run = cmd_mailbox_delete_run;
23878bd03d1de531e3261a25598beec621351910Timo Sirainen p_array_init(&ctx->mailboxes, ctx->ctx.pool, 16);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen return &ctx->ctx;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen}
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainenstatic void
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainencmd_mailbox_rename_run(struct doveadm_mail_cmd_context *_ctx,
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen struct mail_user *user)
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen{
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen struct rename_cmd_context *ctx = (struct rename_cmd_context *)_ctx;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen struct mail_namespace *oldns, *newns;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen struct mailbox *oldbox, *newbox;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen const char *oldname = ctx->oldname;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen const char *newname = ctx->newname;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen oldns = mail_namespace_find(user->namespaces, &oldname);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen if (oldns == NULL)
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen i_fatal("Can't find namespace for: %s", oldname);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen newns = mail_namespace_find(user->namespaces, &newname);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen if (newns == NULL)
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen i_fatal("Can't find namespace for: %s", newname);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen oldbox = mailbox_alloc(oldns->list, oldname, 0);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen newbox = mailbox_alloc(newns->list, newname, 0);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen if (mailbox_rename(oldbox, newbox, TRUE) < 0) {
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen struct mail_storage *storage = mailbox_get_storage(oldbox);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen i_error("Can't rename mailbox %s to %s: %s", oldname, newname,
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen mail_storage_get_last_error(storage, NULL));
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen }
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen mailbox_free(&oldbox);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen mailbox_free(&newbox);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen}
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen
23878bd03d1de531e3261a25598beec621351910Timo Sirainenstatic void cmd_mailbox_rename_init(struct doveadm_mail_cmd_context *_ctx,
23878bd03d1de531e3261a25598beec621351910Timo Sirainen const char *const args[])
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen{
23878bd03d1de531e3261a25598beec621351910Timo Sirainen struct rename_cmd_context *ctx = (struct rename_cmd_context *)_ctx;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen if (str_array_length(args) != 2)
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen doveadm_mail_help_name("mailbox rename");
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen ctx->oldname = p_strdup(ctx->ctx.pool, args[0]);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen ctx->newname = p_strdup(ctx->ctx.pool, args[1]);
23878bd03d1de531e3261a25598beec621351910Timo Sirainen}
23878bd03d1de531e3261a25598beec621351910Timo Sirainen
23878bd03d1de531e3261a25598beec621351910Timo Sirainenstatic struct doveadm_mail_cmd_context *cmd_mailbox_rename_alloc(void)
23878bd03d1de531e3261a25598beec621351910Timo Sirainen{
23878bd03d1de531e3261a25598beec621351910Timo Sirainen struct rename_cmd_context *ctx;
23878bd03d1de531e3261a25598beec621351910Timo Sirainen
23878bd03d1de531e3261a25598beec621351910Timo Sirainen ctx = doveadm_mail_cmd_alloc(struct rename_cmd_context);
23878bd03d1de531e3261a25598beec621351910Timo Sirainen ctx->ctx.init = cmd_mailbox_rename_init;
23878bd03d1de531e3261a25598beec621351910Timo Sirainen ctx->ctx.run = cmd_mailbox_rename_run;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen return &ctx->ctx;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen}
23878bd03d1de531e3261a25598beec621351910Timo Sirainen
23878bd03d1de531e3261a25598beec621351910Timo Sirainenstruct doveadm_mail_cmd cmd_mailbox_list = {
23878bd03d1de531e3261a25598beec621351910Timo Sirainen cmd_mailbox_list_alloc, "mailbox list",
23878bd03d1de531e3261a25598beec621351910Timo Sirainen "[-7|-8] [<mailbox> [...]]"
23878bd03d1de531e3261a25598beec621351910Timo Sirainen};
23878bd03d1de531e3261a25598beec621351910Timo Sirainenstruct doveadm_mail_cmd cmd_mailbox_create = {
23878bd03d1de531e3261a25598beec621351910Timo Sirainen cmd_mailbox_create_alloc, "mailbox create",
23878bd03d1de531e3261a25598beec621351910Timo Sirainen "[-7|-8] <mailbox> [...]"
23878bd03d1de531e3261a25598beec621351910Timo Sirainen};
23878bd03d1de531e3261a25598beec621351910Timo Sirainenstruct doveadm_mail_cmd cmd_mailbox_delete = {
23878bd03d1de531e3261a25598beec621351910Timo Sirainen cmd_mailbox_delete_alloc, "mailbox delete",
23878bd03d1de531e3261a25598beec621351910Timo Sirainen "[-7|-8] <mailbox> [...]"
23878bd03d1de531e3261a25598beec621351910Timo Sirainen};
23878bd03d1de531e3261a25598beec621351910Timo Sirainenstruct doveadm_mail_cmd cmd_mailbox_rename = {
23878bd03d1de531e3261a25598beec621351910Timo Sirainen cmd_mailbox_rename_alloc, "mailbox rename",
23878bd03d1de531e3261a25598beec621351910Timo Sirainen "[-7|-8] <old name> <new name>"
23878bd03d1de531e3261a25598beec621351910Timo Sirainen};