doveadm-mail-mailbox-status.c revision 636f017be100bce67d66fd3ae1544a47681efd33
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen/* Copyright (c) 2010 Dovecot authors, see the included COPYING file */
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen (MAILBOX_METADATA_VIRTUAL_SIZE | MAILBOX_METADATA_GUID)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen (STATUS_MESSAGES | STATUS_RECENT | STATUS_UNSEEN)
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainenstatic void status_parse_fields(struct status_cmd_context *ctx,
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen const char *const *fields)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen ctx->metadata_items |= MAILBOX_METADATA_VIRTUAL_SIZE;
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen ((ctx->status_items & ~TOTAL_STATUS_ITEMS) != 0 ||
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen (ctx->metadata_items & ~TOTAL_METADATA_ITEMS) != 0))
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen i_fatal("Status field %s can't be used with -t", field);
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainenstatic void status_output(struct status_cmd_context *ctx, struct mailbox *box,
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->status_items & STATUS_MESSAGES) != 0)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->status_items & STATUS_UIDNEXT) != 0)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->status_items & STATUS_UIDVALIDITY) != 0)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->status_items & STATUS_HIGHESTMODSEQ) != 0)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->metadata_items & MAILBOX_METADATA_VIRTUAL_SIZE) != 0)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->metadata_items & MAILBOX_METADATA_GUID) != 0)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen doveadm_print(mail_guid_128_to_string(metadata->guid));
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen struct mailbox_status *dest = &ctx->total_status;
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen ctx->total_metadata.virtual_size += metadata->virtual_size;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainenstatus_mailbox(struct status_cmd_context *ctx, const struct mailbox_info *info)
636f017be100bce67d66fd3ae1544a47681efd33Timo Sirainen box = doveadm_mailbox_find(ctx->ctx.cur_mail_user, info->name);
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if (mailbox_get_status(box, ctx->status_items, &status) < 0 ||
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen mailbox_get_metadata(box, ctx->metadata_items, &metadata) < 0) {
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainencmd_mailbox_status_run(struct doveadm_mail_cmd_context *_ctx,
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen struct status_cmd_context *ctx = (struct status_cmd_context *)_ctx;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen memset(&ctx->total_status, 0, sizeof(ctx->total_status));
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen iter = doveadm_mail_list_iter_init(user, ctx->search_args, iter_flags);
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen while ((info = doveadm_mail_list_iter_next(iter)) != NULL) {
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainenstatic void cmd_mailbox_status_init(struct doveadm_mail_cmd_context *_ctx,
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen const char *const args[])
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen struct status_cmd_context *ctx = (struct status_cmd_context *)_ctx;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen status_parse_fields(ctx, t_strsplit_spaces(fields, " "));
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen ctx->search_args = doveadm_mail_mailbox_search_args_build(args);
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->status_items & STATUS_MESSAGES) != 0)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->status_items & STATUS_UIDNEXT) != 0)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->status_items & STATUS_UIDVALIDITY) != 0)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->status_items & STATUS_HIGHESTMODSEQ) != 0)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->metadata_items & MAILBOX_METADATA_VIRTUAL_SIZE) != 0)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->metadata_items & MAILBOX_METADATA_GUID) != 0)
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainencmd_mailbox_status_parse_arg(struct doveadm_mail_cmd_context *_ctx, int c)
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen struct status_cmd_context *ctx = (struct status_cmd_context *)_ctx;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainenstatic struct doveadm_mail_cmd_context *cmd_mailbox_status_alloc(void)
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen ctx = doveadm_mail_cmd_alloc(struct status_cmd_context);
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen ctx->ctx.v.parse_arg = cmd_mailbox_status_parse_arg;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen "[-t] <fields> <mailbox mask> [...]"