Mercurial > dovecot > core-2.2
annotate src/doveadm/doveadm-mail-fetch.c @ 13287:957060ca5b69
Moved GUID code to liblib. Use guid_128_t type consistently everywhere.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Thu, 25 Aug 2011 01:16:11 +0300 |
parents | 24a983a9ff6f |
children | 276a39ebda4d |
rev | line source |
---|---|
12822
44d0474a451e
Updated copyright notices to include year 2011.
Timo Sirainen <tss@iki.fi>
parents:
12341
diff
changeset
|
1 /* Copyright (c) 2010-2011 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" |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
8 #include "message-size.h" |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
9 #include "imap-util.h" |
11511
9f9f9d9e4a79
doveadm fetch: Added "user" field.
Timo Sirainen <tss@iki.fi>
parents:
11409
diff
changeset
|
10 #include "mail-user.h" |
11147
51eea5bb3336
doveadm: Added initial code for fetch command.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
11 #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
|
12 #include "mail-search.h" |
11588
9a852084bbeb
doveadm: Fixed assert-crash when listing mailbox foo/*
Timo Sirainen <tss@iki.fi>
parents:
11511
diff
changeset
|
13 #include "mail-namespace.h" |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
14 #include "doveadm-print.h" |
11147
51eea5bb3336
doveadm: Added initial code for fetch command.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
15 #include "doveadm-mail.h" |
11205
dab4fb9f8140
doveadm fetch: Added support for fetching mails from multiple mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11175
diff
changeset
|
16 #include "doveadm-mail-list-iter.h" |
11209
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
17 #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
|
18 |
11207
1ec4eb879f0e
doveadm fetch: If invalid fetch field is given, print list of available fields.
Timo Sirainen <tss@iki.fi>
parents:
11206
diff
changeset
|
19 #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
|
20 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
21 struct fetch_cmd_context { |
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
22 struct doveadm_mail_cmd_context ctx; |
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
23 |
11205
dab4fb9f8140
doveadm fetch: Added support for fetching mails from multiple mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11175
diff
changeset
|
24 struct ostream *output; |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
25 struct mail *mail; |
11205
dab4fb9f8140
doveadm fetch: Added support for fetching mails from multiple mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11175
diff
changeset
|
26 |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
27 ARRAY_DEFINE(fields, const struct fetch_field); |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
28 ARRAY_TYPE(const_string) header_fields; |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
29 enum mail_fetch_field wanted_fields; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
30 |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
31 const struct fetch_field *cur_field; |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
32 }; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
33 |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
34 struct fetch_field { |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
35 const char *name; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
36 enum mail_fetch_field wanted_fields; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
37 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
|
38 }; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
39 |
11511
9f9f9d9e4a79
doveadm fetch: Added "user" field.
Timo Sirainen <tss@iki.fi>
parents:
11409
diff
changeset
|
40 static int fetch_user(struct fetch_cmd_context *ctx) |
9f9f9d9e4a79
doveadm fetch: Added "user" field.
Timo Sirainen <tss@iki.fi>
parents:
11409
diff
changeset
|
41 { |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
42 doveadm_print(ctx->ctx.cur_mail_user->username); |
11511
9f9f9d9e4a79
doveadm fetch: Added "user" field.
Timo Sirainen <tss@iki.fi>
parents:
11409
diff
changeset
|
43 return 0; |
9f9f9d9e4a79
doveadm fetch: Added "user" field.
Timo Sirainen <tss@iki.fi>
parents:
11409
diff
changeset
|
44 } |
9f9f9d9e4a79
doveadm fetch: Added "user" field.
Timo Sirainen <tss@iki.fi>
parents:
11409
diff
changeset
|
45 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
46 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
|
47 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
48 const char *value; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
49 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
50 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
|
51 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
|
52 |
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
|
53 doveadm_print(value); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
54 return 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
55 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
56 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
57 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
|
58 { |
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
|
59 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
|
60 |
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
|
61 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
|
62 &metadata) < 0) |
11233
5d0027f17bd8
doveadm fetch: Added support for mailbox-guid search key/fetch field.
Timo Sirainen <tss@iki.fi>
parents:
11209
diff
changeset
|
63 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
|
64 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
|
65 return 0; |
5d0027f17bd8
doveadm fetch: Added support for mailbox-guid search key/fetch field.
Timo Sirainen <tss@iki.fi>
parents:
11209
diff
changeset
|
66 } |
5d0027f17bd8
doveadm fetch: Added support for mailbox-guid search key/fetch field.
Timo Sirainen <tss@iki.fi>
parents:
11209
diff
changeset
|
67 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
68 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
|
69 { |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
70 doveadm_print_num(ctx->mail->seq); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
71 return 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
72 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
73 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
74 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
|
75 { |
12213
d6582f3ee54d
doveadm fetch: Fixed fetching uid field.
Timo Sirainen <tss@iki.fi>
parents:
11790
diff
changeset
|
76 doveadm_print_num(ctx->mail->uid); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
77 return 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
78 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
79 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
80 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
|
81 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
82 const char *value; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
83 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
84 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
|
85 return -1; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
86 doveadm_print(value); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
87 return 0; |
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 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
90 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
|
91 { |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
92 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
|
93 |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
94 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
|
95 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
|
96 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
|
97 return 0; |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
98 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
99 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
100 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
|
101 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
102 struct istream *input; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
103 struct message_size hdr_size; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
104 const unsigned char *data; |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
105 size_t size; |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
106 int ret = 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
107 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
108 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
|
109 return -1; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
110 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
111 input = i_stream_create_limit(input, hdr_size.physical_size); |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
112 while (!i_stream_is_eof(input)) { |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
113 if (i_stream_read_data(input, &data, &size, 0) == -1) |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
114 break; |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
115 if (size == 0) |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
116 break; |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
117 doveadm_print_stream(data, size); |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
118 i_stream_skip(input, size); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
119 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
120 if (input->stream_errno != 0) { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
121 i_error("read() failed: %m"); |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
122 ret = -1; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
123 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
124 i_stream_unref(&input); |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
125 doveadm_print_stream(NULL, 0); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
126 return ret; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
127 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
128 |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
129 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
|
130 { |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
131 const char *const *value; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
132 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
|
133 bool add_lf = FALSE; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
134 |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
135 if (mail_get_headers(ctx->mail, ctx->cur_field->name, &value) < 0) |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
136 return -1; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
137 |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
138 for (; *value != NULL; value++) { |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
139 if (add_lf) |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
140 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
|
141 str_append(str, *value); |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
142 add_lf = TRUE; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
143 } |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
144 doveadm_print(str_c(str)); |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
145 return 0; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
146 } |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
147 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
148 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
|
149 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
150 struct istream *input; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
151 struct message_size hdr_size; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
152 const unsigned char *data; |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
153 size_t size; |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
154 int ret = 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
155 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
156 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
|
157 return -1; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
158 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
159 i_stream_skip(input, hdr_size.physical_size); |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
160 while (!i_stream_is_eof(input)) { |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
161 if (i_stream_read_data(input, &data, &size, 0) == -1) |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
162 break; |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
163 if (size == 0) |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
164 break; |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
165 doveadm_print_stream(data, size); |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
166 i_stream_skip(input, size); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
167 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
168 if (input->stream_errno != 0) { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
169 i_error("read() failed: %m"); |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
170 ret = -1; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
171 } |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
172 doveadm_print_stream(NULL, 0); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
173 return ret; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
174 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
175 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
176 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
|
177 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
178 struct istream *input; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
179 const unsigned char *data; |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
180 size_t size; |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
181 int ret = 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
182 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
183 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
|
184 return -1; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
185 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
186 while (!i_stream_is_eof(input)) { |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
187 if (i_stream_read_data(input, &data, &size, 0) == -1) |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
188 break; |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
189 if (size == 0) |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
190 break; |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
191 doveadm_print_stream(data, size); |
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
192 i_stream_skip(input, size); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
193 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
194 if (input->stream_errno != 0) { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
195 i_error("read() failed: %m"); |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
196 ret = -1; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
197 } |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
198 doveadm_print_stream(NULL, 0); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
199 return ret; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
200 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
201 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
202 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
|
203 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
204 uoff_t size; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
205 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
206 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
|
207 return -1; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
208 doveadm_print_num(size); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
209 return 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
210 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
211 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
212 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
|
213 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
214 uoff_t size; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
215 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
216 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
|
217 return -1; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
218 doveadm_print_num(size); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
219 return 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
220 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
221 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
222 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
|
223 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
224 time_t t; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
225 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
226 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
|
227 return -1; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
228 doveadm_print(unixdate2str(t)); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
229 return 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
230 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
231 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
232 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
|
233 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
234 time_t t; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
235 int tz; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
236 char chr; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
237 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
238 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
|
239 return -1; |
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 chr = tz < 0 ? '-' : '+'; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
242 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
|
243 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
|
244 chr, tz/60, tz%60)); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
245 return 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
246 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
247 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
248 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
|
249 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
250 time_t t; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
251 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
252 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
|
253 return -1; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
254 doveadm_print(unixdate2str(t)); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
255 return 0; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
256 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
257 |
11337
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
258 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
|
259 { |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
260 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
|
261 |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
262 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
|
263 return -1; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
264 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
|
265 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
|
266 } |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
267 |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
268 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
|
269 { |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
270 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
|
271 |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
272 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
|
273 return -1; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
274 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
|
275 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
|
276 } |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
277 |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
278 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
|
279 { |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
280 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
|
281 |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
282 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
|
283 return -1; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
284 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
|
285 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
|
286 } |
12341
3b13bd2d64f4
doveadm fetch: Added support for pop3.uidl field.
Timo Sirainen <tss@iki.fi>
parents:
12213
diff
changeset
|
287 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
|
288 { |
3b13bd2d64f4
doveadm fetch: Added support for pop3.uidl field.
Timo Sirainen <tss@iki.fi>
parents:
12213
diff
changeset
|
289 const char *value; |
3b13bd2d64f4
doveadm fetch: Added support for pop3.uidl field.
Timo Sirainen <tss@iki.fi>
parents:
12213
diff
changeset
|
290 |
3b13bd2d64f4
doveadm fetch: Added support for pop3.uidl field.
Timo Sirainen <tss@iki.fi>
parents:
12213
diff
changeset
|
291 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
|
292 return -1; |
3b13bd2d64f4
doveadm fetch: Added support for pop3.uidl field.
Timo Sirainen <tss@iki.fi>
parents:
12213
diff
changeset
|
293 doveadm_print(value); |
3b13bd2d64f4
doveadm fetch: Added support for pop3.uidl field.
Timo Sirainen <tss@iki.fi>
parents:
12213
diff
changeset
|
294 return 0; |
3b13bd2d64f4
doveadm fetch: Added support for pop3.uidl field.
Timo Sirainen <tss@iki.fi>
parents:
12213
diff
changeset
|
295 } |
11337
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
296 |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
297 static const struct fetch_field fetch_fields[] = { |
11511
9f9f9d9e4a79
doveadm fetch: Added "user" field.
Timo Sirainen <tss@iki.fi>
parents:
11409
diff
changeset
|
298 { "user", 0, fetch_user }, |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
299 { "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
|
300 { "mailbox-guid", 0, fetch_mailbox_guid }, |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
301 { "seq", 0, fetch_seq }, |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
302 { "uid", 0, fetch_uid }, |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
303 { "guid", 0, fetch_guid }, |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
304 { "flags", MAIL_FETCH_FLAGS, fetch_flags }, |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
305 { "hdr", MAIL_FETCH_STREAM_HEADER, fetch_hdr }, |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
306 { "body", MAIL_FETCH_STREAM_BODY, fetch_body }, |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
307 { "text", MAIL_FETCH_STREAM_HEADER | |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
308 MAIL_FETCH_STREAM_BODY, fetch_text }, |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
309 { "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
|
310 { "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
|
311 { "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
|
312 { "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
|
313 { "date.saved", MAIL_FETCH_SAVE_DATE, fetch_date_saved }, |
4ec22f3bfd9f
doveadm fetch: Added support for imap.envelope, imap.body and imap.bodystructure fields.
Timo Sirainen <tss@iki.fi>
parents:
11294
diff
changeset
|
314 { "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
|
315 { "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
|
316 { "imap.bodystructure", MAIL_FETCH_IMAP_BODYSTRUCTURE, fetch_imap_bodystructure }, |
3b13bd2d64f4
doveadm fetch: Added support for pop3.uidl field.
Timo Sirainen <tss@iki.fi>
parents:
12213
diff
changeset
|
317 { "pop3.uidl", MAIL_FETCH_UIDL_BACKEND, fetch_pop3_uidl } |
11205
dab4fb9f8140
doveadm fetch: Added support for fetching mails from multiple mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11175
diff
changeset
|
318 }; |
11147
51eea5bb3336
doveadm: Added initial code for fetch command.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
319 |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
320 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
|
321 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
322 unsigned int i; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
323 |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
324 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
|
325 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
|
326 return &fetch_fields[i]; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
327 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
328 return NULL; |
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 |
11207
1ec4eb879f0e
doveadm fetch: If invalid fetch field is given, print list of available fields.
Timo Sirainen <tss@iki.fi>
parents:
11206
diff
changeset
|
331 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
|
332 { |
1ec4eb879f0e
doveadm fetch: If invalid fetch field is given, print list of available fields.
Timo Sirainen <tss@iki.fi>
parents:
11206
diff
changeset
|
333 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
|
334 |
1ec4eb879f0e
doveadm fetch: If invalid fetch field is given, print list of available fields.
Timo Sirainen <tss@iki.fi>
parents:
11206
diff
changeset
|
335 fprintf(stderr, "Available fetch fields: %s", fetch_fields[0].name); |
1ec4eb879f0e
doveadm fetch: If invalid fetch field is given, print list of available fields.
Timo Sirainen <tss@iki.fi>
parents:
11206
diff
changeset
|
336 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
|
337 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
|
338 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
|
339 } |
1ec4eb879f0e
doveadm fetch: If invalid fetch field is given, print list of available fields.
Timo Sirainen <tss@iki.fi>
parents:
11206
diff
changeset
|
340 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
341 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
|
342 { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
343 const char *const *fields, *name; |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
344 const struct fetch_field *field; |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
345 struct fetch_field hdr_field; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
346 |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
347 memset(&hdr_field, 0, sizeof(hdr_field)); |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
348 hdr_field.print = fetch_hdr_field; |
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 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
|
351 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
|
352 fields = t_strsplit_spaces(str, " "); |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
353 for (; *fields != NULL; fields++) { |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
354 name = t_str_lcase(*fields); |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
355 |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
356 doveadm_print_header_simple(name); |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
357 if (strncmp(name, "hdr.", 4) == 0) { |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
358 name += 4; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
359 hdr_field.name = name; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
360 array_append(&ctx->fields, &hdr_field, 1); |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
361 array_append(&ctx->header_fields, &name, 1); |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
362 } else { |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
363 field = fetch_field_find(name); |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
364 if (field == NULL) { |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
365 print_fetch_fields(); |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
366 i_fatal("Unknown fetch field: %s", name); |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
367 } |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
368 ctx->wanted_fields |= field->wanted_fields; |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
369 array_append(&ctx->fields, field, 1); |
11207
1ec4eb879f0e
doveadm fetch: If invalid fetch field is given, print list of available fields.
Timo Sirainen <tss@iki.fi>
parents:
11206
diff
changeset
|
370 } |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
371 } |
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
372 (void)array_append_space(&ctx->header_fields); |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
373 } |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
374 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
375 static void 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
|
376 { |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
377 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
|
378 struct mail *mail = ctx->mail; |
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
379 |
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
380 array_foreach(&ctx->fields, field) { |
11342
b43d6d2ef2fb
doveadm fetch: Added support for hdr.<name> field.
Timo Sirainen <tss@iki.fi>
parents:
11337
diff
changeset
|
381 ctx->cur_field = field; |
11209
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
382 if (field->print(ctx) < 0) { |
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
383 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
|
384 field->name, mailbox_get_vname(mail->box), |
12585
b748c622e896
lib-storage: Added mailbox_get_last_*error() wrappers and use them.
Timo Sirainen <tss@iki.fi>
parents:
12550
diff
changeset
|
385 mail->uid, mailbox_get_last_error(mail->box, NULL)); |
11209
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
386 } |
11205
dab4fb9f8140
doveadm fetch: Added support for fetching mails from multiple mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11175
diff
changeset
|
387 } |
11209
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
388 } |
11147
51eea5bb3336
doveadm: Added initial code for fetch command.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
389 |
11209
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
390 static int |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
391 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
|
392 { |
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
393 struct doveadm_mail_iter *iter; |
c7cb58f1d2c6
doveadm: Removed more code duplication from altmove/fetch commands.
Timo Sirainen <tss@iki.fi>
parents:
11208
diff
changeset
|
394 struct mailbox_transaction_context *trans; |
12870
1fbd59c48414
lib-storage: Changed mailbox_search_*() API to return pointer struct mail.
Timo Sirainen <tss@iki.fi>
parents:
12862
diff
changeset
|
395 |
1fbd59c48414
lib-storage: Changed mailbox_search_*() API to return pointer struct mail.
Timo Sirainen <tss@iki.fi>
parents:
12862
diff
changeset
|
396 if (doveadm_mail_iter_init(info, ctx->ctx.search_args, |
12973
24a983a9ff6f
doveadm: doveadm_mail_iter_init() API change to fix "doveadm fetch" crash.
Timo Sirainen <tss@iki.fi>
parents:
12870
diff
changeset
|
397 ctx->wanted_fields, |
24a983a9ff6f
doveadm: doveadm_mail_iter_init() API change to fix "doveadm fetch" crash.
Timo Sirainen <tss@iki.fi>
parents:
12870
diff
changeset
|
398 array_idx(&ctx->header_fields, 0), |
12870
1fbd59c48414
lib-storage: Changed mailbox_search_*() API to return pointer struct mail.
Timo Sirainen <tss@iki.fi>
parents:
12862
diff
changeset
|
399 &trans, &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
|
400 return -1; |
24a983a9ff6f
doveadm: doveadm_mail_iter_init() API change to fix "doveadm fetch" crash.
Timo Sirainen <tss@iki.fi>
parents:
12870
diff
changeset
|
401 |
24a983a9ff6f
doveadm: doveadm_mail_iter_init() API change to fix "doveadm fetch" crash.
Timo Sirainen <tss@iki.fi>
parents:
12870
diff
changeset
|
402 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
|
403 T_BEGIN { |
24a983a9ff6f
doveadm: doveadm_mail_iter_init() API change to fix "doveadm fetch" crash.
Timo Sirainen <tss@iki.fi>
parents:
12870
diff
changeset
|
404 cmd_fetch_mail(ctx); |
24a983a9ff6f
doveadm: doveadm_mail_iter_init() API change to fix "doveadm fetch" crash.
Timo Sirainen <tss@iki.fi>
parents:
12870
diff
changeset
|
405 } T_END; |
12870
1fbd59c48414
lib-storage: Changed mailbox_search_*() API to return pointer struct mail.
Timo Sirainen <tss@iki.fi>
parents:
12862
diff
changeset
|
406 } |
12973
24a983a9ff6f
doveadm: doveadm_mail_iter_init() API change to fix "doveadm fetch" crash.
Timo Sirainen <tss@iki.fi>
parents:
12870
diff
changeset
|
407 return doveadm_mail_iter_deinit(&iter); |
11147
51eea5bb3336
doveadm: Added initial code for fetch command.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
408 } |
11205
dab4fb9f8140
doveadm fetch: Added support for fetching mails from multiple mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11175
diff
changeset
|
409 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
410 static void |
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
411 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
|
412 { |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
413 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
|
414 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
|
415 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
|
416 MAILBOX_LIST_ITER_RETURN_NO_FLAGS; |
dab4fb9f8140
doveadm fetch: Added support for fetching mails from multiple mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11175
diff
changeset
|
417 struct doveadm_mail_list_iter *iter; |
dab4fb9f8140
doveadm fetch: Added support for fetching mails from multiple mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11175
diff
changeset
|
418 const struct mailbox_info *info; |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
419 |
11395
07c9d1115029
doveadm: mail commands can now be extended more easily by plugins.
Timo Sirainen <tss@iki.fi>
parents:
11342
diff
changeset
|
420 iter = doveadm_mail_list_iter_init(user, _ctx->search_args, iter_flags); |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
421 while ((info = doveadm_mail_list_iter_next(iter)) != NULL) T_BEGIN { |
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
422 (void)cmd_fetch_box(ctx, info); |
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
423 } T_END; |
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
424 doveadm_mail_list_iter_deinit(&iter); |
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
425 } |
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
426 |
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
427 static void cmd_fetch_deinit(struct doveadm_mail_cmd_context *_ctx) |
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
428 { |
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
429 struct fetch_cmd_context *ctx = (struct fetch_cmd_context *)_ctx; |
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
430 |
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
431 o_stream_unref(&ctx->output); |
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
432 } |
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
433 |
11294
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
434 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
|
435 const char *const args[]) |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
436 { |
11294
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
437 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
|
438 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
|
439 |
11206
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
440 if (fetch_fields == NULL || args[1] == NULL) |
c8981561c5f2
doveadm fetch: Added "fields to fetch" parameter.
Timo Sirainen <tss@iki.fi>
parents:
11205
diff
changeset
|
441 doveadm_mail_help_name("fetch"); |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
442 |
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
443 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
|
444 _ctx->search_args = doveadm_mail_build_search_args(args + 1); |
11205
dab4fb9f8140
doveadm fetch: Added support for fetching mails from multiple mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11175
diff
changeset
|
445 |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
446 ctx->output = o_stream_create_fd(STDOUT_FILENO, 0, FALSE); |
11294
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
447 } |
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
448 |
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
449 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
|
450 { |
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
451 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
|
452 |
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
453 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
|
454 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
|
455 ctx->ctx.v.run = cmd_fetch_run; |
07c9d1115029
doveadm: mail commands can now be extended more easily by plugins.
Timo Sirainen <tss@iki.fi>
parents:
11342
diff
changeset
|
456 ctx->ctx.v.deinit = cmd_fetch_deinit; |
11605
bc03e6443ca7
doveadm fetch: Write output using formatter. Use pager as default.
Timo Sirainen <tss@iki.fi>
parents:
11602
diff
changeset
|
457 doveadm_print_init("pager"); |
11247
f05909834219
doveadm: Changed mail command handler API.
Timo Sirainen <tss@iki.fi>
parents:
11239
diff
changeset
|
458 return &ctx->ctx; |
11205
dab4fb9f8140
doveadm fetch: Added support for fetching mails from multiple mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11175
diff
changeset
|
459 } |
11294
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
460 |
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
461 struct doveadm_mail_cmd cmd_fetch = { |
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
462 cmd_fetch_alloc, "fetch", "<fields> <search query>" |
0c9db163d538
doveadm: Changed mail command API to be more easily extensible.
Timo Sirainen <tss@iki.fi>
parents:
11247
diff
changeset
|
463 }; |