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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
f1e8f8a73196 Compiler warning fix.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
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 };