Mercurial > dovecot > core-2.2
annotate src/doveadm/doveadm-mail-fetch.c @ 22713:cb108f786fb4
Updated copyright notices to include the year 2018.
author | Stephan Bosch <stephan.bosch@dovecot.fi> |
---|---|
date | Mon, 01 Jan 2018 22:42:08 +0100 |
parents | 759962e70148 |
children |
rev | line source |
---|---|
22713
cb108f786fb4
Updated copyright notices to include the year 2018.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents:
21814
diff
changeset
|
1 /* Copyright (c) 2010-2018 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" |
20258
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
18 #include "imap-msgpart.h" |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
19 #include "doveadm-print.h" |
11147
51eea5bb3336
doveadm: Added initial code for fetch command.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
20 #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
|
21 #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
|
22 #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
|
23 |
11207
1ec4eb879f0e
doveadm fetch: If invalid fetch field is given, print list of available fields.
Timo Sirainen <tss@iki.fi>
parents:
11206
diff
changeset
|
24 #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
|
25 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
26 struct fetch_cmd_context { |
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
27 struct doveadm_mail_cmd_context ctx; |
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
28 |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
29 struct mail *mail; |
11205
dab4fb9f8140
doveadm fetch: Added support for fetching mails from multiple mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11175
diff
changeset
|
30 |
15903 | 31 ARRAY(struct fetch_field) fields; |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
32 ARRAY_TYPE(const_string) header_fields; |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
33 enum mail_fetch_field wanted_fields; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
34 |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
35 const struct fetch_field *cur_field; |
20259
161d6407e613
doveadm fetch: Fixed logging errors for istream failures
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20258
diff
changeset
|
36 /* if print() returns -1, log this error if non-NULL. otherwise log |
161d6407e613
doveadm fetch: Fixed logging errors for istream failures
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20258
diff
changeset
|
37 the storage error. */ |
161d6407e613
doveadm fetch: Fixed logging errors for istream failures
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20258
diff
changeset
|
38 const char *print_error; |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
39 }; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
40 |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
41 struct fetch_field { |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
42 const char *name; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
43 enum mail_fetch_field wanted_fields; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
44 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
|
45 }; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
46 |
11511
9f9f9d9e4a79
doveadm fetch: Added "user" field.
Timo Sirainen <tss@iki.fi>
parents:
11409
diff
changeset
|
47 static int fetch_user(struct fetch_cmd_context *ctx) |
9f9f9d9e4a79
doveadm fetch: Added "user" field.
Timo Sirainen <tss@iki.fi>
parents:
11409
diff
changeset
|
48 { |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
49 doveadm_print(ctx->ctx.cur_mail_user->username); |
11511
9f9f9d9e4a79
doveadm fetch: Added "user" field.
Timo Sirainen <tss@iki.fi>
parents:
11409
diff
changeset
|
50 return 0; |
9f9f9d9e4a79
doveadm fetch: Added "user" field.
Timo Sirainen <tss@iki.fi>
parents:
11409
diff
changeset
|
51 } |
9f9f9d9e4a79
doveadm fetch: Added "user" field.
Timo Sirainen <tss@iki.fi>
parents:
11409
diff
changeset
|
52 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
53 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
|
54 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
55 const char *value; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
56 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
57 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
|
58 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
|
59 |
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
|
60 doveadm_print(value); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
61 return 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
62 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
63 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
64 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
|
65 { |
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
|
66 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
|
67 |
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
|
68 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
|
69 &metadata) < 0) |
11233
5d0027f17bd8
doveadm fetch: Added support for mailbox-guid search key/fetch field.
Timo Sirainen <tss@iki.fi>
parents:
11209
diff
changeset
|
70 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
|
71 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
|
72 return 0; |
5d0027f17bd8
doveadm fetch: Added support for mailbox-guid search key/fetch field.
Timo Sirainen <tss@iki.fi>
parents:
11209
diff
changeset
|
73 } |
5d0027f17bd8
doveadm fetch: Added support for mailbox-guid search key/fetch field.
Timo Sirainen <tss@iki.fi>
parents:
11209
diff
changeset
|
74 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
75 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
|
76 { |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
77 doveadm_print_num(ctx->mail->seq); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
78 return 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
79 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
80 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
81 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
|
82 { |
12213
d6582f3ee54d
doveadm fetch: Fixed fetching uid field.
Timo Sirainen <tss@iki.fi>
parents:
11790
diff
changeset
|
83 doveadm_print_num(ctx->mail->uid); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
84 return 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
85 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
86 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
87 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
|
88 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
89 const char *value; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
90 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
91 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
|
92 return -1; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
93 doveadm_print(value); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
94 return 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
95 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
96 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
97 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
|
98 { |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
99 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
|
100 |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
101 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
|
102 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
|
103 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
|
104 return 0; |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
105 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
106 |
15701
61aaf4102761
doveadm fetch: Added "modseq" field.
Timo Sirainen <tss@iki.fi>
parents:
15053
diff
changeset
|
107 static int fetch_modseq(struct fetch_cmd_context *ctx) |
61aaf4102761
doveadm fetch: Added "modseq" field.
Timo Sirainen <tss@iki.fi>
parents:
15053
diff
changeset
|
108 { |
61aaf4102761
doveadm fetch: Added "modseq" field.
Timo Sirainen <tss@iki.fi>
parents:
15053
diff
changeset
|
109 doveadm_print_num(mail_get_modseq(ctx->mail)); |
61aaf4102761
doveadm fetch: Added "modseq" field.
Timo Sirainen <tss@iki.fi>
parents:
15053
diff
changeset
|
110 return 0; |
61aaf4102761
doveadm fetch: Added "modseq" field.
Timo Sirainen <tss@iki.fi>
parents:
15053
diff
changeset
|
111 } |
61aaf4102761
doveadm fetch: Added "modseq" field.
Timo Sirainen <tss@iki.fi>
parents:
15053
diff
changeset
|
112 |
20259
161d6407e613
doveadm fetch: Fixed logging errors for istream failures
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20258
diff
changeset
|
113 static void |
161d6407e613
doveadm fetch: Fixed logging errors for istream failures
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20258
diff
changeset
|
114 fetch_set_istream_error(struct fetch_cmd_context *ctx, struct istream *input) |
161d6407e613
doveadm fetch: Fixed logging errors for istream failures
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20258
diff
changeset
|
115 { |
161d6407e613
doveadm fetch: Fixed logging errors for istream failures
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20258
diff
changeset
|
116 ctx->print_error = t_strdup_printf("read(%s) failed: %s", |
161d6407e613
doveadm fetch: Fixed logging errors for istream failures
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20258
diff
changeset
|
117 i_stream_get_name(input), i_stream_get_error(input)); |
161d6407e613
doveadm fetch: Fixed logging errors for istream failures
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20258
diff
changeset
|
118 } |
161d6407e613
doveadm fetch: Fixed logging errors for istream failures
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20258
diff
changeset
|
119 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
120 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
|
121 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
122 struct istream *input; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
123 struct message_size hdr_size; |
17989
89cbc0e91a77
doveadm fetch: Use doveadm_print_istream()
Timo Sirainen <tss@iki.fi>
parents:
17965
diff
changeset
|
124 int ret; |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
125 |
13601
276a39ebda4d
lib-storage: Added mail_get_hdr_stream() and use it where possible.
Timo Sirainen <tss@iki.fi>
parents:
13287
diff
changeset
|
126 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
|
127 return -1; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
128 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
129 input = i_stream_create_limit(input, hdr_size.physical_size); |
20259
161d6407e613
doveadm fetch: Fixed logging errors for istream failures
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20258
diff
changeset
|
130 if ((ret = doveadm_print_istream(input) < 0)) |
161d6407e613
doveadm fetch: Fixed logging errors for istream failures
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20258
diff
changeset
|
131 fetch_set_istream_error(ctx, input); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
132 i_stream_unref(&input); |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
133 return ret; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
134 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
135 |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
136 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
|
137 { |
14001
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
138 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
|
139 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
|
140 bool add_lf = FALSE; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
141 |
14001
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
142 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
|
143 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
|
144 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
|
145 |
17320
63361f087d1f
doveadm mail fetch: Use mail_get_headers_utf8() when fetching hdr.*.utf8
Timo Sirainen <tss@iki.fi>
parents:
17134
diff
changeset
|
146 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
|
147 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
|
148 return -1; |
63361f087d1f
doveadm mail fetch: Use mail_get_headers_utf8() when fetching hdr.*.utf8
Timo Sirainen <tss@iki.fi>
parents:
17134
diff
changeset
|
149 } else { |
63361f087d1f
doveadm mail fetch: Use mail_get_headers_utf8() when fetching hdr.*.utf8
Timo Sirainen <tss@iki.fi>
parents:
17134
diff
changeset
|
150 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
|
151 return -1; |
63361f087d1f
doveadm mail fetch: Use mail_get_headers_utf8() when fetching hdr.*.utf8
Timo Sirainen <tss@iki.fi>
parents:
17134
diff
changeset
|
152 } |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
153 |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
154 for (; *value != NULL; value++) { |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
155 if (add_lf) |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
156 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
|
157 str_append(str, *value); |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
158 add_lf = TRUE; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
159 } |
14001
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
160 |
17320
63361f087d1f
doveadm mail fetch: Use mail_get_headers_utf8() when fetching hdr.*.utf8
Timo Sirainen <tss@iki.fi>
parents:
17134
diff
changeset
|
161 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
|
162 /* 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
|
163 } 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
|
164 strcmp(filter, "address_name") == 0 || |
ceadfe9009aa
doveadm fetch: Added support for hdr.*.utf8 fields.
Timo Sirainen <tss@iki.fi>
parents:
14002
diff
changeset
|
165 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
|
166 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
|
167 |
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
168 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
|
169 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
|
170 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
|
171 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
|
172 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
|
173 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
|
174 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
|
175 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
|
176 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
|
177 if (addr->mailbox != NULL) |
afeabe28a499
doveadm fetch hdr.*.adddress*: Don't crash when printing groups.
Timo Sirainen <tss@iki.fi>
parents:
14001
diff
changeset
|
178 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
|
179 if (addr->domain != NULL) { |
afeabe28a499
doveadm fetch hdr.*.adddress*: Don't crash when printing groups.
Timo Sirainen <tss@iki.fi>
parents:
14001
diff
changeset
|
180 str_append_c(str, '@'); |
afeabe28a499
doveadm fetch hdr.*.adddress*: Don't crash when printing groups.
Timo Sirainen <tss@iki.fi>
parents:
14001
diff
changeset
|
181 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
|
182 } |
14058
ceadfe9009aa
doveadm fetch: Added support for hdr.*.utf8 fields.
Timo Sirainen <tss@iki.fi>
parents:
14002
diff
changeset
|
183 } else if (addr->name != NULL) { |
ceadfe9009aa
doveadm fetch: Added support for hdr.*.utf8 fields.
Timo Sirainen <tss@iki.fi>
parents:
14002
diff
changeset
|
184 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
|
185 str_append(str, addr->name); |
14058
ceadfe9009aa
doveadm fetch: Added support for hdr.*.utf8 fields.
Timo Sirainen <tss@iki.fi>
parents:
14002
diff
changeset
|
186 else { |
ceadfe9009aa
doveadm fetch: Added support for hdr.*.utf8 fields.
Timo Sirainen <tss@iki.fi>
parents:
14002
diff
changeset
|
187 message_header_decode_utf8( |
ceadfe9009aa
doveadm fetch: Added support for hdr.*.utf8 fields.
Timo Sirainen <tss@iki.fi>
parents:
14002
diff
changeset
|
188 (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
|
189 strlen(addr->name), str, NULL); |
14058
ceadfe9009aa
doveadm fetch: Added support for hdr.*.utf8 fields.
Timo Sirainen <tss@iki.fi>
parents:
14002
diff
changeset
|
190 } |
14001
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
191 } |
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
192 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
|
193 } |
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
194 } else { |
a6a787f0aba1
doveadm fetch: hdr.*.address and hdr.*.address_name expand to parsed mail addresses.
Timo Sirainen <tss@iki.fi>
parents:
14000
diff
changeset
|
195 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
|
196 } |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
197 doveadm_print(str_c(str)); |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
198 return 0; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
199 } |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
200 |
20258
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
201 static int fetch_body_field(struct fetch_cmd_context *ctx) |
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
202 { |
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
203 const char *name = ctx->cur_field->name; |
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
204 struct imap_msgpart *msgpart; |
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
205 struct imap_msgpart_open_result result; |
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
206 bool binary; |
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
207 int ret; |
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
208 |
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
209 binary = strncmp(name, "binary.", 7) == 0; |
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
210 name += binary ? 7 : 5; |
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
211 if (imap_msgpart_parse(name, &msgpart) < 0) |
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
212 i_unreached(); /* we already verified this was ok */ |
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
213 if (binary) |
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
214 imap_msgpart_set_decode_to_binary(msgpart); |
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
215 |
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
216 if (imap_msgpart_open(ctx->mail, msgpart, &result) < 0) { |
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
217 imap_msgpart_free(&msgpart); |
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
218 return -1; |
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
219 } |
20259
161d6407e613
doveadm fetch: Fixed logging errors for istream failures
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20258
diff
changeset
|
220 if ((ret = doveadm_print_istream(result.input) < 0)) |
161d6407e613
doveadm fetch: Fixed logging errors for istream failures
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20258
diff
changeset
|
221 fetch_set_istream_error(ctx, result.input); |
20258
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
222 i_stream_unref(&result.input); |
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
223 imap_msgpart_free(&msgpart); |
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
224 return ret; |
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
225 } |
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
226 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
227 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
|
228 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
229 struct istream *input; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
230 struct message_size hdr_size; |
20259
161d6407e613
doveadm fetch: Fixed logging errors for istream failures
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20258
diff
changeset
|
231 int ret; |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
232 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
233 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
|
234 return -1; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
235 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
236 i_stream_skip(input, hdr_size.physical_size); |
20259
161d6407e613
doveadm fetch: Fixed logging errors for istream failures
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20258
diff
changeset
|
237 if ((ret = doveadm_print_istream(input) < 0)) |
161d6407e613
doveadm fetch: Fixed logging errors for istream failures
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20258
diff
changeset
|
238 fetch_set_istream_error(ctx, input); |
161d6407e613
doveadm fetch: Fixed logging errors for istream failures
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20258
diff
changeset
|
239 return ret; |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
240 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
241 |
18160
48d2bc84e047
doveadm fetch: Added body.snippet field.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
242 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
|
243 { |
48d2bc84e047
doveadm fetch: Added body.snippet field.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
244 const char *value; |
48d2bc84e047
doveadm fetch: Added body.snippet field.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
245 |
48d2bc84e047
doveadm fetch: Added body.snippet field.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
246 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
|
247 return -1; |
48d2bc84e047
doveadm fetch: Added body.snippet field.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
248 /* [0] contains the snippet algorithm, skip over it */ |
48d2bc84e047
doveadm fetch: Added body.snippet field.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
249 i_assert(value[0] != '\0'); |
48d2bc84e047
doveadm fetch: Added body.snippet field.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
250 doveadm_print(value + 1); |
48d2bc84e047
doveadm fetch: Added body.snippet field.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
251 return 0; |
48d2bc84e047
doveadm fetch: Added body.snippet field.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
252 } |
48d2bc84e047
doveadm fetch: Added body.snippet field.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
253 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
254 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
|
255 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
256 struct istream *input; |
20259
161d6407e613
doveadm fetch: Fixed logging errors for istream failures
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20258
diff
changeset
|
257 int ret; |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
258 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
259 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
|
260 return -1; |
20259
161d6407e613
doveadm fetch: Fixed logging errors for istream failures
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20258
diff
changeset
|
261 if ((ret = doveadm_print_istream(input) < 0)) |
161d6407e613
doveadm fetch: Fixed logging errors for istream failures
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20258
diff
changeset
|
262 fetch_set_istream_error(ctx, input); |
161d6407e613
doveadm fetch: Fixed logging errors for istream failures
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20258
diff
changeset
|
263 return ret; |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
264 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
265 |
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 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
|
267 { |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
268 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
|
269 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
|
270 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
|
271 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
|
272 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
|
273 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
|
274 |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
275 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
|
276 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
|
277 |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
278 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
|
279 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
|
280 0); |
15053
c976a9c01613
Replaced "decomposed titlecase" conversions with more generic normalizer function.
Timo Sirainen <tss@iki.fi>
parents:
14920
diff
changeset
|
281 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
|
282 |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
283 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
|
284 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
|
285 &block)) |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
286 continue; |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
287 |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
288 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
|
289 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
|
290 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
|
291 } 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
|
292 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
|
293 else { |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
294 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
|
295 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
|
296 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
|
297 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
|
298 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
|
299 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
|
300 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
|
301 } |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
302 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
|
303 } |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
304 } |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
305 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
|
306 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
|
307 (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
|
308 |
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
|
309 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
|
310 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
|
311 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
|
312 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
|
313 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
|
314 } |
14000
2418871d09f5
doveadm fetch text.utf8: Don't return failure on success.
Timo Sirainen <tss@iki.fi>
parents:
13999
diff
changeset
|
315 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
|
316 } |
89a637820edd
doveadm fetch: Added text.utf8 field, which translates headers/body to UTF-8.
Timo Sirainen <tss@iki.fi>
parents:
13601
diff
changeset
|
317 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
318 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
|
319 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
320 uoff_t size; |
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 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
|
323 return -1; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
324 doveadm_print_num(size); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
325 return 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
326 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
327 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
328 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
|
329 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
330 uoff_t size; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
331 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
332 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
|
333 return -1; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
334 doveadm_print_num(size); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
335 return 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
336 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
337 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
338 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
|
339 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
340 time_t t; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
341 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
342 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
|
343 return -1; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
344 doveadm_print(unixdate2str(t)); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
345 return 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
346 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
347 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
348 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
|
349 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
350 time_t t; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
351 int tz; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
352 char chr; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
353 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
354 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
|
355 return -1; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
356 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
357 chr = tz < 0 ? '-' : '+'; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
358 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
|
359 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
|
360 chr, tz/60, tz%60)); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
361 return 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
362 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
363 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
364 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
|
365 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
366 time_t t; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
367 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
368 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
|
369 return -1; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
370 doveadm_print(unixdate2str(t)); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
371 return 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
372 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
373 |
19434
9a15b989cc41
doveadm fetch: Added date.sent/received/saved.unixtime
Timo Sirainen <tss@iki.fi>
parents:
19259
diff
changeset
|
374 static int fetch_date_received_unixtime(struct fetch_cmd_context *ctx) |
9a15b989cc41
doveadm fetch: Added date.sent/received/saved.unixtime
Timo Sirainen <tss@iki.fi>
parents:
19259
diff
changeset
|
375 { |
9a15b989cc41
doveadm fetch: Added date.sent/received/saved.unixtime
Timo Sirainen <tss@iki.fi>
parents:
19259
diff
changeset
|
376 time_t t; |
9a15b989cc41
doveadm fetch: Added date.sent/received/saved.unixtime
Timo Sirainen <tss@iki.fi>
parents:
19259
diff
changeset
|
377 |
9a15b989cc41
doveadm fetch: Added date.sent/received/saved.unixtime
Timo Sirainen <tss@iki.fi>
parents:
19259
diff
changeset
|
378 if (mail_get_received_date(ctx->mail, &t) < 0) |
9a15b989cc41
doveadm fetch: Added date.sent/received/saved.unixtime
Timo Sirainen <tss@iki.fi>
parents:
19259
diff
changeset
|
379 return -1; |
9a15b989cc41
doveadm fetch: Added date.sent/received/saved.unixtime
Timo Sirainen <tss@iki.fi>
parents:
19259
diff
changeset
|
380 doveadm_print(dec2str(t)); |
9a15b989cc41
doveadm fetch: Added date.sent/received/saved.unixtime
Timo Sirainen <tss@iki.fi>
parents:
19259
diff
changeset
|
381 return 0; |
9a15b989cc41
doveadm fetch: Added date.sent/received/saved.unixtime
Timo Sirainen <tss@iki.fi>
parents:
19259
diff
changeset
|
382 } |
9a15b989cc41
doveadm fetch: Added date.sent/received/saved.unixtime
Timo Sirainen <tss@iki.fi>
parents:
19259
diff
changeset
|
383 |
9a15b989cc41
doveadm fetch: Added date.sent/received/saved.unixtime
Timo Sirainen <tss@iki.fi>
parents:
19259
diff
changeset
|
384 static int fetch_date_sent_unixtime(struct fetch_cmd_context *ctx) |
9a15b989cc41
doveadm fetch: Added date.sent/received/saved.unixtime
Timo Sirainen <tss@iki.fi>
parents:
19259
diff
changeset
|
385 { |
9a15b989cc41
doveadm fetch: Added date.sent/received/saved.unixtime
Timo Sirainen <tss@iki.fi>
parents:
19259
diff
changeset
|
386 time_t t; |
9a15b989cc41
doveadm fetch: Added date.sent/received/saved.unixtime
Timo Sirainen <tss@iki.fi>
parents:
19259
diff
changeset
|
387 int tz; |
9a15b989cc41
doveadm fetch: Added date.sent/received/saved.unixtime
Timo Sirainen <tss@iki.fi>
parents:
19259
diff
changeset
|
388 |
9a15b989cc41
doveadm fetch: Added date.sent/received/saved.unixtime
Timo Sirainen <tss@iki.fi>
parents:
19259
diff
changeset
|
389 if (mail_get_date(ctx->mail, &t, &tz) < 0) |
9a15b989cc41
doveadm fetch: Added date.sent/received/saved.unixtime
Timo Sirainen <tss@iki.fi>
parents:
19259
diff
changeset
|
390 return -1; |
9a15b989cc41
doveadm fetch: Added date.sent/received/saved.unixtime
Timo Sirainen <tss@iki.fi>
parents:
19259
diff
changeset
|
391 |
9a15b989cc41
doveadm fetch: Added date.sent/received/saved.unixtime
Timo Sirainen <tss@iki.fi>
parents:
19259
diff
changeset
|
392 doveadm_print(dec2str(t)); |
9a15b989cc41
doveadm fetch: Added date.sent/received/saved.unixtime
Timo Sirainen <tss@iki.fi>
parents:
19259
diff
changeset
|
393 return 0; |
9a15b989cc41
doveadm fetch: Added date.sent/received/saved.unixtime
Timo Sirainen <tss@iki.fi>
parents:
19259
diff
changeset
|
394 } |
9a15b989cc41
doveadm fetch: Added date.sent/received/saved.unixtime
Timo Sirainen <tss@iki.fi>
parents:
19259
diff
changeset
|
395 |
9a15b989cc41
doveadm fetch: Added date.sent/received/saved.unixtime
Timo Sirainen <tss@iki.fi>
parents:
19259
diff
changeset
|
396 static int fetch_date_saved_unixtime(struct fetch_cmd_context *ctx) |
9a15b989cc41
doveadm fetch: Added date.sent/received/saved.unixtime
Timo Sirainen <tss@iki.fi>
parents:
19259
diff
changeset
|
397 { |
9a15b989cc41
doveadm fetch: Added date.sent/received/saved.unixtime
Timo Sirainen <tss@iki.fi>
parents:
19259
diff
changeset
|
398 time_t t; |
9a15b989cc41
doveadm fetch: Added date.sent/received/saved.unixtime
Timo Sirainen <tss@iki.fi>
parents:
19259
diff
changeset
|
399 |
9a15b989cc41
doveadm fetch: Added date.sent/received/saved.unixtime
Timo Sirainen <tss@iki.fi>
parents:
19259
diff
changeset
|
400 if (mail_get_save_date(ctx->mail, &t) < 0) |
9a15b989cc41
doveadm fetch: Added date.sent/received/saved.unixtime
Timo Sirainen <tss@iki.fi>
parents:
19259
diff
changeset
|
401 return -1; |
9a15b989cc41
doveadm fetch: Added date.sent/received/saved.unixtime
Timo Sirainen <tss@iki.fi>
parents:
19259
diff
changeset
|
402 doveadm_print(dec2str(t)); |
9a15b989cc41
doveadm fetch: Added date.sent/received/saved.unixtime
Timo Sirainen <tss@iki.fi>
parents:
19259
diff
changeset
|
403 return 0; |
9a15b989cc41
doveadm fetch: Added date.sent/received/saved.unixtime
Timo Sirainen <tss@iki.fi>
parents:
19259
diff
changeset
|
404 } |
9a15b989cc41
doveadm fetch: Added date.sent/received/saved.unixtime
Timo Sirainen <tss@iki.fi>
parents:
19259
diff
changeset
|
405 |
11337
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
406 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
|
407 { |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
408 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
|
409 |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
410 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
|
411 return -1; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
412 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
|
413 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
|
414 } |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
415 |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
416 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
|
417 { |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
418 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
|
419 |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
420 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
|
421 return -1; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
422 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
|
423 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
|
424 } |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
425 |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
426 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
|
427 { |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
428 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
|
429 |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
430 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
|
431 return -1; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
432 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
|
433 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
|
434 } |
12341
3b13bd2d64f4
doveadm fetch: Added support for pop3.uidl field.
Timo Sirainen <tss@iki.fi>
parents:
12213
diff
changeset
|
435 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
|
436 { |
3b13bd2d64f4
doveadm fetch: Added support for pop3.uidl field.
Timo Sirainen <tss@iki.fi>
parents:
12213
diff
changeset
|
437 const char *value; |
3b13bd2d64f4
doveadm fetch: Added support for pop3.uidl field.
Timo Sirainen <tss@iki.fi>
parents:
12213
diff
changeset
|
438 |
3b13bd2d64f4
doveadm fetch: Added support for pop3.uidl field.
Timo Sirainen <tss@iki.fi>
parents:
12213
diff
changeset
|
439 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
|
440 return -1; |
3b13bd2d64f4
doveadm fetch: Added support for pop3.uidl field.
Timo Sirainen <tss@iki.fi>
parents:
12213
diff
changeset
|
441 doveadm_print(value); |
3b13bd2d64f4
doveadm fetch: Added support for pop3.uidl field.
Timo Sirainen <tss@iki.fi>
parents:
12213
diff
changeset
|
442 return 0; |
3b13bd2d64f4
doveadm fetch: Added support for pop3.uidl field.
Timo Sirainen <tss@iki.fi>
parents:
12213
diff
changeset
|
443 } |
11337
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
444 |
17134
36d11bf4e58d
doveadm fetch: Added pop3.order field.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
445 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
|
446 { |
36d11bf4e58d
doveadm fetch: Added pop3.order field.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
447 const char *value; |
36d11bf4e58d
doveadm fetch: Added pop3.order field.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
448 |
36d11bf4e58d
doveadm fetch: Added pop3.order field.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
449 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
|
450 return -1; |
36d11bf4e58d
doveadm fetch: Added pop3.order field.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
451 doveadm_print(value); |
36d11bf4e58d
doveadm fetch: Added pop3.order field.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
452 return 0; |
36d11bf4e58d
doveadm fetch: Added pop3.order field.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
453 } |
36d11bf4e58d
doveadm fetch: Added pop3.order field.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
454 |
18842
ffecdb676c53
doveadm fetch: Added "refcount" field.
Timo Sirainen <tss@iki.fi>
parents:
18259
diff
changeset
|
455 static int fetch_refcount(struct fetch_cmd_context *ctx) |
ffecdb676c53
doveadm fetch: Added "refcount" field.
Timo Sirainen <tss@iki.fi>
parents:
18259
diff
changeset
|
456 { |
ffecdb676c53
doveadm fetch: Added "refcount" field.
Timo Sirainen <tss@iki.fi>
parents:
18259
diff
changeset
|
457 const char *value; |
ffecdb676c53
doveadm fetch: Added "refcount" field.
Timo Sirainen <tss@iki.fi>
parents:
18259
diff
changeset
|
458 |
ffecdb676c53
doveadm fetch: Added "refcount" field.
Timo Sirainen <tss@iki.fi>
parents:
18259
diff
changeset
|
459 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
|
460 return -1; |
ffecdb676c53
doveadm fetch: Added "refcount" field.
Timo Sirainen <tss@iki.fi>
parents:
18259
diff
changeset
|
461 doveadm_print(value); |
ffecdb676c53
doveadm fetch: Added "refcount" field.
Timo Sirainen <tss@iki.fi>
parents:
18259
diff
changeset
|
462 return 0; |
ffecdb676c53
doveadm fetch: Added "refcount" field.
Timo Sirainen <tss@iki.fi>
parents:
18259
diff
changeset
|
463 } |
ffecdb676c53
doveadm fetch: Added "refcount" field.
Timo Sirainen <tss@iki.fi>
parents:
18259
diff
changeset
|
464 |
19259
2ceca0becf8e
doveadm fetch: Added "storageid" field.
Timo Sirainen <tss@iki.fi>
parents:
18842
diff
changeset
|
465 static int fetch_storageid(struct fetch_cmd_context *ctx) |
2ceca0becf8e
doveadm fetch: Added "storageid" field.
Timo Sirainen <tss@iki.fi>
parents:
18842
diff
changeset
|
466 { |
2ceca0becf8e
doveadm fetch: Added "storageid" field.
Timo Sirainen <tss@iki.fi>
parents:
18842
diff
changeset
|
467 const char *value; |
2ceca0becf8e
doveadm fetch: Added "storageid" field.
Timo Sirainen <tss@iki.fi>
parents:
18842
diff
changeset
|
468 |
2ceca0becf8e
doveadm fetch: Added "storageid" field.
Timo Sirainen <tss@iki.fi>
parents:
18842
diff
changeset
|
469 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
|
470 return -1; |
2ceca0becf8e
doveadm fetch: Added "storageid" field.
Timo Sirainen <tss@iki.fi>
parents:
18842
diff
changeset
|
471 doveadm_print(value); |
2ceca0becf8e
doveadm fetch: Added "storageid" field.
Timo Sirainen <tss@iki.fi>
parents:
18842
diff
changeset
|
472 return 0; |
2ceca0becf8e
doveadm fetch: Added "storageid" field.
Timo Sirainen <tss@iki.fi>
parents:
18842
diff
changeset
|
473 } |
2ceca0becf8e
doveadm fetch: Added "storageid" field.
Timo Sirainen <tss@iki.fi>
parents:
18842
diff
changeset
|
474 |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
475 static const struct fetch_field fetch_fields[] = { |
11511
9f9f9d9e4a79
doveadm fetch: Added "user" field.
Timo Sirainen <tss@iki.fi>
parents:
11409
diff
changeset
|
476 { "user", 0, fetch_user }, |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
477 { "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
|
478 { "mailbox-guid", 0, fetch_mailbox_guid }, |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
479 { "seq", 0, fetch_seq }, |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
480 { "uid", 0, fetch_uid }, |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
481 { "guid", 0, fetch_guid }, |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
482 { "flags", MAIL_FETCH_FLAGS, fetch_flags }, |
15701
61aaf4102761
doveadm fetch: Added "modseq" field.
Timo Sirainen <tss@iki.fi>
parents:
15053
diff
changeset
|
483 { "modseq", 0, fetch_modseq }, |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
484 { "hdr", MAIL_FETCH_STREAM_HEADER, fetch_hdr }, |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
485 { "body", MAIL_FETCH_STREAM_BODY, fetch_body }, |
18160
48d2bc84e047
doveadm fetch: Added body.snippet field.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
486 { "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
|
487 { "text", MAIL_FETCH_STREAM_HEADER | |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
488 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
|
489 { "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
|
490 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
|
491 { "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
|
492 { "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
|
493 { "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
|
494 { "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
|
495 { "date.saved", MAIL_FETCH_SAVE_DATE, fetch_date_saved }, |
19434
9a15b989cc41
doveadm fetch: Added date.sent/received/saved.unixtime
Timo Sirainen <tss@iki.fi>
parents:
19259
diff
changeset
|
496 { "date.received.unixtime", MAIL_FETCH_RECEIVED_DATE, fetch_date_received_unixtime }, |
9a15b989cc41
doveadm fetch: Added date.sent/received/saved.unixtime
Timo Sirainen <tss@iki.fi>
parents:
19259
diff
changeset
|
497 { "date.sent.unixtime", MAIL_FETCH_DATE, fetch_date_sent_unixtime }, |
9a15b989cc41
doveadm fetch: Added date.sent/received/saved.unixtime
Timo Sirainen <tss@iki.fi>
parents:
19259
diff
changeset
|
498 { "date.saved.unixtime", MAIL_FETCH_SAVE_DATE, fetch_date_saved_unixtime }, |
11337
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
499 { "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
|
500 { "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
|
501 { "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
|
502 { "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
|
503 { "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
|
504 { "refcount", MAIL_FETCH_REFCOUNT, fetch_refcount }, |
2ceca0becf8e
doveadm fetch: Added "storageid" field.
Timo Sirainen <tss@iki.fi>
parents:
18842
diff
changeset
|
505 { "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
|
506 }; |
11147
51eea5bb3336
doveadm: Added initial code for fetch command.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
507 |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
508 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
|
509 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
510 unsigned int i; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
511 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
512 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
|
513 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
|
514 return &fetch_fields[i]; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
515 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
516 return NULL; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
517 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
518 |
11207
1ec4eb879f0e
doveadm fetch: If invalid fetch field is given, print list of available fields.
Timo Sirainen <tss@iki.fi>
parents:
11206
diff
changeset
|
519 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
|
520 { |
1ec4eb879f0e
doveadm fetch: If invalid fetch field is given, print list of available fields.
Timo Sirainen <tss@iki.fi>
parents:
11206
diff
changeset
|
521 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
|
522 |
20258
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
523 fprintf(stderr, "Available fetch fields: hdr.<name> body.<section> binary.<section> %s", fetch_fields[0].name); |
11207
1ec4eb879f0e
doveadm fetch: If invalid fetch field is given, print list of available fields.
Timo Sirainen <tss@iki.fi>
parents:
11206
diff
changeset
|
524 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
|
525 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
|
526 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
|
527 } |
1ec4eb879f0e
doveadm fetch: If invalid fetch field is given, print list of available fields.
Timo Sirainen <tss@iki.fi>
parents:
11206
diff
changeset
|
528 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
529 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
|
530 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
531 const char *const *fields, *name; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
532 const struct fetch_field *field; |
20258
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
533 struct fetch_field hdr_field, body_field; |
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
534 struct imap_msgpart *msgpart; |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
535 |
21389
59437f8764c6
global: Replaced all instances of memset(p, 0, sizeof(*p)) with the new i_zero() macro.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents:
21103
diff
changeset
|
536 i_zero(&hdr_field); |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
537 hdr_field.print = fetch_hdr_field; |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
538 |
21389
59437f8764c6
global: Replaced all instances of memset(p, 0, sizeof(*p)) with the new i_zero() macro.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents:
21103
diff
changeset
|
539 i_zero(&body_field); |
20258
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
540 body_field.print = fetch_body_field; |
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
541 |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
542 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
|
543 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
|
544 fields = t_strsplit_spaces(str, " "); |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
545 for (; *fields != NULL; fields++) { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
546 name = t_str_lcase(*fields); |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
547 |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
548 doveadm_print_header_simple(name); |
20523
7838bc17ed04
doveadm fetch: Fixed body.snippet.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20261
diff
changeset
|
549 if ((field = fetch_field_find(name)) != NULL) { |
7838bc17ed04
doveadm fetch: Fixed body.snippet.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20261
diff
changeset
|
550 ctx->wanted_fields |= field->wanted_fields; |
7838bc17ed04
doveadm fetch: Fixed body.snippet.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20261
diff
changeset
|
551 array_append(&ctx->fields, field, 1); |
7838bc17ed04
doveadm fetch: Fixed body.snippet.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20261
diff
changeset
|
552 } else if (strncmp(name, "hdr.", 4) == 0) { |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
553 name += 4; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
554 hdr_field.name = name; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
555 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
|
556 name = t_strcut(name, '.'); |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
557 array_append(&ctx->header_fields, &name, 1); |
20258
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
558 } else if (strncmp(name, "body.", 5) == 0 || |
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
559 strncmp(name, "binary.", 7) == 0) { |
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
560 bool binary = strncmp(name, "binary.", 7) == 0; |
20261
3edc9022b42f
doveadm fetch: Translate commas to spaces in body|binary.<section> with
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20259
diff
changeset
|
561 body_field.name = t_strarray_join(t_strsplit(name, ","), " "); |
20258
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
562 |
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
563 name += binary ? 7 : 5; |
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
564 if (imap_msgpart_parse(name, &msgpart) < 0) { |
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
565 print_fetch_fields(); |
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
566 i_fatal("Unknown fetch section: %s", name); |
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
567 } |
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
568 array_append(&ctx->fields, &body_field, 1); |
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
569 ctx->wanted_fields |= imap_msgpart_get_fetch_data(msgpart); |
a326b886ecbd
doveadm fetch: Added body.<section> and binary.<section> fields
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19830
diff
changeset
|
570 imap_msgpart_free(&msgpart); |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
571 } else { |
20523
7838bc17ed04
doveadm fetch: Fixed body.snippet.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20261
diff
changeset
|
572 print_fetch_fields(); |
7838bc17ed04
doveadm fetch: Fixed body.snippet.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20261
diff
changeset
|
573 i_fatal("Unknown fetch field: %s", name); |
11207
1ec4eb879f0e
doveadm fetch: If invalid fetch field is given, print list of available fields.
Timo Sirainen <tss@iki.fi>
parents:
11206
diff
changeset
|
574 } |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
575 } |
14686
9ff19c1d5f69
Added array_append_zero() to write a zero-filled record to an array.
Timo Sirainen <tss@iki.fi>
parents:
14681
diff
changeset
|
576 array_append_zero(&ctx->header_fields); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
577 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
578 |
14137
0a5951b08478
doveadm: Improved error handling. Failures should now always have non-zero exit code.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
579 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
|
580 { |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
581 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
|
582 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
|
583 int ret = 0; |
11209
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
584 |
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
585 array_foreach(&ctx->fields, field) { |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
586 ctx->cur_field = field; |
11209
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
587 if (field->print(ctx) < 0) { |
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
588 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
|
589 field->name, mailbox_get_vname(mail->box), |
20259
161d6407e613
doveadm fetch: Fixed logging errors for istream failures
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20258
diff
changeset
|
590 mail->uid, |
161d6407e613
doveadm fetch: Fixed logging errors for istream failures
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20258
diff
changeset
|
591 ctx->print_error != NULL ? ctx->print_error : |
21814
759962e70148
global: Log internal storage error on failure
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents:
21390
diff
changeset
|
592 mailbox_get_last_internal_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
|
593 doveadm_mail_failed_mailbox(&ctx->ctx, mail->box); |
20259
161d6407e613
doveadm fetch: Fixed logging errors for istream failures
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20258
diff
changeset
|
594 ctx->print_error = 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
|
595 ret = -1; |
11209
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
596 } |
11205
dab4fb9f8140
doveadm fetch: Added support for fetching mails from multiple mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11175
diff
changeset
|
597 } |
14137
0a5951b08478
doveadm: Improved error handling. Failures should now always have non-zero exit code.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
598 return ret; |
11209
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
599 } |
11147
51eea5bb3336
doveadm: Added initial code for fetch command.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
600 |
11209
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
601 static int |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
602 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
|
603 { |
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
604 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
|
605 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
|
606 |
14137
0a5951b08478
doveadm: Improved error handling. Failures should now always have non-zero exit code.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
607 if (doveadm_mail_iter_init(&ctx->ctx, info, ctx->ctx.search_args, |
21103
6c2272e86598
doveadm: Put doveadm_mail_iter_init parameters to right order
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21099
diff
changeset
|
608 ctx->wanted_fields, |
12973
24a983a9ff6f
doveadm: doveadm_mail_iter_init() API change to fix "doveadm fetch" crash.
Timo Sirainen <tss@iki.fi>
parents:
12870
diff
changeset
|
609 array_idx(&ctx->header_fields, 0), |
21103
6c2272e86598
doveadm: Put doveadm_mail_iter_init parameters to right order
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21099
diff
changeset
|
610 FALSE, |
16332
7808096bb674
doveadm_mail_iter_init(): Removed unnecessarily returning transaction.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
611 &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
|
612 return -1; |
24a983a9ff6f
doveadm: doveadm_mail_iter_init() API change to fix "doveadm fetch" crash.
Timo Sirainen <tss@iki.fi>
parents:
12870
diff
changeset
|
613 |
24a983a9ff6f
doveadm: doveadm_mail_iter_init() API change to fix "doveadm fetch" crash.
Timo Sirainen <tss@iki.fi>
parents:
12870
diff
changeset
|
614 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
|
615 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
|
616 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
|
617 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
|
618 } T_END; |
12870
1fbd59c48414
lib-storage: Changed mailbox_search_*() API to return pointer struct mail.
Timo Sirainen <tss@iki.fi>
parents:
12862
diff
changeset
|
619 } |
14137
0a5951b08478
doveadm: Improved error handling. Failures should now always have non-zero exit code.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
620 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
|
621 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
|
622 return ret; |
11147
51eea5bb3336
doveadm: Added initial code for fetch command.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
623 } |
11205
dab4fb9f8140
doveadm fetch: Added support for fetching mails from multiple mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11175
diff
changeset
|
624 |
14137
0a5951b08478
doveadm: Improved error handling. Failures should now always have non-zero exit code.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
625 static int |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
626 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
|
627 { |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
628 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
|
629 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
|
630 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
|
631 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
|
632 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
|
633 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
|
634 int ret = 0; |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
635 |
14137
0a5951b08478
doveadm: Improved error handling. Failures should now always have non-zero exit code.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
636 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
|
637 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
|
638 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
|
639 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
|
640 ret = -1; |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
641 } 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
|
642 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
|
643 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
|
644 return ret; |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
645 } |
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
646 |
11294
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
647 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
|
648 const char *const args[]) |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
649 { |
11294
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
650 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
|
651 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
|
652 |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
653 if (fetch_fields == NULL || args[1] == NULL) |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
654 doveadm_mail_help_name("fetch"); |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
655 |
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
656 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
|
657 _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
|
658 } |
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
659 |
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
660 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
|
661 { |
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
662 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
|
663 |
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
664 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
|
665 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
|
666 ctx->ctx.v.run = cmd_fetch_run; |
20996
47c46aaa0e62
doveadm: Code cleanup - add and use DOVEADM_PRINT_TYPE_PAGER macro
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20523
diff
changeset
|
667 doveadm_print_init(DOVEADM_PRINT_TYPE_PAGER); |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
668 return &ctx->ctx; |
11205
dab4fb9f8140
doveadm fetch: Added support for fetching mails from multiple mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11175
diff
changeset
|
669 } |
11294
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
670 |
19805
f569111ef855
doveadm-fetch: Use ver2 structures
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
19552
diff
changeset
|
671 struct doveadm_cmd_ver2 doveadm_cmd_fetch_ver2 = { |
f569111ef855
doveadm-fetch: Use ver2 structures
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
19552
diff
changeset
|
672 .name = "fetch", |
f569111ef855
doveadm-fetch: Use ver2 structures
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
19552
diff
changeset
|
673 .mail_cmd = cmd_fetch_alloc, |
19830
534d3c8e045d
doveadm: Define DOVEADM_CMD_MAIL_USAGE_PREFIX, which v2 commands use as their usage prefix.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19805
diff
changeset
|
674 .usage = DOVEADM_CMD_MAIL_USAGE_PREFIX"<fields> <search query>", |
19805
f569111ef855
doveadm-fetch: Use ver2 structures
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
19552
diff
changeset
|
675 DOVEADM_CMD_PARAMS_START |
f569111ef855
doveadm-fetch: Use ver2 structures
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
19552
diff
changeset
|
676 DOVEADM_CMD_MAIL_COMMON |
f569111ef855
doveadm-fetch: Use ver2 structures
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
19552
diff
changeset
|
677 DOVEADM_CMD_PARAM('\0', "field", CMD_PARAM_ARRAY, 0) |
f569111ef855
doveadm-fetch: Use ver2 structures
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
19552
diff
changeset
|
678 DOVEADM_CMD_PARAM('\0', "fieldstr", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL | CMD_PARAM_FLAG_DO_NOT_EXPOSE) /* FIXME: horrible hack, remove me when possible */ |
f569111ef855
doveadm-fetch: Use ver2 structures
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
19552
diff
changeset
|
679 DOVEADM_CMD_PARAM('\0', "query", CMD_PARAM_ARRAY, CMD_PARAM_FLAG_POSITIONAL) |
f569111ef855
doveadm-fetch: Use ver2 structures
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
19552
diff
changeset
|
680 DOVEADM_CMD_PARAMS_END |
11294
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
681 }; |