Mercurial > dovecot > core-2.2
annotate src/doveadm/doveadm-mail-fetch.c @ 19259:2ceca0becf8e
doveadm fetch: Added "storageid" field.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Wed, 30 Sep 2015 18:50:09 +0300 |
parents | ffecdb676c53 |
children | 9a15b989cc41 |
rev | line source |
---|---|
18137 | 1 /* Copyright (c) 2010-2015 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 |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
28 struct mail *mail; |
11205
dab4fb9f8140
doveadm fetch: Added support for fetching mails from multiple mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11175
diff
changeset
|
29 |
15903 | 30 ARRAY(struct fetch_field) fields; |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
31 ARRAY_TYPE(const_string) header_fields; |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
32 enum mail_fetch_field wanted_fields; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
33 |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
34 const struct fetch_field *cur_field; |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
35 }; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
36 |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
37 struct fetch_field { |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
38 const char *name; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
39 enum mail_fetch_field wanted_fields; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
40 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
|
41 }; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
42 |
11511
9f9f9d9e4a79
doveadm fetch: Added "user" field.
Timo Sirainen <tss@iki.fi>
parents:
11409
diff
changeset
|
43 static int fetch_user(struct fetch_cmd_context *ctx) |
9f9f9d9e4a79
doveadm fetch: Added "user" field.
Timo Sirainen <tss@iki.fi>
parents:
11409
diff
changeset
|
44 { |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
45 doveadm_print(ctx->ctx.cur_mail_user->username); |
11511
9f9f9d9e4a79
doveadm fetch: Added "user" field.
Timo Sirainen <tss@iki.fi>
parents:
11409
diff
changeset
|
46 return 0; |
9f9f9d9e4a79
doveadm fetch: Added "user" field.
Timo Sirainen <tss@iki.fi>
parents:
11409
diff
changeset
|
47 } |
9f9f9d9e4a79
doveadm fetch: Added "user" field.
Timo Sirainen <tss@iki.fi>
parents:
11409
diff
changeset
|
48 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
49 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
|
50 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
51 const char *value; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
52 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
53 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
|
54 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
|
55 |
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
|
56 doveadm_print(value); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
57 return 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
58 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
59 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
60 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
|
61 { |
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
|
62 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
|
63 |
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
|
64 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
|
65 &metadata) < 0) |
11233
5d0027f17bd8
doveadm fetch: Added support for mailbox-guid search key/fetch field.
Timo Sirainen <tss@iki.fi>
parents:
11209
diff
changeset
|
66 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
|
67 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
|
68 return 0; |
5d0027f17bd8
doveadm fetch: Added support for mailbox-guid search key/fetch field.
Timo Sirainen <tss@iki.fi>
parents:
11209
diff
changeset
|
69 } |
5d0027f17bd8
doveadm fetch: Added support for mailbox-guid search key/fetch field.
Timo Sirainen <tss@iki.fi>
parents:
11209
diff
changeset
|
70 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
71 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
|
72 { |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
73 doveadm_print_num(ctx->mail->seq); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
74 return 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
75 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
76 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
77 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
|
78 { |
12213
d6582f3ee54d
doveadm fetch: Fixed fetching uid field.
Timo Sirainen <tss@iki.fi>
parents:
11790
diff
changeset
|
79 doveadm_print_num(ctx->mail->uid); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
80 return 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
81 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
82 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
83 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
|
84 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
85 const char *value; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
86 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
87 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
|
88 return -1; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
89 doveadm_print(value); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
90 return 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
91 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
92 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
93 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
|
94 { |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
95 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
|
96 |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
97 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
|
98 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
|
99 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
|
100 return 0; |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
101 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
102 |
15701
61aaf4102761
doveadm fetch: Added "modseq" field.
Timo Sirainen <tss@iki.fi>
parents:
15053
diff
changeset
|
103 static int fetch_modseq(struct fetch_cmd_context *ctx) |
61aaf4102761
doveadm fetch: Added "modseq" field.
Timo Sirainen <tss@iki.fi>
parents:
15053
diff
changeset
|
104 { |
61aaf4102761
doveadm fetch: Added "modseq" field.
Timo Sirainen <tss@iki.fi>
parents:
15053
diff
changeset
|
105 doveadm_print_num(mail_get_modseq(ctx->mail)); |
61aaf4102761
doveadm fetch: Added "modseq" field.
Timo Sirainen <tss@iki.fi>
parents:
15053
diff
changeset
|
106 return 0; |
61aaf4102761
doveadm fetch: Added "modseq" field.
Timo Sirainen <tss@iki.fi>
parents:
15053
diff
changeset
|
107 } |
61aaf4102761
doveadm fetch: Added "modseq" field.
Timo Sirainen <tss@iki.fi>
parents:
15053
diff
changeset
|
108 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
109 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
|
110 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
111 struct istream *input; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
112 struct message_size hdr_size; |
17989
89cbc0e91a77
doveadm fetch: Use doveadm_print_istream()
Timo Sirainen <tss@iki.fi>
parents:
17965
diff
changeset
|
113 int ret; |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
114 |
13601
276a39ebda4d
lib-storage: Added mail_get_hdr_stream() and use it where possible.
Timo Sirainen <tss@iki.fi>
parents:
13287
diff
changeset
|
115 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
|
116 return -1; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
117 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
118 input = i_stream_create_limit(input, hdr_size.physical_size); |
17989
89cbc0e91a77
doveadm fetch: Use doveadm_print_istream()
Timo Sirainen <tss@iki.fi>
parents:
17965
diff
changeset
|
119 ret = doveadm_print_istream(input); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
120 i_stream_unref(&input); |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
121 return ret; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
122 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
123 |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
124 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
|
125 { |
14001
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
126 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
|
127 string_t *str = t_str_new(256); |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
128 bool add_lf = FALSE; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
129 |
14001
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
130 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
|
131 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
|
132 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
|
133 |
17320
63361f087d1f
doveadm mail fetch: Use mail_get_headers_utf8() when fetching hdr.*.utf8
Timo Sirainen <tss@iki.fi>
parents:
17134
diff
changeset
|
134 if (filter != NULL && strcmp(filter, "utf8") == 0) { |
63361f087d1f
doveadm mail fetch: Use mail_get_headers_utf8() when fetching hdr.*.utf8
Timo Sirainen <tss@iki.fi>
parents:
17134
diff
changeset
|
135 if (mail_get_headers_utf8(ctx->mail, name, &value) < 0) |
63361f087d1f
doveadm mail fetch: Use mail_get_headers_utf8() when fetching hdr.*.utf8
Timo Sirainen <tss@iki.fi>
parents:
17134
diff
changeset
|
136 return -1; |
63361f087d1f
doveadm mail fetch: Use mail_get_headers_utf8() when fetching hdr.*.utf8
Timo Sirainen <tss@iki.fi>
parents:
17134
diff
changeset
|
137 } else { |
63361f087d1f
doveadm mail fetch: Use mail_get_headers_utf8() when fetching hdr.*.utf8
Timo Sirainen <tss@iki.fi>
parents:
17134
diff
changeset
|
138 if (mail_get_headers(ctx->mail, name, &value) < 0) |
63361f087d1f
doveadm mail fetch: Use mail_get_headers_utf8() when fetching hdr.*.utf8
Timo Sirainen <tss@iki.fi>
parents:
17134
diff
changeset
|
139 return -1; |
63361f087d1f
doveadm mail fetch: Use mail_get_headers_utf8() when fetching hdr.*.utf8
Timo Sirainen <tss@iki.fi>
parents:
17134
diff
changeset
|
140 } |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
141 |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
142 for (; *value != NULL; value++) { |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
143 if (add_lf) |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
144 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
|
145 str_append(str, *value); |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
146 add_lf = TRUE; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
147 } |
14001
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
148 |
17320
63361f087d1f
doveadm mail fetch: Use mail_get_headers_utf8() when fetching hdr.*.utf8
Timo Sirainen <tss@iki.fi>
parents:
17134
diff
changeset
|
149 if (filter == NULL || strcmp(filter, "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
|
150 /* print the header as-is */ |
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
151 } 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
|
152 strcmp(filter, "address_name") == 0 || |
ceadfe9009aa
doveadm fetch: Added support for hdr.*.utf8 fields.
Timo Sirainen <tss@iki.fi>
parents:
14002
diff
changeset
|
153 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
|
154 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
|
155 |
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
156 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
|
157 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
|
158 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
|
159 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
|
160 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
|
161 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
|
162 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
|
163 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
|
164 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
|
165 if (addr->mailbox != NULL) |
afeabe28a499
doveadm fetch hdr.*.adddress*: Don't crash when printing groups.
Timo Sirainen <tss@iki.fi>
parents:
14001
diff
changeset
|
166 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
|
167 if (addr->domain != NULL) { |
afeabe28a499
doveadm fetch hdr.*.adddress*: Don't crash when printing groups.
Timo Sirainen <tss@iki.fi>
parents:
14001
diff
changeset
|
168 str_append_c(str, '@'); |
afeabe28a499
doveadm fetch hdr.*.adddress*: Don't crash when printing groups.
Timo Sirainen <tss@iki.fi>
parents:
14001
diff
changeset
|
169 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
|
170 } |
14058
ceadfe9009aa
doveadm fetch: Added support for hdr.*.utf8 fields.
Timo Sirainen <tss@iki.fi>
parents:
14002
diff
changeset
|
171 } else if (addr->name != NULL) { |
ceadfe9009aa
doveadm fetch: Added support for hdr.*.utf8 fields.
Timo Sirainen <tss@iki.fi>
parents:
14002
diff
changeset
|
172 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
|
173 str_append(str, addr->name); |
14058
ceadfe9009aa
doveadm fetch: Added support for hdr.*.utf8 fields.
Timo Sirainen <tss@iki.fi>
parents:
14002
diff
changeset
|
174 else { |
ceadfe9009aa
doveadm fetch: Added support for hdr.*.utf8 fields.
Timo Sirainen <tss@iki.fi>
parents:
14002
diff
changeset
|
175 message_header_decode_utf8( |
ceadfe9009aa
doveadm fetch: Added support for hdr.*.utf8 fields.
Timo Sirainen <tss@iki.fi>
parents:
14002
diff
changeset
|
176 (const void *)addr->name, |
17322
d60c5ef63d63
message_header_decode_utf8() wasn't used correctly with NULL instead of FALSE parameter.
Timo Sirainen <tss@iki.fi>
parents:
17320
diff
changeset
|
177 strlen(addr->name), str, NULL); |
14058
ceadfe9009aa
doveadm fetch: Added support for hdr.*.utf8 fields.
Timo Sirainen <tss@iki.fi>
parents:
14002
diff
changeset
|
178 } |
14001
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
179 } |
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
180 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
|
181 } |
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
182 } else { |
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
183 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
|
184 } |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
185 doveadm_print(str_c(str)); |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
186 return 0; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
187 } |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
188 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
189 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
|
190 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
191 struct istream *input; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
192 struct message_size hdr_size; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
193 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
194 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
|
195 return -1; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
196 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
197 i_stream_skip(input, hdr_size.physical_size); |
17989
89cbc0e91a77
doveadm fetch: Use doveadm_print_istream()
Timo Sirainen <tss@iki.fi>
parents:
17965
diff
changeset
|
198 return doveadm_print_istream(input); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
199 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
200 |
18160
48d2bc84e047
doveadm fetch: Added body.snippet field.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
201 static int fetch_body_snippet(struct fetch_cmd_context *ctx) |
48d2bc84e047
doveadm fetch: Added body.snippet field.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
202 { |
48d2bc84e047
doveadm fetch: Added body.snippet field.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
203 const char *value; |
48d2bc84e047
doveadm fetch: Added body.snippet field.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
204 |
48d2bc84e047
doveadm fetch: Added body.snippet field.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
205 if (mail_get_special(ctx->mail, MAIL_FETCH_BODY_SNIPPET, &value) < 0) |
48d2bc84e047
doveadm fetch: Added body.snippet field.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
206 return -1; |
48d2bc84e047
doveadm fetch: Added body.snippet field.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
207 /* [0] contains the snippet algorithm, skip over it */ |
48d2bc84e047
doveadm fetch: Added body.snippet field.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
208 i_assert(value[0] != '\0'); |
48d2bc84e047
doveadm fetch: Added body.snippet field.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
209 doveadm_print(value + 1); |
48d2bc84e047
doveadm fetch: Added body.snippet field.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
210 return 0; |
48d2bc84e047
doveadm fetch: Added body.snippet field.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
211 } |
48d2bc84e047
doveadm fetch: Added body.snippet field.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
212 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
213 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
|
214 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
215 struct istream *input; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
216 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
217 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
|
218 return -1; |
17989
89cbc0e91a77
doveadm fetch: Use doveadm_print_istream()
Timo Sirainen <tss@iki.fi>
parents:
17965
diff
changeset
|
219 return doveadm_print_istream(input); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
220 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
221 |
13999
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
222 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
|
223 { |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
224 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
|
225 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
|
226 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
|
227 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
|
228 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
|
229 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
|
230 |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
231 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
|
232 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
|
233 |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
234 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
|
235 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
|
236 0); |
15053
c976a9c01613
Replaced "decomposed titlecase" conversions with more generic normalizer function.
Timo Sirainen <tss@iki.fi>
parents:
14920
diff
changeset
|
237 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
|
238 |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
239 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
|
240 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
|
241 &block)) |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
242 continue; |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
243 |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
244 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
|
245 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
|
246 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
|
247 } 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
|
248 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
|
249 else { |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
250 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
|
251 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
|
252 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
|
253 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
|
254 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
|
255 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
|
256 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
|
257 } |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
258 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
|
259 } |
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 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
|
262 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
|
263 (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
|
264 |
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
|
265 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
|
266 if (input->stream_errno != 0) { |
17965
cd5dba84d8de
doveadm fetch: If istream reading fails, log a better error message.
Timo Sirainen <tss@iki.fi>
parents:
17322
diff
changeset
|
267 i_error("read(%s) failed: %s", i_stream_get_name(input), |
cd5dba84d8de
doveadm fetch: If istream reading fails, log a better error message.
Timo Sirainen <tss@iki.fi>
parents:
17322
diff
changeset
|
268 i_stream_get_error(input)); |
14000
2418871d09f5
doveadm fetch text.utf8: Don't return failure on success.
Timo Sirainen <tss@iki.fi>
parents:
13999
diff
changeset
|
269 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
|
270 } |
14000
2418871d09f5
doveadm fetch text.utf8: Don't return failure on success.
Timo Sirainen <tss@iki.fi>
parents:
13999
diff
changeset
|
271 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
|
272 } |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
273 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
274 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
|
275 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
276 uoff_t size; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
277 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
278 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
|
279 return -1; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
280 doveadm_print_num(size); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
281 return 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
282 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
283 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
284 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
|
285 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
286 uoff_t size; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
287 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
288 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
|
289 return -1; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
290 doveadm_print_num(size); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
291 return 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
292 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
293 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
294 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
|
295 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
296 time_t t; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
297 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
298 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
|
299 return -1; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
300 doveadm_print(unixdate2str(t)); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
301 return 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
302 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
303 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
304 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
|
305 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
306 time_t t; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
307 int tz; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
308 char chr; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
309 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
310 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
|
311 return -1; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
312 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
313 chr = tz < 0 ? '-' : '+'; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
314 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
|
315 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
|
316 chr, tz/60, tz%60)); |
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_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
|
321 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
322 time_t t; |
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_save_date(ctx->mail, &t) < 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(unixdate2str(t)); |
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 |
11337
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
330 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
|
331 { |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
332 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
|
333 |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
334 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
|
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(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
|
337 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
|
338 } |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
339 |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
340 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
|
341 { |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
342 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
|
343 |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
344 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
|
345 return -1; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
346 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
|
347 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
|
348 } |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
349 |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
350 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
|
351 { |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
352 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
|
353 |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
354 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
|
355 return -1; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
356 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
|
357 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
|
358 } |
12341
3b13bd2d64f4
doveadm fetch: Added support for pop3.uidl field.
Timo Sirainen <tss@iki.fi>
parents:
12213
diff
changeset
|
359 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
|
360 { |
3b13bd2d64f4
doveadm fetch: Added support for pop3.uidl field.
Timo Sirainen <tss@iki.fi>
parents:
12213
diff
changeset
|
361 const char *value; |
3b13bd2d64f4
doveadm fetch: Added support for pop3.uidl field.
Timo Sirainen <tss@iki.fi>
parents:
12213
diff
changeset
|
362 |
3b13bd2d64f4
doveadm fetch: Added support for pop3.uidl field.
Timo Sirainen <tss@iki.fi>
parents:
12213
diff
changeset
|
363 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
|
364 return -1; |
3b13bd2d64f4
doveadm fetch: Added support for pop3.uidl field.
Timo Sirainen <tss@iki.fi>
parents:
12213
diff
changeset
|
365 doveadm_print(value); |
3b13bd2d64f4
doveadm fetch: Added support for pop3.uidl field.
Timo Sirainen <tss@iki.fi>
parents:
12213
diff
changeset
|
366 return 0; |
3b13bd2d64f4
doveadm fetch: Added support for pop3.uidl field.
Timo Sirainen <tss@iki.fi>
parents:
12213
diff
changeset
|
367 } |
11337
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
368 |
17134
36d11bf4e58d
doveadm fetch: Added pop3.order field.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
369 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
|
370 { |
36d11bf4e58d
doveadm fetch: Added pop3.order field.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
371 const char *value; |
36d11bf4e58d
doveadm fetch: Added pop3.order field.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
372 |
36d11bf4e58d
doveadm fetch: Added pop3.order field.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
373 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
|
374 return -1; |
36d11bf4e58d
doveadm fetch: Added pop3.order field.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
375 doveadm_print(value); |
36d11bf4e58d
doveadm fetch: Added pop3.order field.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
376 return 0; |
36d11bf4e58d
doveadm fetch: Added pop3.order field.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
377 } |
36d11bf4e58d
doveadm fetch: Added pop3.order field.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
378 |
18842
ffecdb676c53
doveadm fetch: Added "refcount" field.
Timo Sirainen <tss@iki.fi>
parents:
18259
diff
changeset
|
379 static int fetch_refcount(struct fetch_cmd_context *ctx) |
ffecdb676c53
doveadm fetch: Added "refcount" field.
Timo Sirainen <tss@iki.fi>
parents:
18259
diff
changeset
|
380 { |
ffecdb676c53
doveadm fetch: Added "refcount" field.
Timo Sirainen <tss@iki.fi>
parents:
18259
diff
changeset
|
381 const char *value; |
ffecdb676c53
doveadm fetch: Added "refcount" field.
Timo Sirainen <tss@iki.fi>
parents:
18259
diff
changeset
|
382 |
ffecdb676c53
doveadm fetch: Added "refcount" field.
Timo Sirainen <tss@iki.fi>
parents:
18259
diff
changeset
|
383 if (mail_get_special(ctx->mail, MAIL_FETCH_REFCOUNT, &value) < 0) |
ffecdb676c53
doveadm fetch: Added "refcount" field.
Timo Sirainen <tss@iki.fi>
parents:
18259
diff
changeset
|
384 return -1; |
ffecdb676c53
doveadm fetch: Added "refcount" field.
Timo Sirainen <tss@iki.fi>
parents:
18259
diff
changeset
|
385 doveadm_print(value); |
ffecdb676c53
doveadm fetch: Added "refcount" field.
Timo Sirainen <tss@iki.fi>
parents:
18259
diff
changeset
|
386 return 0; |
ffecdb676c53
doveadm fetch: Added "refcount" field.
Timo Sirainen <tss@iki.fi>
parents:
18259
diff
changeset
|
387 } |
ffecdb676c53
doveadm fetch: Added "refcount" field.
Timo Sirainen <tss@iki.fi>
parents:
18259
diff
changeset
|
388 |
19259
2ceca0becf8e
doveadm fetch: Added "storageid" field.
Timo Sirainen <tss@iki.fi>
parents:
18842
diff
changeset
|
389 static int fetch_storageid(struct fetch_cmd_context *ctx) |
2ceca0becf8e
doveadm fetch: Added "storageid" field.
Timo Sirainen <tss@iki.fi>
parents:
18842
diff
changeset
|
390 { |
2ceca0becf8e
doveadm fetch: Added "storageid" field.
Timo Sirainen <tss@iki.fi>
parents:
18842
diff
changeset
|
391 const char *value; |
2ceca0becf8e
doveadm fetch: Added "storageid" field.
Timo Sirainen <tss@iki.fi>
parents:
18842
diff
changeset
|
392 |
2ceca0becf8e
doveadm fetch: Added "storageid" field.
Timo Sirainen <tss@iki.fi>
parents:
18842
diff
changeset
|
393 if (mail_get_special(ctx->mail, MAIL_FETCH_STORAGE_ID, &value) < 0) |
2ceca0becf8e
doveadm fetch: Added "storageid" field.
Timo Sirainen <tss@iki.fi>
parents:
18842
diff
changeset
|
394 return -1; |
2ceca0becf8e
doveadm fetch: Added "storageid" field.
Timo Sirainen <tss@iki.fi>
parents:
18842
diff
changeset
|
395 doveadm_print(value); |
2ceca0becf8e
doveadm fetch: Added "storageid" field.
Timo Sirainen <tss@iki.fi>
parents:
18842
diff
changeset
|
396 return 0; |
2ceca0becf8e
doveadm fetch: Added "storageid" field.
Timo Sirainen <tss@iki.fi>
parents:
18842
diff
changeset
|
397 } |
2ceca0becf8e
doveadm fetch: Added "storageid" field.
Timo Sirainen <tss@iki.fi>
parents:
18842
diff
changeset
|
398 |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
399 static const struct fetch_field fetch_fields[] = { |
11511
9f9f9d9e4a79
doveadm fetch: Added "user" field.
Timo Sirainen <tss@iki.fi>
parents:
11409
diff
changeset
|
400 { "user", 0, fetch_user }, |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
401 { "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
|
402 { "mailbox-guid", 0, fetch_mailbox_guid }, |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
403 { "seq", 0, fetch_seq }, |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
404 { "uid", 0, fetch_uid }, |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
405 { "guid", 0, fetch_guid }, |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
406 { "flags", MAIL_FETCH_FLAGS, fetch_flags }, |
15701
61aaf4102761
doveadm fetch: Added "modseq" field.
Timo Sirainen <tss@iki.fi>
parents:
15053
diff
changeset
|
407 { "modseq", 0, fetch_modseq }, |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
408 { "hdr", MAIL_FETCH_STREAM_HEADER, fetch_hdr }, |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
409 { "body", MAIL_FETCH_STREAM_BODY, fetch_body }, |
18160
48d2bc84e047
doveadm fetch: Added body.snippet field.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
410 { "body.snippet", MAIL_FETCH_BODY_SNIPPET, fetch_body_snippet }, |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
411 { "text", MAIL_FETCH_STREAM_HEADER | |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
412 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
|
413 { "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
|
414 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
|
415 { "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
|
416 { "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
|
417 { "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
|
418 { "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
|
419 { "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
|
420 { "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
|
421 { "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
|
422 { "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
|
423 { "pop3.uidl", MAIL_FETCH_UIDL_BACKEND, fetch_pop3_uidl }, |
18842
ffecdb676c53
doveadm fetch: Added "refcount" field.
Timo Sirainen <tss@iki.fi>
parents:
18259
diff
changeset
|
424 { "pop3.order", MAIL_FETCH_POP3_ORDER, fetch_pop3_order }, |
19259
2ceca0becf8e
doveadm fetch: Added "storageid" field.
Timo Sirainen <tss@iki.fi>
parents:
18842
diff
changeset
|
425 { "refcount", MAIL_FETCH_REFCOUNT, fetch_refcount }, |
2ceca0becf8e
doveadm fetch: Added "storageid" field.
Timo Sirainen <tss@iki.fi>
parents:
18842
diff
changeset
|
426 { "storageid", MAIL_FETCH_STORAGE_ID, fetch_storageid } |
11205
dab4fb9f8140
doveadm fetch: Added support for fetching mails from multiple mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11175
diff
changeset
|
427 }; |
11147
51eea5bb3336
doveadm: Added initial code for fetch command.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
428 |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
429 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
|
430 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
431 unsigned int i; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
432 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
433 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
|
434 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
|
435 return &fetch_fields[i]; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
436 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
437 return NULL; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
438 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
439 |
11207
1ec4eb879f0e
doveadm fetch: If invalid fetch field is given, print list of available fields.
Timo Sirainen <tss@iki.fi>
parents:
11206
diff
changeset
|
440 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
|
441 { |
1ec4eb879f0e
doveadm fetch: If invalid fetch field is given, print list of available fields.
Timo Sirainen <tss@iki.fi>
parents:
11206
diff
changeset
|
442 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
|
443 |
1ec4eb879f0e
doveadm fetch: If invalid fetch field is given, print list of available fields.
Timo Sirainen <tss@iki.fi>
parents:
11206
diff
changeset
|
444 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
|
445 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
|
446 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
|
447 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
|
448 } |
1ec4eb879f0e
doveadm fetch: If invalid fetch field is given, print list of available fields.
Timo Sirainen <tss@iki.fi>
parents:
11206
diff
changeset
|
449 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
450 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
|
451 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
452 const char *const *fields, *name; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
453 const struct fetch_field *field; |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
454 struct fetch_field hdr_field; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
455 |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
456 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
|
457 hdr_field.print = fetch_hdr_field; |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
458 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
459 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
|
460 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
|
461 fields = t_strsplit_spaces(str, " "); |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
462 for (; *fields != NULL; fields++) { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
463 name = t_str_lcase(*fields); |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
464 |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
465 doveadm_print_header_simple(name); |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
466 if (strncmp(name, "hdr.", 4) == 0) { |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
467 name += 4; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
468 hdr_field.name = name; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
469 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
|
470 name = t_strcut(name, '.'); |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
471 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
|
472 } else { |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
473 field = fetch_field_find(name); |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
474 if (field == NULL) { |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
475 print_fetch_fields(); |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
476 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
|
477 } |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
478 ctx->wanted_fields |= field->wanted_fields; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
479 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
|
480 } |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
481 } |
14686
9ff19c1d5f69
Added array_append_zero() to write a zero-filled record to an array.
Timo Sirainen <tss@iki.fi>
parents:
14681
diff
changeset
|
482 array_append_zero(&ctx->header_fields); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
483 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
484 |
14137
0a5951b08478
doveadm: Improved error handling. Failures should now always have non-zero exit code.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
485 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
|
486 { |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
487 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
|
488 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
|
489 int ret = 0; |
11209
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
490 |
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
491 array_foreach(&ctx->fields, field) { |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
492 ctx->cur_field = field; |
11209
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
493 if (field->print(ctx) < 0) { |
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
494 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
|
495 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
|
496 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
|
497 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
|
498 ret = -1; |
11209
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
499 } |
11205
dab4fb9f8140
doveadm fetch: Added support for fetching mails from multiple mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11175
diff
changeset
|
500 } |
14137
0a5951b08478
doveadm: Improved error handling. Failures should now always have non-zero exit code.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
501 return ret; |
11209
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
502 } |
11147
51eea5bb3336
doveadm: Added initial code for fetch command.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
503 |
11209
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
504 static int |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
505 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
|
506 { |
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
507 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
|
508 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
|
509 |
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 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
|
511 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
|
512 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
|
513 &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
|
514 return -1; |
24a983a9ff6f
doveadm: doveadm_mail_iter_init() API change to fix "doveadm fetch" crash.
Timo Sirainen <tss@iki.fi>
parents:
12870
diff
changeset
|
515 |
24a983a9ff6f
doveadm: doveadm_mail_iter_init() API change to fix "doveadm fetch" crash.
Timo Sirainen <tss@iki.fi>
parents:
12870
diff
changeset
|
516 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
|
517 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
|
518 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
|
519 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
|
520 } T_END; |
12870
1fbd59c48414
lib-storage: Changed mailbox_search_*() API to return pointer struct mail.
Timo Sirainen <tss@iki.fi>
parents:
12862
diff
changeset
|
521 } |
14137
0a5951b08478
doveadm: Improved error handling. Failures should now always have non-zero exit code.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
522 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
|
523 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
|
524 return ret; |
11147
51eea5bb3336
doveadm: Added initial code for fetch command.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
525 } |
11205
dab4fb9f8140
doveadm fetch: Added support for fetching mails from multiple mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11175
diff
changeset
|
526 |
14137
0a5951b08478
doveadm: Improved error handling. Failures should now always have non-zero exit code.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
527 static int |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
528 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
|
529 { |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
530 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
|
531 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
|
532 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
|
533 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
|
534 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
|
535 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
|
536 int ret = 0; |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
537 |
14137
0a5951b08478
doveadm: Improved error handling. Failures should now always have non-zero exit code.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
538 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
|
539 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
|
540 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
|
541 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
|
542 ret = -1; |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
543 } 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
|
544 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
|
545 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
|
546 return ret; |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
547 } |
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
548 |
11294
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
549 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
|
550 const char *const args[]) |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
551 { |
11294
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
552 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
|
553 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
|
554 |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
555 if (fetch_fields == NULL || args[1] == NULL) |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
556 doveadm_mail_help_name("fetch"); |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
557 |
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
558 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
|
559 _ctx->search_args = doveadm_mail_build_search_args(args + 1); |
11294
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
560 } |
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
561 |
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
562 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
|
563 { |
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
564 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
|
565 |
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
566 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
|
567 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
|
568 ctx->ctx.v.run = cmd_fetch_run; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
569 doveadm_print_init("pager"); |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
570 return &ctx->ctx; |
11205
dab4fb9f8140
doveadm fetch: Added support for fetching mails from multiple mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11175
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 |
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
573 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
|
574 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
|
575 }; |