Cross Reference: /dovecot/src/doveadm/doveadm-mail-mailbox-status.c
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 */
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen#include "lib.h"
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen#include "str.h"
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen#include "mail-namespace.h"
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen#include "mail-storage.h"
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen#include "doveadm-print.h"
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen#include "doveadm-mail.h"
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen#include "doveadm-mail-list-iter.h"
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen
14e0f6334476ed4616e4737a277fc7d9b2aa1151Timo Sirainen#define ALL_STATUS_ITEMS \
14e0f6334476ed4616e4737a277fc7d9b2aa1151Timo Sirainen (STATUS_MESSAGES | STATUS_RECENT | \
14e0f6334476ed4616e4737a277fc7d9b2aa1151Timo Sirainen STATUS_UIDNEXT | STATUS_UIDVALIDITY | \
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen STATUS_UNSEEN | STATUS_HIGHESTMODSEQ)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen#define ALL_METADATA_ITEMS \
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen (MAILBOX_METADATA_VIRTUAL_SIZE | MAILBOX_METADATA_GUID)
14e0f6334476ed4616e4737a277fc7d9b2aa1151Timo Sirainen
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen#define TOTAL_STATUS_ITEMS \
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen (STATUS_MESSAGES | STATUS_RECENT | STATUS_UNSEEN)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen#define TOTAL_METADATA_ITEMS \
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen (MAILBOX_METADATA_VIRTUAL_SIZE)
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainenstruct status_cmd_context {
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen struct doveadm_mail_cmd_context ctx;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen struct mail_search_args *search_args;
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen enum mailbox_status_items status_items;
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen enum mailbox_metadata_items metadata_items;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen struct mailbox_status total_status;
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen struct mailbox_metadata total_metadata;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen unsigned int total_sum:1;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen};
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainenstatic void status_parse_fields(struct status_cmd_context *ctx,
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen const char *const *fields)
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen{
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen if (*fields == NULL)
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen i_fatal("No status fields");
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen for (; *fields != NULL; fields++) {
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen const char *field = *fields;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen
14e0f6334476ed4616e4737a277fc7d9b2aa1151Timo Sirainen if (strcmp(field, "all") == 0) {
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if (ctx->total_sum) {
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen ctx->status_items |= TOTAL_STATUS_ITEMS;
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen ctx->metadata_items |= TOTAL_METADATA_ITEMS;
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen } else {
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen ctx->status_items |= ALL_STATUS_ITEMS;
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen ctx->metadata_items |= ALL_METADATA_ITEMS;
14e0f6334476ed4616e4737a277fc7d9b2aa1151Timo Sirainen }
14e0f6334476ed4616e4737a277fc7d9b2aa1151Timo Sirainen } else if (strcmp(field, "messages") == 0)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen ctx->status_items |= STATUS_MESSAGES;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen else if (strcmp(field, "recent") == 0)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen ctx->status_items |= STATUS_RECENT;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen else if (strcmp(field, "uidnext") == 0)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen ctx->status_items |= STATUS_UIDNEXT;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen else if (strcmp(field, "uidvalidity") == 0)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen ctx->status_items |= STATUS_UIDVALIDITY;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen else if (strcmp(field, "unseen") == 0)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen ctx->status_items |= STATUS_UNSEEN;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen else if (strcmp(field, "highestmodseq") == 0)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen ctx->status_items |= STATUS_HIGHESTMODSEQ;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen else if (strcmp(field, "vsize") == 0)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen ctx->metadata_items |= MAILBOX_METADATA_VIRTUAL_SIZE;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen else if (strcmp(field, "guid") == 0)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen ctx->metadata_items |= MAILBOX_METADATA_GUID;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen else
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen i_fatal("Unknown status field: %s", field);
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen if (ctx->total_sum &&
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 Sirainen }
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen}
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainenstatic void status_output(struct status_cmd_context *ctx, struct mailbox *box,
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen const struct mailbox_status *status,
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen const struct mailbox_metadata *metadata)
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen{
636f017be100bce67d66fd3ae1544a47681efd33Timo Sirainen if (box != NULL)
636f017be100bce67d66fd3ae1544a47681efd33Timo Sirainen doveadm_print(mailbox_get_vname(box));
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->status_items & STATUS_MESSAGES) != 0)
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen doveadm_print_num(status->messages);
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->status_items & STATUS_RECENT) != 0)
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen doveadm_print_num(status->recent);
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->status_items & STATUS_UIDNEXT) != 0)
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen doveadm_print_num(status->uidnext);
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->status_items & STATUS_UIDVALIDITY) != 0)
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen doveadm_print_num(status->uidvalidity);
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->status_items & STATUS_UNSEEN) != 0)
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen doveadm_print_num(status->unseen);
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->status_items & STATUS_HIGHESTMODSEQ) != 0)
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen doveadm_print_num(status->highest_modseq);
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->metadata_items & MAILBOX_METADATA_VIRTUAL_SIZE) != 0)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen doveadm_print_num(metadata->virtual_size);
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->metadata_items & MAILBOX_METADATA_GUID) != 0)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen doveadm_print(mail_guid_128_to_string(metadata->guid));
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen}
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainenstatic void
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainenstatus_sum(struct status_cmd_context *ctx,
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen const struct mailbox_status *status,
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen const struct mailbox_metadata *metadata)
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen{
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen struct mailbox_status *dest = &ctx->total_status;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen dest->messages += status->messages;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen dest->recent += status->recent;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen dest->unseen += status->unseen;
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen ctx->total_metadata.virtual_size += metadata->virtual_size;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen}
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainenstatic void
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainenstatus_mailbox(struct status_cmd_context *ctx, const struct mailbox_info *info)
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen{
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen struct mailbox *box;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen struct mailbox_status status;
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen struct mailbox_metadata metadata;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen
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) {
97437f768d1a3e6134fed1971202803fd250eef2Timo Sirainen ctx->ctx.failed = TRUE;
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen mailbox_free(&box);
97437f768d1a3e6134fed1971202803fd250eef2Timo Sirainen return;
97437f768d1a3e6134fed1971202803fd250eef2Timo Sirainen }
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen if (!ctx->total_sum)
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen status_output(ctx, box, &status, &metadata);
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen else
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen status_sum(ctx, &status, &metadata);
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen mailbox_free(&box);
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen}
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainenstatic void
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainencmd_mailbox_status_run(struct doveadm_mail_cmd_context *_ctx,
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen struct mail_user *user)
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen{
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen struct status_cmd_context *ctx = (struct status_cmd_context *)_ctx;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen enum mailbox_list_iter_flags iter_flags =
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen MAILBOX_LIST_ITER_RAW_LIST |
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen MAILBOX_LIST_ITER_NO_AUTO_INBOX |
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen MAILBOX_LIST_ITER_RETURN_NO_FLAGS;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen struct doveadm_mail_list_iter *iter;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen const struct mailbox_info *info;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen memset(&ctx->total_status, 0, sizeof(ctx->total_status));
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen
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 Sirainen T_BEGIN {
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen status_mailbox(ctx, info);
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen } T_END;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen }
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen doveadm_mail_list_iter_deinit(&iter);
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if (ctx->total_sum) {
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen status_output(ctx, NULL, &ctx->total_status,
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen &ctx->total_metadata);
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen }
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen}
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainenstatic void cmd_mailbox_status_init(struct doveadm_mail_cmd_context *_ctx,
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen const char *const args[])
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen{
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen struct status_cmd_context *ctx = (struct status_cmd_context *)_ctx;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen const char *fields = args[0];
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen if (fields == NULL || args[1] == NULL)
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen doveadm_mail_help_name("mailbox status");
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen status_parse_fields(ctx, t_strsplit_spaces(fields, " "));
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen ctx->search_args = doveadm_mail_mailbox_search_args_build(args);
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen if (!ctx->total_sum) {
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen doveadm_print_header("mailbox", "mailbox",
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen DOVEADM_PRINT_HEADER_FLAG_HIDE_TITLE);
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen }
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->status_items & STATUS_MESSAGES) != 0)
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen doveadm_print_header_simple("messages");
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->status_items & STATUS_RECENT) != 0)
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen doveadm_print_header_simple("recent");
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->status_items & STATUS_UIDNEXT) != 0)
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen doveadm_print_header_simple("uidnext");
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->status_items & STATUS_UIDVALIDITY) != 0)
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen doveadm_print_header_simple("uidvalidity");
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->status_items & STATUS_UNSEEN) != 0)
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen doveadm_print_header_simple("unseen");
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->status_items & STATUS_HIGHESTMODSEQ) != 0)
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen doveadm_print_header_simple("highestmodseq");
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->metadata_items & MAILBOX_METADATA_VIRTUAL_SIZE) != 0)
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen doveadm_print_header_simple("vsize");
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen if ((ctx->metadata_items & MAILBOX_METADATA_GUID) != 0)
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen doveadm_print_header_simple("guid");
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen}
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainenstatic bool
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainencmd_mailbox_status_parse_arg(struct doveadm_mail_cmd_context *_ctx, int c)
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen{
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen struct status_cmd_context *ctx = (struct status_cmd_context *)_ctx;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen switch (c) {
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen case 't':
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen ctx->total_sum = TRUE;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen break;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen default:
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen return FALSE;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen }
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen return TRUE;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen}
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainenstatic struct doveadm_mail_cmd_context *cmd_mailbox_status_alloc(void)
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen{
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen struct status_cmd_context *ctx;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen ctx = doveadm_mail_cmd_alloc(struct status_cmd_context);
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen ctx->ctx.getopt_args = "t";
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen ctx->ctx.v.parse_arg = cmd_mailbox_status_parse_arg;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen ctx->ctx.v.init = cmd_mailbox_status_init;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen ctx->ctx.v.run = cmd_mailbox_status_run;
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen doveadm_print_init(DOVEADM_PRINT_TYPE_FLOW);
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen return &ctx->ctx;
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen}
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainenstruct doveadm_mail_cmd cmd_mailbox_status = {
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen cmd_mailbox_status_alloc, "mailbox status",
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen "[-t] <fields> <mailbox mask> [...]"
b8b085f7bc6f1c0367802a9f00062bbbd981690dTimo Sirainen};