2
2
#define DOVEADM_MAIL_H
5
6
#include "doveadm-util.h"
6
7
#include "module-context.h"
8
#include "mail-storage-service.h"
8
enum mail_storage_service_flags;
11
struct mail_storage_service_ctx;
12
struct mail_storage_service_input;
13
struct mail_storage_service_user;
14
14
struct doveadm_mail_cmd_context;
16
16
struct doveadm_mail_cmd_vfuncs {
17
17
bool (*parse_arg)(struct doveadm_mail_cmd_context *ctx,int c);
18
void (*preinit)(struct doveadm_mail_cmd_context *ctx);
18
19
void (*init)(struct doveadm_mail_cmd_context *ctx,
19
20
const char *const args[]);
20
21
int (*get_next_user)(struct doveadm_mail_cmd_context *ctx,
21
22
const char **username_r);
22
void (*run)(struct doveadm_mail_cmd_context *ctx,
23
struct mail_user *mail_user);
23
int (*prerun)(struct doveadm_mail_cmd_context *ctx,
24
struct mail_storage_service_user *service_user,
25
const char **error_r);
26
int (*run)(struct doveadm_mail_cmd_context *ctx,
27
struct mail_user *mail_user);
24
28
void (*deinit)(struct doveadm_mail_cmd_context *ctx);
38
42
const struct doveadm_mail_cmd *cmd;
39
43
const char *const *args;
44
/* args including -options */
45
const char *const *full_args;
41
47
const char *getopt_args;
42
48
const struct doveadm_settings *set;
49
enum mail_storage_service_flags service_flags;
43
50
struct mail_storage_service_ctx *storage_service;
44
51
/* search args aren't set for all mail commands */
45
52
struct mail_search_args *search_args;
54
const char *cur_username;
55
struct mail_storage_service_user *cur_service_user;
47
56
struct mail_user *cur_mail_user;
48
57
struct doveadm_mail_cmd_vfuncs v;
50
59
ARRAY_DEFINE(module_contexts, union doveadm_mail_cmd_module_context *);
61
/* if non-zero, exit with this code */
52
64
/* We're handling only a single user */
53
65
unsigned int iterate_single_user:1;
54
66
/* We're going through all users (not set for wildcard usernames) */
55
67
unsigned int iterate_all_users:1;
56
unsigned int failed:1;
59
70
struct doveadm_mail_cmd {
66
77
extern ARRAY_TYPE(doveadm_mail_cmd) doveadm_mail_cmds;
67
78
extern void (*hook_doveadm_mail_init)(struct doveadm_mail_cmd_context *ctx);
68
79
extern struct doveadm_mail_cmd_module_register doveadm_mail_cmd_module_register;
80
extern char doveadm_mail_cmd_hide;
70
82
bool doveadm_mail_try_run(const char *cmd_name, int argc, char *argv[]);
71
83
void doveadm_mail_register_cmd(const struct doveadm_mail_cmd *cmd);
83
95
struct doveadm_mail_cmd_context *
84
96
doveadm_mail_cmd_init(const struct doveadm_mail_cmd *cmd,
85
97
const struct doveadm_settings *set);
86
void doveadm_mail_single_user(struct doveadm_mail_cmd_context *ctx, char *argv[],
87
const struct mail_storage_service_input *input,
88
enum mail_storage_service_flags service_flags);
98
int doveadm_mail_single_user(struct doveadm_mail_cmd_context *ctx,
99
const struct mail_storage_service_input *input,
100
const char **error_r);
89
101
int doveadm_mail_server_user(struct doveadm_mail_cmd_context *ctx,
90
102
const struct mail_storage_service_input *input,
91
103
const char **error_r);
92
104
void doveadm_mail_server_flush(void);
107
doveadm_mailbox_find(struct mail_user *user, const char *mailbox);
94
108
int doveadm_mailbox_find_and_sync(struct mail_user *user, const char *mailbox,
95
109
struct mailbox **box_r);
96
110
struct mail_search_args *
97
111
doveadm_mail_build_search_args(const char *const args[]);
98
const char *const *doveadm_mailbox_args_to_mutf7(const char *const args[]);
112
void doveadm_mailbox_args_check(const char *const args[]);
99
113
struct mail_search_args *
100
114
doveadm_mail_mailbox_search_args_build(const char *const args[]);
106
120
#define doveadm_mail_cmd_alloc(type) \
107
121
(type *)doveadm_mail_cmd_alloc_size(sizeof(type))
123
void doveadm_mail_failed_error(struct doveadm_mail_cmd_context *ctx,
124
enum mail_error error);
125
void doveadm_mail_failed_storage(struct doveadm_mail_cmd_context *ctx,
126
struct mail_storage *storage);
127
void doveadm_mail_failed_mailbox(struct doveadm_mail_cmd_context *ctx,
128
struct mailbox *box);
109
130
struct doveadm_mail_cmd cmd_expunge;
110
131
struct doveadm_mail_cmd cmd_search;
111
132
struct doveadm_mail_cmd cmd_fetch;