Mercurial > dovecot > core-2.2
annotate src/doveadm/doveadm-mail-fetch.c @ 17134:36d11bf4e58d
doveadm fetch: Added pop3.order field.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Fri, 07 Feb 2014 14:24:44 -0500 |
parents | add8c00fb3cc |
children | 63361f087d1f |
rev | line source |
---|---|
17130
add8c00fb3cc
Updated copyright notices to include year 2014.
Timo Sirainen <tss@iki.fi>
parents:
16332
diff
changeset
|
1 /* Copyright (c) 2010-2014 Dovecot authors, see the included COPYING file */ |
11147
51eea5bb3336
doveadm: Added initial code for fetch command.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2 |
51eea5bb3336
doveadm: Added initial code for fetch command.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 #include "lib.h" |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
4 #include "array.h" |
11147
51eea5bb3336
doveadm: Added initial code for fetch command.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
5 #include "istream.h" |
51eea5bb3336
doveadm: Added initial code for fetch command.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
6 #include "ostream.h" |
51eea5bb3336
doveadm: Added initial code for fetch command.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
7 #include "str.h" |
14001
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
8 #include "message-address.h" |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
9 #include "message-size.h" |
13999
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
10 #include "message-parser.h" |
14058
ceadfe9009aa
doveadm fetch: Added support for hdr.*.utf8 fields.
Timo Sirainen <tss@iki.fi>
parents:
14002
diff
changeset
|
11 #include "message-header-decode.h" |
13999
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
12 #include "message-decoder.h" |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
13 #include "imap-util.h" |
11511
9f9f9d9e4a79
doveadm fetch: Added "user" field.
Timo Sirainen <tss@iki.fi>
parents:
11409
diff
changeset
|
14 #include "mail-user.h" |
11147
51eea5bb3336
doveadm: Added initial code for fetch command.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
15 #include "mail-storage.h" |
11236
47d49b7edb4b
doveadm fetch: Don't print mail separator if fetching only a specific mail.
Timo Sirainen <tss@iki.fi>
parents:
11233
diff
changeset
|
16 #include "mail-search.h" |
11588
9a852084bbeb
doveadm: Fixed assert-crash when listing mailbox foo/*
Timo Sirainen <tss@iki.fi>
parents:
11511
diff
changeset
|
17 #include "mail-namespace.h" |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
18 #include "doveadm-print.h" |
11147
51eea5bb3336
doveadm: Added initial code for fetch command.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
19 #include "doveadm-mail.h" |
14137
0a5951b08478
doveadm: Improved error handling. Failures should now always have non-zero exit code.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
20 #include "doveadm-mailbox-list-iter.h" |
11209
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
21 #include "doveadm-mail-iter.h" |
11205
dab4fb9f8140
doveadm fetch: Added support for fetching mails from multiple mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11175
diff
changeset
|
22 |
11207
1ec4eb879f0e
doveadm fetch: If invalid fetch field is given, print list of available fields.
Timo Sirainen <tss@iki.fi>
parents:
11206
diff
changeset
|
23 #include <stdio.h> |
1ec4eb879f0e
doveadm fetch: If invalid fetch field is given, print list of available fields.
Timo Sirainen <tss@iki.fi>
parents:
11206
diff
changeset
|
24 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
25 struct fetch_cmd_context { |
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
26 struct doveadm_mail_cmd_context ctx; |
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
27 |
11205
dab4fb9f8140
doveadm fetch: Added support for fetching mails from multiple mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11175
diff
changeset
|
28 struct ostream *output; |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
29 struct mail *mail; |
11205
dab4fb9f8140
doveadm fetch: Added support for fetching mails from multiple mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11175
diff
changeset
|
30 |
15903 | 31 ARRAY(struct fetch_field) fields; |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
32 ARRAY_TYPE(const_string) header_fields; |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
33 enum mail_fetch_field wanted_fields; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
34 |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
35 const struct fetch_field *cur_field; |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
36 }; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
37 |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
38 struct fetch_field { |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
39 const char *name; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
40 enum mail_fetch_field wanted_fields; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
41 int (*print)(struct fetch_cmd_context *ctx); |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
42 }; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
43 |
11511
9f9f9d9e4a79
doveadm fetch: Added "user" field.
Timo Sirainen <tss@iki.fi>
parents:
11409
diff
changeset
|
44 static int fetch_user(struct fetch_cmd_context *ctx) |
9f9f9d9e4a79
doveadm fetch: Added "user" field.
Timo Sirainen <tss@iki.fi>
parents:
11409
diff
changeset
|
45 { |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
46 doveadm_print(ctx->ctx.cur_mail_user->username); |
11511
9f9f9d9e4a79
doveadm fetch: Added "user" field.
Timo Sirainen <tss@iki.fi>
parents:
11409
diff
changeset
|
47 return 0; |
9f9f9d9e4a79
doveadm fetch: Added "user" field.
Timo Sirainen <tss@iki.fi>
parents:
11409
diff
changeset
|
48 } |
9f9f9d9e4a79
doveadm fetch: Added "user" field.
Timo Sirainen <tss@iki.fi>
parents:
11409
diff
changeset
|
49 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
50 static int fetch_mailbox(struct fetch_cmd_context *ctx) |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
51 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
52 const char *value; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
53 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
54 if (mail_get_special(ctx->mail, MAIL_FETCH_MAILBOX_NAME, &value) < 0) |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
55 return -1; |
11409
93eaae8617c8
doveadm fetch: mailbox field value is printed as UTF-8, not mUTF-7.
Timo Sirainen <tss@iki.fi>
parents:
11395
diff
changeset
|
56 |
12629
02370eda76f8
lib-storage: Mailbox virtual names are now in UTF-8 format, not IMAP mUTF-7.
Timo Sirainen <tss@iki.fi>
parents:
12585
diff
changeset
|
57 doveadm_print(value); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
58 return 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
59 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
60 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
61 static int fetch_mailbox_guid(struct fetch_cmd_context *ctx) |
11233
5d0027f17bd8
doveadm fetch: Added support for mailbox-guid search key/fetch field.
Timo Sirainen <tss@iki.fi>
parents:
11209
diff
changeset
|
62 { |
12550
2c299c0e3bc8
lib-storage: Moved some items from mailbox_get_status() to a new mailbox_get_metadata().
Timo Sirainen <tss@iki.fi>
parents:
12341
diff
changeset
|
63 struct mailbox_metadata metadata; |
11233
5d0027f17bd8
doveadm fetch: Added support for mailbox-guid search key/fetch field.
Timo Sirainen <tss@iki.fi>
parents:
11209
diff
changeset
|
64 |
12550
2c299c0e3bc8
lib-storage: Moved some items from mailbox_get_status() to a new mailbox_get_metadata().
Timo Sirainen <tss@iki.fi>
parents:
12341
diff
changeset
|
65 if (mailbox_get_metadata(ctx->mail->box, MAILBOX_METADATA_GUID, |
2c299c0e3bc8
lib-storage: Moved some items from mailbox_get_status() to a new mailbox_get_metadata().
Timo Sirainen <tss@iki.fi>
parents:
12341
diff
changeset
|
66 &metadata) < 0) |
11233
5d0027f17bd8
doveadm fetch: Added support for mailbox-guid search key/fetch field.
Timo Sirainen <tss@iki.fi>
parents:
11209
diff
changeset
|
67 return -1; |
13287
957060ca5b69
Moved GUID code to liblib. Use guid_128_t type consistently everywhere.
Timo Sirainen <tss@iki.fi>
parents:
12973
diff
changeset
|
68 doveadm_print(guid_128_to_string(metadata.guid)); |
11233
5d0027f17bd8
doveadm fetch: Added support for mailbox-guid search key/fetch field.
Timo Sirainen <tss@iki.fi>
parents:
11209
diff
changeset
|
69 return 0; |
5d0027f17bd8
doveadm fetch: Added support for mailbox-guid search key/fetch field.
Timo Sirainen <tss@iki.fi>
parents:
11209
diff
changeset
|
70 } |
5d0027f17bd8
doveadm fetch: Added support for mailbox-guid search key/fetch field.
Timo Sirainen <tss@iki.fi>
parents:
11209
diff
changeset
|
71 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
72 static int fetch_seq(struct fetch_cmd_context *ctx) |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
73 { |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
74 doveadm_print_num(ctx->mail->seq); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
75 return 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
76 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
77 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
78 static int fetch_uid(struct fetch_cmd_context *ctx) |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
79 { |
12213
d6582f3ee54d
doveadm fetch: Fixed fetching uid field.
Timo Sirainen <tss@iki.fi>
parents:
11790
diff
changeset
|
80 doveadm_print_num(ctx->mail->uid); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
81 return 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
82 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
83 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
84 static int fetch_guid(struct fetch_cmd_context *ctx) |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
85 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
86 const char *value; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
87 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
88 if (mail_get_special(ctx->mail, MAIL_FETCH_GUID, &value) < 0) |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
89 return -1; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
90 doveadm_print(value); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
91 return 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
92 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
93 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
94 static int fetch_flags(struct fetch_cmd_context *ctx) |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
95 { |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
96 string_t *str = t_str_new(64); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
97 |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
98 imap_write_flags(str, mail_get_flags(ctx->mail), |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
99 mail_get_keywords(ctx->mail)); |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
100 doveadm_print(str_c(str)); |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
101 return 0; |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
102 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
103 |
15701
61aaf4102761
doveadm fetch: Added "modseq" field.
Timo Sirainen <tss@iki.fi>
parents:
15053
diff
changeset
|
104 static int fetch_modseq(struct fetch_cmd_context *ctx) |
61aaf4102761
doveadm fetch: Added "modseq" field.
Timo Sirainen <tss@iki.fi>
parents:
15053
diff
changeset
|
105 { |
61aaf4102761
doveadm fetch: Added "modseq" field.
Timo Sirainen <tss@iki.fi>
parents:
15053
diff
changeset
|
106 doveadm_print_num(mail_get_modseq(ctx->mail)); |
61aaf4102761
doveadm fetch: Added "modseq" field.
Timo Sirainen <tss@iki.fi>
parents:
15053
diff
changeset
|
107 return 0; |
61aaf4102761
doveadm fetch: Added "modseq" field.
Timo Sirainen <tss@iki.fi>
parents:
15053
diff
changeset
|
108 } |
61aaf4102761
doveadm fetch: Added "modseq" field.
Timo Sirainen <tss@iki.fi>
parents:
15053
diff
changeset
|
109 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
110 static int fetch_hdr(struct fetch_cmd_context *ctx) |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
111 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
112 struct istream *input; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
113 struct message_size hdr_size; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
114 const unsigned char *data; |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
115 size_t size; |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
116 int ret = 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
117 |
13601
276a39ebda4d
lib-storage: Added mail_get_hdr_stream() and use it where possible.
Timo Sirainen <tss@iki.fi>
parents:
13287
diff
changeset
|
118 if (mail_get_hdr_stream(ctx->mail, &hdr_size, &input) < 0) |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
119 return -1; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
120 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
121 input = i_stream_create_limit(input, hdr_size.physical_size); |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
122 while (!i_stream_is_eof(input)) { |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
123 if (i_stream_read_data(input, &data, &size, 0) == -1) |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
124 break; |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
125 if (size == 0) |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
126 break; |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
127 doveadm_print_stream(data, size); |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
128 i_stream_skip(input, size); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
129 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
130 if (input->stream_errno != 0) { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
131 i_error("read() failed: %m"); |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
132 ret = -1; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
133 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
134 i_stream_unref(&input); |
14629
c93ca5e46a8a
Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
Timo Sirainen <tss@iki.fi>
parents:
14137
diff
changeset
|
135 doveadm_print_stream("", 0); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
136 return ret; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
137 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
138 |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
139 static int fetch_hdr_field(struct fetch_cmd_context *ctx) |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
140 { |
14001
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
141 const char *const *value, *filter, *name = ctx->cur_field->name; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
142 string_t *str = t_str_new(256); |
14058
ceadfe9009aa
doveadm fetch: Added support for hdr.*.utf8 fields.
Timo Sirainen <tss@iki.fi>
parents:
14002
diff
changeset
|
143 unsigned int pos; |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
144 bool add_lf = FALSE; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
145 |
14001
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
146 filter = strchr(name, '.'); |
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
147 if (filter != NULL) |
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
148 name = t_strdup_until(name, filter++); |
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
149 |
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
150 if (mail_get_headers(ctx->mail, name, &value) < 0) |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
151 return -1; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
152 |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
153 for (; *value != NULL; value++) { |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
154 if (add_lf) |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
155 str_append_c(str, '\n'); |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
156 str_append(str, *value); |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
157 add_lf = TRUE; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
158 } |
14001
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
159 |
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
160 if (filter == NULL) { |
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
161 /* print the header as-is */ |
14058
ceadfe9009aa
doveadm fetch: Added support for hdr.*.utf8 fields.
Timo Sirainen <tss@iki.fi>
parents:
14002
diff
changeset
|
162 } else if (strcmp(filter, "utf8") == 0) { |
ceadfe9009aa
doveadm fetch: Added support for hdr.*.utf8 fields.
Timo Sirainen <tss@iki.fi>
parents:
14002
diff
changeset
|
163 pos = str_len(str); |
ceadfe9009aa
doveadm fetch: Added support for hdr.*.utf8 fields.
Timo Sirainen <tss@iki.fi>
parents:
14002
diff
changeset
|
164 message_header_decode_utf8(str_data(str), str_len(str), |
ceadfe9009aa
doveadm fetch: Added support for hdr.*.utf8 fields.
Timo Sirainen <tss@iki.fi>
parents:
14002
diff
changeset
|
165 str, FALSE); |
ceadfe9009aa
doveadm fetch: Added support for hdr.*.utf8 fields.
Timo Sirainen <tss@iki.fi>
parents:
14002
diff
changeset
|
166 str_delete(str, 0, pos); |
14001
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
167 } else if (strcmp(filter, "address") == 0 || |
14058
ceadfe9009aa
doveadm fetch: Added support for hdr.*.utf8 fields.
Timo Sirainen <tss@iki.fi>
parents:
14002
diff
changeset
|
168 strcmp(filter, "address_name") == 0 || |
ceadfe9009aa
doveadm fetch: Added support for hdr.*.utf8 fields.
Timo Sirainen <tss@iki.fi>
parents:
14002
diff
changeset
|
169 strcmp(filter, "address_name.utf8") == 0) { |
14001
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
170 struct message_address *addr; |
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
171 |
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
172 addr = message_address_parse(pool_datastack_create(), |
15904
d3cf06639864
Replaced all -1U and (unsigned int)-1 with UINT_MAX.
Timo Sirainen <tss@iki.fi>
parents:
15903
diff
changeset
|
173 str_data(str), str_len(str), |
d3cf06639864
Replaced all -1U and (unsigned int)-1 with UINT_MAX.
Timo Sirainen <tss@iki.fi>
parents:
15903
diff
changeset
|
174 UINT_MAX, FALSE); |
14001
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
175 str_truncate(str, 0); |
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
176 add_lf = FALSE; |
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
177 for (; addr != NULL; addr = addr->next) { |
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
178 if (add_lf) |
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
179 str_append_c(str, '\n'); |
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
180 if (strcmp(filter, "address") == 0) { |
14002
afeabe28a499
doveadm fetch hdr.*.adddress*: Don't crash when printing groups.
Timo Sirainen <tss@iki.fi>
parents:
14001
diff
changeset
|
181 if (addr->mailbox != NULL) |
afeabe28a499
doveadm fetch hdr.*.adddress*: Don't crash when printing groups.
Timo Sirainen <tss@iki.fi>
parents:
14001
diff
changeset
|
182 str_append(str, addr->mailbox); |
afeabe28a499
doveadm fetch hdr.*.adddress*: Don't crash when printing groups.
Timo Sirainen <tss@iki.fi>
parents:
14001
diff
changeset
|
183 if (addr->domain != NULL) { |
afeabe28a499
doveadm fetch hdr.*.adddress*: Don't crash when printing groups.
Timo Sirainen <tss@iki.fi>
parents:
14001
diff
changeset
|
184 str_append_c(str, '@'); |
afeabe28a499
doveadm fetch hdr.*.adddress*: Don't crash when printing groups.
Timo Sirainen <tss@iki.fi>
parents:
14001
diff
changeset
|
185 str_append(str, addr->domain); |
afeabe28a499
doveadm fetch hdr.*.adddress*: Don't crash when printing groups.
Timo Sirainen <tss@iki.fi>
parents:
14001
diff
changeset
|
186 } |
14058
ceadfe9009aa
doveadm fetch: Added support for hdr.*.utf8 fields.
Timo Sirainen <tss@iki.fi>
parents:
14002
diff
changeset
|
187 } else if (addr->name != NULL) { |
ceadfe9009aa
doveadm fetch: Added support for hdr.*.utf8 fields.
Timo Sirainen <tss@iki.fi>
parents:
14002
diff
changeset
|
188 if (strcmp(filter, "address_name") == 0) |
14002
afeabe28a499
doveadm fetch hdr.*.adddress*: Don't crash when printing groups.
Timo Sirainen <tss@iki.fi>
parents:
14001
diff
changeset
|
189 str_append(str, addr->name); |
14058
ceadfe9009aa
doveadm fetch: Added support for hdr.*.utf8 fields.
Timo Sirainen <tss@iki.fi>
parents:
14002
diff
changeset
|
190 else { |
ceadfe9009aa
doveadm fetch: Added support for hdr.*.utf8 fields.
Timo Sirainen <tss@iki.fi>
parents:
14002
diff
changeset
|
191 message_header_decode_utf8( |
ceadfe9009aa
doveadm fetch: Added support for hdr.*.utf8 fields.
Timo Sirainen <tss@iki.fi>
parents:
14002
diff
changeset
|
192 (const void *)addr->name, |
ceadfe9009aa
doveadm fetch: Added support for hdr.*.utf8 fields.
Timo Sirainen <tss@iki.fi>
parents:
14002
diff
changeset
|
193 strlen(addr->name), str, FALSE); |
ceadfe9009aa
doveadm fetch: Added support for hdr.*.utf8 fields.
Timo Sirainen <tss@iki.fi>
parents:
14002
diff
changeset
|
194 } |
14001
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
195 } |
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
196 add_lf = TRUE; |
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
197 } |
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
198 } else { |
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
199 i_fatal("Unknown header filter: %s", filter); |
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
200 } |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
201 doveadm_print(str_c(str)); |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
202 return 0; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
203 } |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
204 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
205 static int fetch_body(struct fetch_cmd_context *ctx) |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
206 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
207 struct istream *input; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
208 struct message_size hdr_size; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
209 const unsigned char *data; |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
210 size_t size; |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
211 int ret = 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
212 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
213 if (mail_get_stream(ctx->mail, &hdr_size, NULL, &input) < 0) |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
214 return -1; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
215 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
216 i_stream_skip(input, hdr_size.physical_size); |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
217 while (!i_stream_is_eof(input)) { |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
218 if (i_stream_read_data(input, &data, &size, 0) == -1) |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
219 break; |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
220 if (size == 0) |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
221 break; |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
222 doveadm_print_stream(data, size); |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
223 i_stream_skip(input, size); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
224 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
225 if (input->stream_errno != 0) { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
226 i_error("read() failed: %m"); |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
227 ret = -1; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
228 } |
14629
c93ca5e46a8a
Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
Timo Sirainen <tss@iki.fi>
parents:
14137
diff
changeset
|
229 doveadm_print_stream("", 0); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
230 return ret; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
231 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
232 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
233 static int fetch_text(struct fetch_cmd_context *ctx) |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
234 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
235 struct istream *input; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
236 const unsigned char *data; |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
237 size_t size; |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
238 int ret = 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
239 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
240 if (mail_get_stream(ctx->mail, NULL, NULL, &input) < 0) |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
241 return -1; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
242 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
243 while (!i_stream_is_eof(input)) { |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
244 if (i_stream_read_data(input, &data, &size, 0) == -1) |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
245 break; |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
246 if (size == 0) |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
247 break; |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
248 doveadm_print_stream(data, size); |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
249 i_stream_skip(input, size); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
250 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
251 if (input->stream_errno != 0) { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
252 i_error("read() failed: %m"); |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
253 ret = -1; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
254 } |
14629
c93ca5e46a8a
Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
Timo Sirainen <tss@iki.fi>
parents:
14137
diff
changeset
|
255 doveadm_print_stream("", 0); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
256 return ret; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
257 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
258 |
13999
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
259 static int fetch_text_utf8(struct fetch_cmd_context *ctx) |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
260 { |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
261 struct istream *input; |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
262 struct message_parser_ctx *parser; |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
263 struct message_decoder_context *decoder; |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
264 struct message_block raw_block, block; |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
265 struct message_part *parts; |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
266 int ret = 0; |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
267 |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
268 if (mail_get_stream(ctx->mail, NULL, NULL, &input) < 0) |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
269 return -1; |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
270 |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
271 parser = message_parser_init(pool_datastack_create(), input, |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
272 MESSAGE_HEADER_PARSER_FLAG_CLEAN_ONELINE, |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
273 0); |
15053
c976a9c01613
Replaced "decomposed titlecase" conversions with more generic normalizer function.
Timo Sirainen <tss@iki.fi>
parents:
14920
diff
changeset
|
274 decoder = message_decoder_init(NULL, 0); |
13999
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
275 |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
276 while ((ret = message_parser_parse_next_block(parser, &raw_block)) > 0) { |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
277 if (!message_decoder_decode_next_block(decoder, &raw_block, |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
278 &block)) |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
279 continue; |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
280 |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
281 if (block.hdr == NULL) { |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
282 if (block.size > 0) |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
283 doveadm_print_stream(block.data, block.size); |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
284 } else if (block.hdr->eoh) |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
285 doveadm_print_stream("\n", 1); |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
286 else { |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
287 i_assert(block.hdr->name_len > 0); |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
288 doveadm_print_stream(block.hdr->name, |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
289 block.hdr->name_len); |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
290 doveadm_print_stream(": ", 2); |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
291 if (block.hdr->full_value_len > 0) { |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
292 doveadm_print_stream(block.hdr->full_value, |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
293 block.hdr->full_value_len); |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
294 } |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
295 doveadm_print_stream("\n", 1); |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
296 } |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
297 } |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
298 i_assert(ret != 0); |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
299 message_decoder_deinit(&decoder); |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
300 (void)message_parser_deinit(&parser, &parts); |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
301 |
14629
c93ca5e46a8a
Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
Timo Sirainen <tss@iki.fi>
parents:
14137
diff
changeset
|
302 doveadm_print_stream("", 0); |
13999
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
303 if (input->stream_errno != 0) { |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
304 i_error("read() failed: %m"); |
14000
2418871d09f5
doveadm fetch text.utf8: Don't return failure on success.
Timo Sirainen <tss@iki.fi>
parents:
13999
diff
changeset
|
305 return -1; |
13999
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
306 } |
14000
2418871d09f5
doveadm fetch text.utf8: Don't return failure on success.
Timo Sirainen <tss@iki.fi>
parents:
13999
diff
changeset
|
307 return 0; |
13999
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
308 } |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
309 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
310 static int fetch_size_physical(struct fetch_cmd_context *ctx) |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
311 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
312 uoff_t size; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
313 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
314 if (mail_get_physical_size(ctx->mail, &size) < 0) |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
315 return -1; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
316 doveadm_print_num(size); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
317 return 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
318 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
319 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
320 static int fetch_size_virtual(struct fetch_cmd_context *ctx) |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
321 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
322 uoff_t size; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
323 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
324 if (mail_get_virtual_size(ctx->mail, &size) < 0) |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
325 return -1; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
326 doveadm_print_num(size); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
327 return 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
328 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
329 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
330 static int fetch_date_received(struct fetch_cmd_context *ctx) |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
331 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
332 time_t t; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
333 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
334 if (mail_get_received_date(ctx->mail, &t) < 0) |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
335 return -1; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
336 doveadm_print(unixdate2str(t)); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
337 return 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
338 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
339 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
340 static int fetch_date_sent(struct fetch_cmd_context *ctx) |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
341 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
342 time_t t; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
343 int tz; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
344 char chr; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
345 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
346 if (mail_get_date(ctx->mail, &t, &tz) < 0) |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
347 return -1; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
348 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
349 chr = tz < 0 ? '-' : '+'; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
350 if (tz < 0) tz = -tz; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
351 doveadm_print(t_strdup_printf("%s (%c%02u%02u)", unixdate2str(t), |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
352 chr, tz/60, tz%60)); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
353 return 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
354 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
355 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
356 static int fetch_date_saved(struct fetch_cmd_context *ctx) |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
357 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
358 time_t t; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
359 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
360 if (mail_get_save_date(ctx->mail, &t) < 0) |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
361 return -1; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
362 doveadm_print(unixdate2str(t)); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
363 return 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
364 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
365 |
11337
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
366 static int fetch_imap_envelope(struct fetch_cmd_context *ctx) |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
367 { |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
368 const char *value; |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
369 |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
370 if (mail_get_special(ctx->mail, MAIL_FETCH_IMAP_ENVELOPE, &value) < 0) |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
371 return -1; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
372 doveadm_print(value); |
11337
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
373 return 0; |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
374 } |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
375 |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
376 static int fetch_imap_body(struct fetch_cmd_context *ctx) |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
377 { |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
378 const char *value; |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
379 |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
380 if (mail_get_special(ctx->mail, MAIL_FETCH_IMAP_BODY, &value) < 0) |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
381 return -1; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
382 doveadm_print(value); |
11337
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
383 return 0; |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
384 } |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
385 |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
386 static int fetch_imap_bodystructure(struct fetch_cmd_context *ctx) |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
387 { |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
388 const char *value; |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
389 |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
390 if (mail_get_special(ctx->mail, MAIL_FETCH_IMAP_BODYSTRUCTURE, &value) < 0) |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
391 return -1; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
392 doveadm_print(value); |
11337
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
393 return 0; |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
394 } |
12341
3b13bd2d64f4
doveadm fetch: Added support for pop3.uidl field.
Timo Sirainen <tss@iki.fi>
parents:
12213
diff
changeset
|
395 static int fetch_pop3_uidl(struct fetch_cmd_context *ctx) |
3b13bd2d64f4
doveadm fetch: Added support for pop3.uidl field.
Timo Sirainen <tss@iki.fi>
parents:
12213
diff
changeset
|
396 { |
3b13bd2d64f4
doveadm fetch: Added support for pop3.uidl field.
Timo Sirainen <tss@iki.fi>
parents:
12213
diff
changeset
|
397 const char *value; |
3b13bd2d64f4
doveadm fetch: Added support for pop3.uidl field.
Timo Sirainen <tss@iki.fi>
parents:
12213
diff
changeset
|
398 |
3b13bd2d64f4
doveadm fetch: Added support for pop3.uidl field.
Timo Sirainen <tss@iki.fi>
parents:
12213
diff
changeset
|
399 if (mail_get_special(ctx->mail, MAIL_FETCH_UIDL_BACKEND, &value) < 0) |
3b13bd2d64f4
doveadm fetch: Added support for pop3.uidl field.
Timo Sirainen <tss@iki.fi>
parents:
12213
diff
changeset
|
400 return -1; |
3b13bd2d64f4
doveadm fetch: Added support for pop3.uidl field.
Timo Sirainen <tss@iki.fi>
parents:
12213
diff
changeset
|
401 doveadm_print(value); |
3b13bd2d64f4
doveadm fetch: Added support for pop3.uidl field.
Timo Sirainen <tss@iki.fi>
parents:
12213
diff
changeset
|
402 return 0; |
3b13bd2d64f4
doveadm fetch: Added support for pop3.uidl field.
Timo Sirainen <tss@iki.fi>
parents:
12213
diff
changeset
|
403 } |
11337
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
404 |
17134
36d11bf4e58d
doveadm fetch: Added pop3.order field.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
405 static int fetch_pop3_order(struct fetch_cmd_context *ctx) |
36d11bf4e58d
doveadm fetch: Added pop3.order field.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
406 { |
36d11bf4e58d
doveadm fetch: Added pop3.order field.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
407 const char *value; |
36d11bf4e58d
doveadm fetch: Added pop3.order field.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
408 |
36d11bf4e58d
doveadm fetch: Added pop3.order field.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
409 if (mail_get_special(ctx->mail, MAIL_FETCH_POP3_ORDER, &value) < 0) |
36d11bf4e58d
doveadm fetch: Added pop3.order field.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
410 return -1; |
36d11bf4e58d
doveadm fetch: Added pop3.order field.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
411 doveadm_print(value); |
36d11bf4e58d
doveadm fetch: Added pop3.order field.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
412 return 0; |
36d11bf4e58d
doveadm fetch: Added pop3.order field.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
413 } |
36d11bf4e58d
doveadm fetch: Added pop3.order field.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
414 |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
415 static const struct fetch_field fetch_fields[] = { |
11511
9f9f9d9e4a79
doveadm fetch: Added "user" field.
Timo Sirainen <tss@iki.fi>
parents:
11409
diff
changeset
|
416 { "user", 0, fetch_user }, |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
417 { "mailbox", 0, fetch_mailbox }, |
11233
5d0027f17bd8
doveadm fetch: Added support for mailbox-guid search key/fetch field.
Timo Sirainen <tss@iki.fi>
parents:
11209
diff
changeset
|
418 { "mailbox-guid", 0, fetch_mailbox_guid }, |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
419 { "seq", 0, fetch_seq }, |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
420 { "uid", 0, fetch_uid }, |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
421 { "guid", 0, fetch_guid }, |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
422 { "flags", MAIL_FETCH_FLAGS, fetch_flags }, |
15701
61aaf4102761
doveadm fetch: Added "modseq" field.
Timo Sirainen <tss@iki.fi>
parents:
15053
diff
changeset
|
423 { "modseq", 0, fetch_modseq }, |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
424 { "hdr", MAIL_FETCH_STREAM_HEADER, fetch_hdr }, |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
425 { "body", MAIL_FETCH_STREAM_BODY, fetch_body }, |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
426 { "text", MAIL_FETCH_STREAM_HEADER | |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
427 MAIL_FETCH_STREAM_BODY, fetch_text }, |
13999
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
428 { "text.utf8", MAIL_FETCH_STREAM_HEADER | |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
429 MAIL_FETCH_STREAM_BODY, fetch_text_utf8 }, |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
430 { "size.physical", MAIL_FETCH_PHYSICAL_SIZE, fetch_size_physical }, |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
431 { "size.virtual", MAIL_FETCH_VIRTUAL_SIZE, fetch_size_virtual }, |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
432 { "date.received", MAIL_FETCH_RECEIVED_DATE, fetch_date_received }, |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
433 { "date.sent", MAIL_FETCH_DATE, fetch_date_sent }, |
11337
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
434 { "date.saved", MAIL_FETCH_SAVE_DATE, fetch_date_saved }, |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
435 { "imap.envelope", MAIL_FETCH_IMAP_ENVELOPE, fetch_imap_envelope }, |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
436 { "imap.body", MAIL_FETCH_IMAP_BODY, fetch_imap_body }, |
12341
3b13bd2d64f4
doveadm fetch: Added support for pop3.uidl field.
Timo Sirainen <tss@iki.fi>
parents:
12213
diff
changeset
|
437 { "imap.bodystructure", MAIL_FETCH_IMAP_BODYSTRUCTURE, fetch_imap_bodystructure }, |
17134
36d11bf4e58d
doveadm fetch: Added pop3.order field.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
438 { "pop3.uidl", MAIL_FETCH_UIDL_BACKEND, fetch_pop3_uidl }, |
36d11bf4e58d
doveadm fetch: Added pop3.order field.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
439 { "pop3.order", MAIL_FETCH_POP3_ORDER, fetch_pop3_order } |
11205
dab4fb9f8140
doveadm fetch: Added support for fetching mails from multiple mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11175
diff
changeset
|
440 }; |
11147
51eea5bb3336
doveadm: Added initial code for fetch command.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
441 |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
442 static const struct fetch_field *fetch_field_find(const char *name) |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
443 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
444 unsigned int i; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
445 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
446 for (i = 0; i < N_ELEMENTS(fetch_fields); i++) { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
447 if (strcmp(fetch_fields[i].name, name) == 0) |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
448 return &fetch_fields[i]; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
449 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
450 return NULL; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
451 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
452 |
11207
1ec4eb879f0e
doveadm fetch: If invalid fetch field is given, print list of available fields.
Timo Sirainen <tss@iki.fi>
parents:
11206
diff
changeset
|
453 static void print_fetch_fields(void) |
1ec4eb879f0e
doveadm fetch: If invalid fetch field is given, print list of available fields.
Timo Sirainen <tss@iki.fi>
parents:
11206
diff
changeset
|
454 { |
1ec4eb879f0e
doveadm fetch: If invalid fetch field is given, print list of available fields.
Timo Sirainen <tss@iki.fi>
parents:
11206
diff
changeset
|
455 unsigned int i; |
1ec4eb879f0e
doveadm fetch: If invalid fetch field is given, print list of available fields.
Timo Sirainen <tss@iki.fi>
parents:
11206
diff
changeset
|
456 |
1ec4eb879f0e
doveadm fetch: If invalid fetch field is given, print list of available fields.
Timo Sirainen <tss@iki.fi>
parents:
11206
diff
changeset
|
457 fprintf(stderr, "Available fetch fields: %s", fetch_fields[0].name); |
1ec4eb879f0e
doveadm fetch: If invalid fetch field is given, print list of available fields.
Timo Sirainen <tss@iki.fi>
parents:
11206
diff
changeset
|
458 for (i = 1; i < N_ELEMENTS(fetch_fields); i++) |
1ec4eb879f0e
doveadm fetch: If invalid fetch field is given, print list of available fields.
Timo Sirainen <tss@iki.fi>
parents:
11206
diff
changeset
|
459 fprintf(stderr, " %s", fetch_fields[i].name); |
1ec4eb879f0e
doveadm fetch: If invalid fetch field is given, print list of available fields.
Timo Sirainen <tss@iki.fi>
parents:
11206
diff
changeset
|
460 fprintf(stderr, "\n"); |
1ec4eb879f0e
doveadm fetch: If invalid fetch field is given, print list of available fields.
Timo Sirainen <tss@iki.fi>
parents:
11206
diff
changeset
|
461 } |
1ec4eb879f0e
doveadm fetch: If invalid fetch field is given, print list of available fields.
Timo Sirainen <tss@iki.fi>
parents:
11206
diff
changeset
|
462 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
463 static void parse_fetch_fields(struct fetch_cmd_context *ctx, const char *str) |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
464 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
465 const char *const *fields, *name; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
466 const struct fetch_field *field; |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
467 struct fetch_field hdr_field; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
468 |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
469 memset(&hdr_field, 0, sizeof(hdr_field)); |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
470 hdr_field.print = fetch_hdr_field; |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
471 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
472 t_array_init(&ctx->fields, 32); |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
473 t_array_init(&ctx->header_fields, 32); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
474 fields = t_strsplit_spaces(str, " "); |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
475 for (; *fields != NULL; fields++) { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
476 name = t_str_lcase(*fields); |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
477 |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
478 doveadm_print_header_simple(name); |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
479 if (strncmp(name, "hdr.", 4) == 0) { |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
480 name += 4; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
481 hdr_field.name = name; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
482 array_append(&ctx->fields, &hdr_field, 1); |
14001
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
483 name = t_strcut(name, '.'); |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
484 array_append(&ctx->header_fields, &name, 1); |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
485 } else { |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
486 field = fetch_field_find(name); |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
487 if (field == NULL) { |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
488 print_fetch_fields(); |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
489 i_fatal("Unknown fetch field: %s", name); |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
490 } |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
491 ctx->wanted_fields |= field->wanted_fields; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
492 array_append(&ctx->fields, field, 1); |
11207
1ec4eb879f0e
doveadm fetch: If invalid fetch field is given, print list of available fields.
Timo Sirainen <tss@iki.fi>
parents:
11206
diff
changeset
|
493 } |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
494 } |
14686
9ff19c1d5f69
Added array_append_zero() to write a zero-filled record to an array.
Timo Sirainen <tss@iki.fi>
parents:
14681
diff
changeset
|
495 array_append_zero(&ctx->header_fields); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
496 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
497 |
14137
0a5951b08478
doveadm: Improved error handling. Failures should now always have non-zero exit code.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
498 static int cmd_fetch_mail(struct fetch_cmd_context *ctx) |
11147
51eea5bb3336
doveadm: Added initial code for fetch command.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
499 { |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
500 const struct fetch_field *field; |
11209
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
501 struct mail *mail = ctx->mail; |
14137
0a5951b08478
doveadm: Improved error handling. Failures should now always have non-zero exit code.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
502 int ret = 0; |
11209
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
503 |
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
504 array_foreach(&ctx->fields, field) { |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
505 ctx->cur_field = field; |
11209
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
506 if (field->print(ctx) < 0) { |
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
507 i_error("fetch(%s) failed for box=%s uid=%u: %s", |
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
508 field->name, mailbox_get_vname(mail->box), |
12585
b748c622e896
lib-storage: Added mailbox_get_last_*error() wrappers and use them.
Timo Sirainen <tss@iki.fi>
parents:
12550
diff
changeset
|
509 mail->uid, mailbox_get_last_error(mail->box, NULL)); |
14137
0a5951b08478
doveadm: Improved error handling. Failures should now always have non-zero exit code.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
510 doveadm_mail_failed_mailbox(&ctx->ctx, mail->box); |
0a5951b08478
doveadm: Improved error handling. Failures should now always have non-zero exit code.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
511 ret = -1; |
11209
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
512 } |
11205
dab4fb9f8140
doveadm fetch: Added support for fetching mails from multiple mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11175
diff
changeset
|
513 } |
14137
0a5951b08478
doveadm: Improved error handling. Failures should now always have non-zero exit code.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
514 return ret; |
11209
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
515 } |
11147
51eea5bb3336
doveadm: Added initial code for fetch command.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
516 |
11209
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
517 static int |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
518 cmd_fetch_box(struct fetch_cmd_context *ctx, const struct mailbox_info *info) |
11209
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
519 { |
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
520 struct doveadm_mail_iter *iter; |
14137
0a5951b08478
doveadm: Improved error handling. Failures should now always have non-zero exit code.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
521 int ret = 0; |
12870
1fbd59c48414
lib-storage: Changed mailbox_search_*() API to return pointer struct mail.
Timo Sirainen <tss@iki.fi>
parents:
12862
diff
changeset
|
522 |
14137
0a5951b08478
doveadm: Improved error handling. Failures should now always have non-zero exit code.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
523 if (doveadm_mail_iter_init(&ctx->ctx, info, ctx->ctx.search_args, |
12973
24a983a9ff6f
doveadm: doveadm_mail_iter_init() API change to fix "doveadm fetch" crash.
Timo Sirainen <tss@iki.fi>
parents:
12870
diff
changeset
|
524 ctx->wanted_fields, |
24a983a9ff6f
doveadm: doveadm_mail_iter_init() API change to fix "doveadm fetch" crash.
Timo Sirainen <tss@iki.fi>
parents:
12870
diff
changeset
|
525 array_idx(&ctx->header_fields, 0), |
16332
7808096bb674
doveadm_mail_iter_init(): Removed unnecessarily returning transaction.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
526 &iter) < 0) |
12973
24a983a9ff6f
doveadm: doveadm_mail_iter_init() API change to fix "doveadm fetch" crash.
Timo Sirainen <tss@iki.fi>
parents:
12870
diff
changeset
|
527 return -1; |
24a983a9ff6f
doveadm: doveadm_mail_iter_init() API change to fix "doveadm fetch" crash.
Timo Sirainen <tss@iki.fi>
parents:
12870
diff
changeset
|
528 |
24a983a9ff6f
doveadm: doveadm_mail_iter_init() API change to fix "doveadm fetch" crash.
Timo Sirainen <tss@iki.fi>
parents:
12870
diff
changeset
|
529 while (doveadm_mail_iter_next(iter, &ctx->mail)) { |
24a983a9ff6f
doveadm: doveadm_mail_iter_init() API change to fix "doveadm fetch" crash.
Timo Sirainen <tss@iki.fi>
parents:
12870
diff
changeset
|
530 T_BEGIN { |
14137
0a5951b08478
doveadm: Improved error handling. Failures should now always have non-zero exit code.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
531 if (cmd_fetch_mail(ctx) < 0) |
0a5951b08478
doveadm: Improved error handling. Failures should now always have non-zero exit code.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
532 ret = -1; |
12973
24a983a9ff6f
doveadm: doveadm_mail_iter_init() API change to fix "doveadm fetch" crash.
Timo Sirainen <tss@iki.fi>
parents:
12870
diff
changeset
|
533 } T_END; |
12870
1fbd59c48414
lib-storage: Changed mailbox_search_*() API to return pointer struct mail.
Timo Sirainen <tss@iki.fi>
parents:
12862
diff
changeset
|
534 } |
14137
0a5951b08478
doveadm: Improved error handling. Failures should now always have non-zero exit code.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
535 if (doveadm_mail_iter_deinit(&iter) < 0) |
0a5951b08478
doveadm: Improved error handling. Failures should now always have non-zero exit code.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
536 ret = -1; |
0a5951b08478
doveadm: Improved error handling. Failures should now always have non-zero exit code.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
537 return ret; |
11147
51eea5bb3336
doveadm: Added initial code for fetch command.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
538 } |
11205
dab4fb9f8140
doveadm fetch: Added support for fetching mails from multiple mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11175
diff
changeset
|
539 |
14137
0a5951b08478
doveadm: Improved error handling. Failures should now always have non-zero exit code.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
540 static int |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
541 cmd_fetch_run(struct doveadm_mail_cmd_context *_ctx, struct mail_user *user) |
11205
dab4fb9f8140
doveadm fetch: Added support for fetching mails from multiple mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11175
diff
changeset
|
542 { |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
543 struct fetch_cmd_context *ctx = (struct fetch_cmd_context *)_ctx; |
11205
dab4fb9f8140
doveadm fetch: Added support for fetching mails from multiple mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11175
diff
changeset
|
544 const enum mailbox_list_iter_flags iter_flags = |
12862
d805c7ce8d67
lib-storage: Renamed MAILBOX_LIST_ITER_NO_AUTO_INBOX to _NO_AUTO_BOXES.
Timo Sirainen <tss@iki.fi>
parents:
12860
diff
changeset
|
545 MAILBOX_LIST_ITER_NO_AUTO_BOXES | |
11205
dab4fb9f8140
doveadm fetch: Added support for fetching mails from multiple mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11175
diff
changeset
|
546 MAILBOX_LIST_ITER_RETURN_NO_FLAGS; |
14137
0a5951b08478
doveadm: Improved error handling. Failures should now always have non-zero exit code.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
547 struct doveadm_mailbox_list_iter *iter; |
11205
dab4fb9f8140
doveadm fetch: Added support for fetching mails from multiple mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11175
diff
changeset
|
548 const struct mailbox_info *info; |
14137
0a5951b08478
doveadm: Improved error handling. Failures should now always have non-zero exit code.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
549 int ret = 0; |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
550 |
14137
0a5951b08478
doveadm: Improved error handling. Failures should now always have non-zero exit code.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
551 iter = doveadm_mailbox_list_iter_init(_ctx, user, _ctx->search_args, |
0a5951b08478
doveadm: Improved error handling. Failures should now always have non-zero exit code.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
552 iter_flags); |
0a5951b08478
doveadm: Improved error handling. Failures should now always have non-zero exit code.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
553 while ((info = doveadm_mailbox_list_iter_next(iter)) != NULL) T_BEGIN { |
0a5951b08478
doveadm: Improved error handling. Failures should now always have non-zero exit code.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
554 if (cmd_fetch_box(ctx, info) < 0) |
0a5951b08478
doveadm: Improved error handling. Failures should now always have non-zero exit code.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
555 ret = -1; |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
556 } T_END; |
14137
0a5951b08478
doveadm: Improved error handling. Failures should now always have non-zero exit code.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
557 if (doveadm_mailbox_list_iter_deinit(&iter) < 0) |
0a5951b08478
doveadm: Improved error handling. Failures should now always have non-zero exit code.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
558 ret = -1; |
0a5951b08478
doveadm: Improved error handling. Failures should now always have non-zero exit code.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
559 return ret; |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
560 } |
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
561 |
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
562 static void cmd_fetch_deinit(struct doveadm_mail_cmd_context *_ctx) |
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
563 { |
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
564 struct fetch_cmd_context *ctx = (struct fetch_cmd_context *)_ctx; |
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
565 |
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
566 o_stream_unref(&ctx->output); |
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
567 } |
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
568 |
11294
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
569 static void cmd_fetch_init(struct doveadm_mail_cmd_context *_ctx, |
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
570 const char *const args[]) |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
571 { |
11294
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
572 struct fetch_cmd_context *ctx = (struct fetch_cmd_context *)_ctx; |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
573 const char *fetch_fields = args[0]; |
11205
dab4fb9f8140
doveadm fetch: Added support for fetching mails from multiple mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11175
diff
changeset
|
574 |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
575 if (fetch_fields == NULL || args[1] == NULL) |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
576 doveadm_mail_help_name("fetch"); |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
577 |
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
578 parse_fetch_fields(ctx, fetch_fields); |
11395
07c9d1115029
doveadm: mail commands can now be extended more easily by plugins.
Timo Sirainen <tss@iki.fi>
parents:
11342
diff
changeset
|
579 _ctx->search_args = doveadm_mail_build_search_args(args + 1); |
11205
dab4fb9f8140
doveadm fetch: Added support for fetching mails from multiple mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11175
diff
changeset
|
580 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
581 ctx->output = o_stream_create_fd(STDOUT_FILENO, 0, FALSE); |
14681
ca37d1577291
Added o_stream_nsend*() and related functions to make delayed error handling safer.
Timo Sirainen <tss@iki.fi>
parents:
14629
diff
changeset
|
582 o_stream_set_no_error_handling(ctx->output, TRUE); |
11294
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
583 } |
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
584 |
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
585 static struct doveadm_mail_cmd_context *cmd_fetch_alloc(void) |
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
586 { |
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
587 struct fetch_cmd_context *ctx; |
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
588 |
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
589 ctx = doveadm_mail_cmd_alloc(struct fetch_cmd_context); |
11395
07c9d1115029
doveadm: mail commands can now be extended more easily by plugins.
Timo Sirainen <tss@iki.fi>
parents:
11342
diff
changeset
|
590 ctx->ctx.v.init = cmd_fetch_init; |
07c9d1115029
doveadm: mail commands can now be extended more easily by plugins.
Timo Sirainen <tss@iki.fi>
parents:
11342
diff
changeset
|
591 ctx->ctx.v.run = cmd_fetch_run; |
07c9d1115029
doveadm: mail commands can now be extended more easily by plugins.
Timo Sirainen <tss@iki.fi>
parents:
11342
diff
changeset
|
592 ctx->ctx.v.deinit = cmd_fetch_deinit; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
593 doveadm_print_init("pager"); |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
594 return &ctx->ctx; |
11205
dab4fb9f8140
doveadm fetch: Added support for fetching mails from multiple mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11175
diff
changeset
|
595 } |
11294
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
596 |
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
597 struct doveadm_mail_cmd cmd_fetch = { |
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
598 cmd_fetch_alloc, "fetch", "<fields> <search query>" |
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
599 }; |