doveadm-mail.h revision 62d0db14d2c5008758983c28d242ec158baabf9e
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch#ifndef DOVEADM_MAIL_H
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch#define DOVEADM_MAIL_H
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch#include <stdio.h>
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch#include "doveadm.h"
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch#include "doveadm-util.h"
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch#include "module-context.h"
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch#include "mail-storage-service.h"
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschenum mail_error;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschstruct mailbox;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschstruct mail_storage;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschstruct mail_user;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschstruct doveadm_mail_cmd_context;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschstruct doveadm_mail_cmd_vfuncs {
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch bool (*parse_arg)(struct doveadm_mail_cmd_context *ctx,int c);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch void (*preinit)(struct doveadm_mail_cmd_context *ctx);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch void (*init)(struct doveadm_mail_cmd_context *ctx,
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch const char *const args[]);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch int (*get_next_user)(struct doveadm_mail_cmd_context *ctx,
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch const char **username_r);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch int (*prerun)(struct doveadm_mail_cmd_context *ctx,
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch struct mail_storage_service_user *service_user,
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch const char **error_r);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch int (*run)(struct doveadm_mail_cmd_context *ctx,
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch struct mail_user *mail_user);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch void (*deinit)(struct doveadm_mail_cmd_context *ctx);
9249c80276766fdc4d31fc3eebc22fba7d53d77cStephan Bosch};
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschstruct doveadm_mail_cmd_module_register {
0afd9a9acab584e770ffcd6a0e1e02e2d18d360aJosef 'Jeff' Sipek unsigned int id;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch};
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschunion doveadm_mail_cmd_module_context {
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch struct doveadm_mail_cmd_vfuncs super;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch struct doveadm_mail_cmd_module_register *reg;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch};
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschstruct doveadm_mail_cmd_context {
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch pool_t pool;
9249c80276766fdc4d31fc3eebc22fba7d53d77cStephan Bosch const struct doveadm_mail_cmd *cmd;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch const char *const *args;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch /* args including -options */
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch const char *const *full_args;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch const char *getopt_args;
9249c80276766fdc4d31fc3eebc22fba7d53d77cStephan Bosch const struct doveadm_settings *set;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch enum mail_storage_service_flags service_flags;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch struct mail_storage_service_ctx *storage_service;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch /* search args aren't set for all mail commands */
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch struct mail_search_args *search_args;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch const char *cur_username;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch struct mail_storage_service_user *cur_service_user;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch struct mail_user *cur_mail_user;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch struct doveadm_mail_cmd_vfuncs v;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch ARRAY_DEFINE(module_contexts, union doveadm_mail_cmd_module_context *);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch /* if non-zero, exit with this code */
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch int exit_code;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch /* We're handling only a single user */
c4588e66e80482994cf0fbc45251cb8e9db6404dJosef 'Jeff' Sipek unsigned int iterate_single_user:1;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch /* We're going through all users (not set for wildcard usernames) */
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch unsigned int iterate_all_users:1;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch};
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschstruct doveadm_mail_cmd {
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch struct doveadm_mail_cmd_context *(*alloc)(void);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch const char *name;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch const char *usage_args;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch};
2cbbe9b4829adb184c83dbf780316f4144559054Stephan BoschARRAY_DEFINE_TYPE(doveadm_mail_cmd, struct doveadm_mail_cmd);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch
df957821a4b2e2d8708aa35cfe30860ee71af686Stephan Boschextern ARRAY_TYPE(doveadm_mail_cmd) doveadm_mail_cmds;
df957821a4b2e2d8708aa35cfe30860ee71af686Stephan Boschextern void (*hook_doveadm_mail_init)(struct doveadm_mail_cmd_context *ctx);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschextern struct doveadm_mail_cmd_module_register doveadm_mail_cmd_module_register;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschextern char doveadm_mail_cmd_hide;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschbool doveadm_mail_try_run(const char *cmd_name, int argc, char *argv[]);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschvoid doveadm_mail_register_cmd(const struct doveadm_mail_cmd *cmd);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschconst struct doveadm_mail_cmd *doveadm_mail_cmd_find(const char *cmd_name);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschvoid doveadm_mail_usage(string_t *out);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschvoid doveadm_mail_help(const struct doveadm_mail_cmd *cmd) ATTR_NORETURN;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschvoid doveadm_mail_help_name(const char *cmd_name) ATTR_NORETURN;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschvoid doveadm_mail_try_help_name(const char *cmd_name);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschbool doveadm_mail_has_subcommands(const char *cmd_name);
c4588e66e80482994cf0fbc45251cb8e9db6404dJosef 'Jeff' Sipek
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschvoid doveadm_mail_init(void);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschvoid doveadm_mail_deinit(void);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschstruct doveadm_mail_cmd_context *
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschdoveadm_mail_cmd_init(const struct doveadm_mail_cmd *cmd,
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch const struct doveadm_settings *set);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschvoid doveadm_mail_single_user(struct doveadm_mail_cmd_context *ctx,
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch const struct mail_storage_service_input *input);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschint doveadm_mail_server_user(struct doveadm_mail_cmd_context *ctx,
c4588e66e80482994cf0fbc45251cb8e9db6404dJosef 'Jeff' Sipek const struct mail_storage_service_input *input,
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch const char **error_r);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschvoid doveadm_mail_server_flush(void);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschstruct mailbox *
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschdoveadm_mailbox_find(struct mail_user *user, const char *mailbox);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschint doveadm_mailbox_find_and_sync(struct mail_user *user, const char *mailbox,
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch struct mailbox **box_r);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschstruct mail_search_args *
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschdoveadm_mail_build_search_args(const char *const args[]);
c4588e66e80482994cf0fbc45251cb8e9db6404dJosef 'Jeff' Sipekvoid doveadm_mailbox_args_check(const char *const args[]);
c4588e66e80482994cf0fbc45251cb8e9db6404dJosef 'Jeff' Sipekstruct mail_search_args *
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschdoveadm_mail_mailbox_search_args_build(const char *const args[]);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschvoid expunge_search_args_check(struct mail_search_args *args, const char *cmd);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschstruct doveadm_mail_cmd_context *
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschdoveadm_mail_cmd_alloc_size(size_t size);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch#define doveadm_mail_cmd_alloc(type) \
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch (type *)doveadm_mail_cmd_alloc_size(sizeof(type))
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschvoid doveadm_mail_failed_error(struct doveadm_mail_cmd_context *ctx,
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch enum mail_error error);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschvoid doveadm_mail_failed_storage(struct doveadm_mail_cmd_context *ctx,
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch struct mail_storage *storage);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschvoid doveadm_mail_failed_mailbox(struct doveadm_mail_cmd_context *ctx,
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch struct mailbox *box);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschstruct doveadm_mail_cmd cmd_expunge;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschstruct doveadm_mail_cmd cmd_search;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschstruct doveadm_mail_cmd cmd_fetch;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschstruct doveadm_mail_cmd cmd_import;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschstruct doveadm_mail_cmd cmd_index;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschstruct doveadm_mail_cmd cmd_altmove;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschstruct doveadm_mail_cmd cmd_move;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschstruct doveadm_mail_cmd cmd_mailbox_list;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschstruct doveadm_mail_cmd cmd_mailbox_create;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschstruct doveadm_mail_cmd cmd_mailbox_delete;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschstruct doveadm_mail_cmd cmd_mailbox_rename;
0afd9a9acab584e770ffcd6a0e1e02e2d18d360aJosef 'Jeff' Sipekstruct doveadm_mail_cmd cmd_mailbox_subscribe;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschstruct doveadm_mail_cmd cmd_mailbox_unsubscribe;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschstruct doveadm_mail_cmd cmd_mailbox_status;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch#endif
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch