doveadm-mail-mailbox.c revision 23878bd03d1de531e3261a25598beec621351910
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen/* Copyright (c) 2010 Dovecot authors, see the included COPYING file */
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainencmd_mailbox_list_run(struct doveadm_mail_cmd_context *_ctx,
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen struct list_cmd_context *ctx = (struct list_cmd_context *)_ctx;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen const enum mailbox_list_iter_flags iter_flags =
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) {
23878bd03d1de531e3261a25598beec621351910Timo Sirainenstatic void cmd_mailbox_list_init(struct doveadm_mail_cmd_context *_ctx,
23878bd03d1de531e3261a25598beec621351910Timo Sirainen const char *const args[])
23878bd03d1de531e3261a25598beec621351910Timo Sirainen struct list_cmd_context *ctx = (struct list_cmd_context *)_ctx;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen unsigned int i;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen arg->value.str = p_strdup(ctx->search_args->pool, args[i]);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen struct mail_search_arg *subargs = ctx->search_args->args;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen arg = mail_search_build_add(ctx->search_args, SEARCH_OR);
23878bd03d1de531e3261a25598beec621351910Timo Sirainenstatic struct doveadm_mail_cmd_context *cmd_mailbox_list_alloc(void)
23878bd03d1de531e3261a25598beec621351910Timo Sirainen ctx = doveadm_mail_cmd_alloc(struct list_cmd_context);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainencmd_mailbox_create_run(struct doveadm_mail_cmd_context *_ctx,
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen struct mailbox_cmd_context *ctx = (struct mailbox_cmd_context *)_ctx;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen const char *const *namep;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen unsigned int len;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen ns = mail_namespace_find(user->namespaces, &storage_name);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen i_fatal("Can't find namespace for: %s", *namep);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen if (len > 0 && storage_name[len-1] == ns->real_sep) {
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen storage_name = t_strndup(storage_name, len-1);
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 i_error("Can't create mailbox %s: %s", *namep,
23878bd03d1de531e3261a25598beec621351910Timo Sirainenstatic void cmd_mailbox_create_init(struct doveadm_mail_cmd_context *_ctx,
23878bd03d1de531e3261a25598beec621351910Timo Sirainen const char *const args[])
23878bd03d1de531e3261a25598beec621351910Timo Sirainen struct mailbox_cmd_context *ctx = (struct mailbox_cmd_context *)_ctx;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen unsigned int i;
23878bd03d1de531e3261a25598beec621351910Timo Sirainenstatic struct doveadm_mail_cmd_context *cmd_mailbox_create_alloc(void)
23878bd03d1de531e3261a25598beec621351910Timo Sirainen ctx = doveadm_mail_cmd_alloc(struct mailbox_cmd_context);
23878bd03d1de531e3261a25598beec621351910Timo Sirainen p_array_init(&ctx->mailboxes, ctx->ctx.pool, 16);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainencmd_mailbox_delete_run(struct doveadm_mail_cmd_context *_ctx,
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen struct mailbox_cmd_context *ctx = (struct mailbox_cmd_context *)_ctx;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen const char *const *namep;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen ns = mail_namespace_find(user->namespaces, &storage_name);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen i_fatal("Can't find namespace for: %s", *namep);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen box = mailbox_alloc(ns->list, storage_name, 0);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen struct mail_storage *storage = mailbox_get_storage(box);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen i_error("Can't delete mailbox %s: %s", *namep,
23878bd03d1de531e3261a25598beec621351910Timo Sirainenstatic void cmd_mailbox_delete_init(struct doveadm_mail_cmd_context *_ctx,
23878bd03d1de531e3261a25598beec621351910Timo Sirainen const char *const args[])
23878bd03d1de531e3261a25598beec621351910Timo Sirainen struct mailbox_cmd_context *ctx = (struct mailbox_cmd_context *)_ctx;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen unsigned int i;
23878bd03d1de531e3261a25598beec621351910Timo Sirainenstatic struct doveadm_mail_cmd_context *cmd_mailbox_delete_alloc(void)
23878bd03d1de531e3261a25598beec621351910Timo Sirainen ctx = doveadm_mail_cmd_alloc(struct mailbox_cmd_context);
23878bd03d1de531e3261a25598beec621351910Timo Sirainen p_array_init(&ctx->mailboxes, ctx->ctx.pool, 16);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainencmd_mailbox_rename_run(struct doveadm_mail_cmd_context *_ctx,
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen struct rename_cmd_context *ctx = (struct rename_cmd_context *)_ctx;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen oldns = mail_namespace_find(user->namespaces, &oldname);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen i_fatal("Can't find namespace for: %s", oldname);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen newns = mail_namespace_find(user->namespaces, &newname);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen i_fatal("Can't find namespace for: %s", newname);
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 i_error("Can't rename mailbox %s to %s: %s", oldname, newname,
23878bd03d1de531e3261a25598beec621351910Timo Sirainenstatic void cmd_mailbox_rename_init(struct doveadm_mail_cmd_context *_ctx,
23878bd03d1de531e3261a25598beec621351910Timo Sirainen const char *const args[])
23878bd03d1de531e3261a25598beec621351910Timo Sirainen struct rename_cmd_context *ctx = (struct rename_cmd_context *)_ctx;
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen ctx->oldname = p_strdup(ctx->ctx.pool, args[0]);
9cf4bb70f014849735aab4226691edcdf56b3271Timo Sirainen ctx->newname = p_strdup(ctx->ctx.pool, args[1]);
23878bd03d1de531e3261a25598beec621351910Timo Sirainenstatic struct doveadm_mail_cmd_context *cmd_mailbox_rename_alloc(void)
23878bd03d1de531e3261a25598beec621351910Timo Sirainen ctx = doveadm_mail_cmd_alloc(struct rename_cmd_context);
23878bd03d1de531e3261a25598beec621351910Timo Sirainen "[-7|-8] [<mailbox> [...]]"
23878bd03d1de531e3261a25598beec621351910Timo Sirainen "[-7|-8] <mailbox> [...]"
23878bd03d1de531e3261a25598beec621351910Timo Sirainen "[-7|-8] <mailbox> [...]"
23878bd03d1de531e3261a25598beec621351910Timo Sirainen "[-7|-8] <old name> <new name>"