Codebase list fdm / 68d9491
Mass renaming part II. Nicholas Marriott 17 years ago
24 changed file(s) with 184 addition(s) and 182 deletion(s). Raw diff Collapse all Expand all
3434 int
3535 deliver_add_header_deliver(struct deliver_ctx *dctx, struct action *t)
3636 {
37 struct account *a = dctx->account;
38 struct mail *m = dctx->mail;
39 struct add_header_data *data = t->data;
40 char *value;
37 struct account *a = dctx->account;
38 struct mail *m = dctx->mail;
39 struct deliver_add_header_data *data = t->data;
40 char *value;
4141
4242 value = replace(data->value, m->tags, m, *dctx->pm_valid, dctx->pm);
4343 if (value == NULL) {
6666 void
6767 deliver_add_header_desc(struct action *t, char *buf, size_t len)
6868 {
69 struct add_header_data *data = t->data;
69 struct deliver_add_header_data *data = t->data;
7070
7171 xsnprintf(buf, len, "add-header \"%s\" \"%s\"", data->hdr, data->value);
7272 }
6666 int
6767 deliver_mbox_deliver(struct deliver_ctx *dctx, struct action *t)
6868 {
69 struct account *a = dctx->account;
70 struct mail *m = dctx->mail;
71 struct mbox_data *data = t->data;
72 char *path, *ptr, *ptr2, *from = NULL;
73 size_t len, len2;
74 int exists, fd = -1, fd2, res = DELIVER_FAILURE;
75 gzFile gzf = NULL;
69 struct account *a = dctx->account;
70 struct mail *m = dctx->mail;
71 struct deliver_mbox_data *data = t->data;
72 char *path, *ptr, *ptr2, *from = NULL;
73 size_t len, len2;
74 int exists, fd = -1, fd2;
75 int res = DELIVER_FAILURE;
76 gzFile gzf = NULL;
7677
7778 path = replace(data->path, m->tags, m, *dctx->pm_valid, dctx->pm);
7879 if (path == NULL || *path == '\0') {
200201 void
201202 deliver_mbox_desc(struct action *t, char *buf, size_t len)
202203 {
203 struct mbox_data *data = t->data;
204 struct deliver_mbox_data *data = t->data;
204205
205206 if (data->compress)
206207 xsnprintf(buf, len, "mbox \"%s\" compress", data->path);
6363 int
6464 deliver_smtp_deliver(struct deliver_ctx *dctx, struct action *t)
6565 {
66 struct account *a = dctx->account;
67 struct mail *m = dctx->mail;
68 struct smtp_data *data = t->data;
69 int done, code;
70 struct io *io;
71 char *cause, *to, *from, *line, *ptr, *lbuf;
72 enum smtp_state state;
73 size_t len, llen;
66 struct account *a = dctx->account;
67 struct mail *m = dctx->mail;
68 struct deliver_smtp_data *data = t->data;
69 int done, code;
70 struct io *io;
71 char *cause, *to, *from, *line, *ptr, *lbuf;
72 enum smtp_state state;
73 size_t len, llen;
7474
7575 io = connectproxy(&data->server, conf.proxy, IO_CRLF,
7676 conf.timeout * 1000, &cause);
196196 void
197197 deliver_smtp_desc(struct action *t, char *buf, size_t len)
198198 {
199 struct smtp_data *data = t->data;
199 struct deliver_smtp_data *data = t->data;
200200
201201 xsnprintf(buf, len, "smtp%s server \"%s\" port %s to \"%s\"",
202202 data->server.ssl ? "s" : "", data->server.host, data->server.port,
3535 int
3636 deliver_stdout_deliver(struct deliver_ctx *dctx, struct action *t)
3737 {
38 struct account *a = dctx->account;
39 struct mail *m = dctx->mail;
40 struct stdout_data *data = t->data;
41 char *from;
38 struct account *a = dctx->account;
39 struct mail *m = dctx->mail;
40 struct deliver_stdout_data *data = t->data;
41 char *from;
4242
4343 log_debug("%s: writing to stdout", a->name);
4444
6868 void
6969 deliver_stdout_desc(struct action *t, char *buf, size_t len)
7070 {
71 struct stdout_data *data = t->data;
71 struct deliver_stdout_data *data = t->data;
7272
7373 xsnprintf(buf, len, "stdout%s", data->add_from ? " add-from" : "");
7474 }
6363 };
6464
6565 /* Deliver smtp data. */
66 struct smtp_data {
66 struct deliver_smtp_data {
6767 struct server server;
6868 char *to;
6969 };
7070
7171 /* Deliver mbox data. */
72 struct mbox_data {
72 struct deliver_mbox_data {
7373 char *path;
7474 int compress;
7575 };
7676
7777 /* Deliver stdout data. */
78 struct stdout_data {
78 struct deliver_stdout_data {
7979 int add_from;
8080 };
8181
8282 /* Deliver add-header data. */
83 struct add_header_data {
83 struct deliver_add_header_data {
8484 char *hdr;
8585 char *value;
8686 };
+11
-11
fdm.h less more
298298 #define STRBENTRIES 64
299299 #define STRBBLOCK 512
300300
301 /* String block acsess macros. */
301 /* String block access macros. */
302302 #define STRB_KEY(sb, sbe) (((char *) (sb)) + (sizeof *(sb)) + sbe->key)
303303 #define STRB_VALUE(sb, sbe) (((char *) (sb)) + (sizeof *(sb)) + sbe->value)
304304
599599
600600 /* Privsep message data. */
601601 struct msgdata {
602 int error;
603 struct mail mail;
604
605 int pm_valid;
606 regmatch_t pm[NPMATCH];
602 int error;
603 struct mail mail;
604
605 int pm_valid;
606 regmatch_t pm[NPMATCH];
607607
608608 /* these only work so long as they aren't moved in either process */
609 struct account *account;
610 struct action *action;
611 struct command_data *cmddata;
612
613 uid_t uid;
609 struct account *account;
610 struct action *action;
611 struct match_command_data *cmddata;
612
613 uid_t uid;
614614 };
615615
616616 /* Privsep message. */
4747 int printflike2
4848 imap_putln(struct account *a, const char *fmt, ...)
4949 {
50 struct imap_data *data = a->data;
50 struct fetch_imap_data *data = a->data;
5151
5252 va_list ap;
5353
6161 char *
6262 imap_getln(struct account *a, int type)
6363 {
64 struct imap_data *data = a->data;
64 struct fetch_imap_data *data = a->data;
6565 char **lbuf = &data->lbuf;
6666 size_t *llen = &data->llen;
6767 char *line, *cause;
112112 void
113113 imap_flush(struct account *a)
114114 {
115 struct imap_data *data = a->data;
115 struct fetch_imap_data *data = a->data;
116116
117117 io_flush(data->io, NULL);
118118 }
120120 int
121121 fetch_imap_connect(struct account *a)
122122 {
123 struct imap_data *data = a->data;
123 struct fetch_imap_data *data = a->data;
124124 char *cause;
125125
126126 data->io = connectproxy(&data->server, conf.proxy, IO_CRLF,
152152 int
153153 fetch_imap_disconnect(struct account *a)
154154 {
155 struct imap_data *data = a->data;
155 struct fetch_imap_data *data = a->data;
156156
157157 if (imap_close(a) != 0)
158158 goto error;
176176 void
177177 fetch_imap_desc(struct account *a, char *buf, size_t len)
178178 {
179 struct imap_data *data = a->data;
179 struct fetch_imap_data *data = a->data;
180180
181181 xsnprintf(buf, len,
182182 "imap%s server \"%s\" port %s user \"%s\" folder \"%s\"",
4747 int printflike2
4848 imappipe_putln(struct account *a, const char *fmt, ...)
4949 {
50 struct imap_data *data = a->data;
50 struct fetch_imap_data *data = a->data;
5151
5252 va_list ap;
5353
6161 char *
6262 imappipe_getln(struct account *a, int type)
6363 {
64 struct imap_data *data = a->data;
64 struct fetch_imap_data *data = a->data;
6565 char **lbuf = &data->lbuf;
6666 size_t *llen = &data->llen;
6767 char *out, *err, *cause;
119119 void
120120 imappipe_flush(struct account *a)
121121 {
122 struct imap_data *data = a->data;
122 struct fetch_imap_data *data = a->data;
123123
124124 io_flush(data->cmd->io_in, NULL);
125125 }
127127 int
128128 fetch_imappipe_connect(struct account *a)
129129 {
130 struct imap_data *data = a->data;
130 struct fetch_imap_data *data = a->data;
131131 char *cause;
132132
133133 data->cmd = cmd_start(data->pipecmd, CMD_IN|CMD_OUT, NULL, 0, &cause);
160160 int
161161 fetch_imappipe_disconnect(struct account *a)
162162 {
163 struct imap_data *data = a->data;
163 struct fetch_imap_data *data = a->data;
164164
165165 if (imap_close(a) != 0)
166166 goto error;
182182 void
183183 fetch_imappipe_desc(struct account *a, char *buf, size_t len)
184184 {
185 struct imap_data *data = a->data;
185 struct fetch_imap_data *data = a->data;
186186
187187 if (data->user == NULL) {
188188 xsnprintf(buf, len, "imap pipe \"%s\" folder \"%s\"",
5959 int
6060 maildir_makepaths(struct account *a)
6161 {
62 struct maildir_data *data = a->data;
63 char *s, *path;
64 u_int i, j;
65 glob_t g;
66 struct stat sb;
67 struct strb *tags;
62 struct fetch_maildir_data *data = a->data;
63 char *s, *path;
64 u_int i, j;
65 glob_t g;
66 struct stat sb;
67 struct strb *tags;
6868
6969 strb_create(&tags);
7070 default_tags(&tags, NULL, a);
131131 void
132132 maildir_freepaths(struct account *a)
133133 {
134 struct maildir_data *data = a->data;
135 u_int i;
134 struct fetch_maildir_data *data = a->data;
135 u_int i;
136136
137137 for (i = 0; i < ARRAY_LENGTH(data->paths); i++)
138138 xfree(ARRAY_ITEM(data->paths, i, char *));
143143 int
144144 fetch_maildir_connect(struct account *a)
145145 {
146 struct maildir_data *data = a->data;
146 struct fetch_maildir_data *data = a->data;
147147
148148 data->dirp = NULL;
149149
159159 int
160160 fetch_maildir_poll(struct account *a, u_int *n)
161161 {
162 struct maildir_data *data = a->data;
163 u_int i;
164 char *path, entry[MAXPATHLEN];
165 DIR *dirp;
166 struct dirent *dp;
167 struct stat sb;
162 struct fetch_maildir_data *data = a->data;
163 u_int i;
164 char *path, entry[MAXPATHLEN];
165 DIR *dirp;
166 struct dirent *dp;
167 struct stat sb;
168168
169169 *n = 0;
170170 for (i = 0; i < ARRAY_LENGTH(data->paths); i++) {
204204 int
205205 fetch_maildir_fetch(struct account *a, struct mail *m)
206206 {
207 struct maildir_data *data = a->data;
208 struct dirent *dp;
209 char *ptr, path[MAXPATHLEN];
210 struct stat sb;
211 int fd;
207 struct fetch_maildir_data *data = a->data;
208 struct dirent *dp;
209 char *ptr, path[MAXPATHLEN];
210 struct stat sb;
211 int fd;
212212
213213 restart:
214214 if (data->dirp == NULL) {
297297 int
298298 fetch_maildir_delete(struct account *a)
299299 {
300 struct maildir_data *data = a->data;
300 struct fetch_maildir_data *data = a->data;
301301
302302 if (unlink(data->entry) != 0) {
303303 log_warn("%s: %s: unlink", a->name, data->entry);
310310 int
311311 fetch_maildir_disconnect(struct account *a)
312312 {
313 struct maildir_data *data = a->data;
313 struct fetch_maildir_data *data = a->data;
314314
315315 maildir_freepaths(a);
316316
323323 void
324324 fetch_maildir_desc(struct account *a, char *buf, size_t len)
325325 {
326 struct maildir_data *data = a->data;
327 char *maildirs;
326 struct fetch_maildir_data *data = a->data;
327 char *maildirs;
328328
329329 maildirs = fmt_strings("maildirs ", data->maildirs);
330330 strlcpy(buf, maildirs, len);
8686 char *
8787 nntp_line(struct account *a, char **lbuf, size_t *llen)
8888 {
89 struct nntp_data *data = a->data;
89 struct fetch_nntp_data *data = a->data;
9090 char *line, *cause;
9191
9292 switch (io_pollline2(data->io, &line, lbuf, llen, &cause)) {
165165 int
166166 nntp_group(struct account *a, char **lbuf, size_t *llen)
167167 {
168 struct nntp_data *data = a->data;
168 struct fetch_nntp_data *data = a->data;
169169 struct nntp_group *group;
170170 char *line, *id;
171171 u_int n, last;
231231 int
232232 nntp_load(struct account *a)
233233 {
234 struct nntp_data *data = a->data;
234 struct fetch_nntp_data *data = a->data;
235235 struct nntp_group *group;
236236 int fd = -1, fd2;
237237 FILE *f = NULL;
316316 int
317317 nntp_save(struct account *a)
318318 {
319 struct nntp_data *data = a->data;
319 struct fetch_nntp_data *data = a->data;
320320 struct nntp_group *group;
321321 char tmp[MAXPATHLEN];
322322 int fd = -1;
366366 int
367367 fetch_nntp_init(struct account *a)
368368 {
369 struct nntp_data *data = a->data;
369 struct fetch_nntp_data *data = a->data;
370370 struct nntp_group *group;
371371 u_int i;
372372
387387 int
388388 fetch_nntp_free(struct account *a)
389389 {
390 struct nntp_data *data = a->data;
390 struct fetch_nntp_data *data = a->data;
391391 struct nntp_group *group;
392392 u_int i;
393393
406406 int
407407 fetch_nntp_connect(struct account *a)
408408 {
409 struct nntp_data *data = a->data;
409 struct fetch_nntp_data *data = a->data;
410410 char *lbuf, *line, *cause;
411411 size_t llen;
412412
459459 int
460460 fetch_nntp_disconnect(struct account *a)
461461 {
462 struct nntp_data *data = a->data;
462 struct fetch_nntp_data *data = a->data;
463463 char *lbuf, *line;
464464 size_t llen;
465465
492492 int
493493 fetch_nntp_poll(struct account *a, u_int *n)
494494 {
495 struct nntp_data *data = a->data;
495 struct fetch_nntp_data *data = a->data;
496496 char *lbuf;
497497 size_t llen;
498498
523523 int
524524 fetch_nntp_fetch(struct account *a, struct mail *m)
525525 {
526 struct nntp_data *data = a->data;
526 struct fetch_nntp_data *data = a->data;
527527 struct nntp_group *group;
528528 char *lbuf, *line, *id;
529529 size_t llen, off, len;
623623 void
624624 fetch_nntp_desc(struct account *a, char *buf, size_t len)
625625 {
626 struct nntp_data *data = a->data;
626 struct fetch_nntp_data *data = a->data;
627627 char *names;
628628
629629 names = fmt_strings("groups ", data->names);
5757 char *
5858 pop3_line(struct account *a, char **lbuf, size_t *llen)
5959 {
60 struct pop3_data *data = a->data;
60 struct fetch_pop3_data *data = a->data;
6161 char *line, *cause;
6262
6363 switch (io_pollline2(data->io, &line, lbuf, llen, &cause)) {
9292 int
9393 fetch_pop3_free(struct account *a)
9494 {
95 struct pop3_data *data = a->data;
95 struct fetch_pop3_data *data = a->data;
9696 u_int i;
9797
9898 if (data->uid != NULL)
108108 int
109109 fetch_pop3_init(struct account *a)
110110 {
111 struct pop3_data *data = a->data;
111 struct fetch_pop3_data *data = a->data;
112112
113113 ARRAY_INIT(&data->kept);
114114
118118 int
119119 fetch_pop3_connect(struct account *a)
120120 {
121 struct pop3_data *data = a->data;
121 struct fetch_pop3_data *data = a->data;
122122 char *lbuf, *line, *cause;
123123 size_t llen;
124124
173173 int
174174 fetch_pop3_disconnect(struct account *a)
175175 {
176 struct pop3_data *data = a->data;
176 struct fetch_pop3_data *data = a->data;
177177 char *lbuf;
178178 size_t llen;
179179
204204 int
205205 fetch_pop3_poll(struct account *a, u_int *n)
206206 {
207 struct pop3_data *data = a->data;
207 struct fetch_pop3_data *data = a->data;
208208
209209 *n = data->num;
210210
214214 int
215215 fetch_pop3_fetch(struct account *a, struct mail *m)
216216 {
217 struct pop3_data *data = a->data;
217 struct fetch_pop3_data *data = a->data;
218218 char *lbuf, *line, *uid;
219219 size_t llen, size, off, len;
220220 u_int lines, n, i;
368368 int
369369 fetch_pop3_delete(struct account *a)
370370 {
371 struct pop3_data *data = a->data;
371 struct fetch_pop3_data *data = a->data;
372372 char *lbuf;
373373 size_t llen;
374374
390390 int
391391 fetch_pop3_keep(struct account *a)
392392 {
393 struct pop3_data *data = a->data;
393 struct fetch_pop3_data *data = a->data;
394394
395395 ARRAY_ADD(&data->kept, xstrdup(data->uid), char *);
396396
400400 void
401401 fetch_pop3_desc(struct account *a, char *buf, size_t len)
402402 {
403 struct pop3_data *data = a->data;
403 struct fetch_pop3_data *data = a->data;
404404
405405 xsnprintf(buf, len, "pop3%s server \"%s\" port %s user \"%s\"",
406406 data->server.ssl ? "s" : "", data->server.host, data->server.port,
5050 int
5151 fetch_stdin_connect(struct account *a)
5252 {
53 struct stdin_data *data = a->data;
53 struct fetch_stdin_data *data = a->data;
5454
5555 if (isatty(STDIN_FILENO)) {
5656 log_warnx("%s: stdin is a tty. ignoring", a->name);
7676 int
7777 fetch_stdin_disconnect(struct account *a)
7878 {
79 struct stdin_data *data = a->data;
79 struct fetch_stdin_data *data = a->data;
8080
8181 io_free(data->io);
8282
8888 int
8989 fetch_stdin_delete(struct account *a)
9090 {
91 struct stdin_data *data = a->data;
91 struct fetch_stdin_data *data = a->data;
9292 char *line, *lbuf;
9393 size_t llen;
9494
105105 int
106106 fetch_stdin_fetch(struct account *a, struct mail *m)
107107 {
108 struct stdin_data *data = a->data;
108 struct fetch_stdin_data *data = a->data;
109109 u_int lines;
110110 int error, bodylines;
111111 char *line, *cause, *lbuf;
4747 };
4848
4949 /* Fetch maildir data. */
50 struct maildir_data {
50 struct fetch_maildir_data {
5151 struct strings *maildirs;
5252
5353 struct strings *paths;
7373 ARRAY_DECL(nntp_groups, struct nntp_group *);
7474
7575 /* Fetch nntp data. */
76 struct nntp_data {
76 struct fetch_nntp_data {
7777 char *path;
7878
7979 struct server server;
9090 #define ADD_GROUP(d, g) ARRAY_ADD(&d->groups, g, struct nntp_group *)
9191
9292 /* Fetch stdin data. */
93 struct stdin_data {
93 struct fetch_stdin_data {
9494 int complete;
9595
9696 struct io *io;
9797 };
9898
9999 /* Fetch pop3 data. */
100 struct pop3_data {
100 struct fetch_pop3_data {
101101 char *user;
102102 char *pass;
103103
124124 #define IMAP_RAW 3
125125
126126 /* Fetch imap data. */
127 struct imap_data {
127 struct fetch_imap_data {
128128 struct server server;
129129 char *pipecmd;
130130
6565 int
6666 imap_init(struct account *a)
6767 {
68 struct imap_data *data = a->data;
68 struct fetch_imap_data *data = a->data;
6969
7070 ARRAY_INIT(&data->kept);
7171
8080 int
8181 imap_free(struct account *a)
8282 {
83 struct imap_data *data = a->data;
83 struct fetch_imap_data *data = a->data;
8484
8585 ARRAY_FREE(&data->kept);
8686
9292 int
9393 imap_login(struct account *a)
9494 {
95 struct imap_data *data = a->data;
95 struct fetch_imap_data *data = a->data;
9696 char *line;
9797
9898 if ((line = data->getln(a, IMAP_UNTAGGED)) == NULL)
128128 int
129129 imap_select(struct account *a)
130130 {
131 struct imap_data *data = a->data;
131 struct fetch_imap_data *data = a->data;
132132 char *line;
133133
134134 if (data->putln(a, "%u SELECT %s", ++data->tag, data->folder) != 0)
149149 int
150150 imap_close(struct account *a)
151151 {
152 struct imap_data *data = a->data;
152 struct fetch_imap_data *data = a->data;
153153 char *line;
154154
155155 if (data->putln(a, "%u CLOSE", ++data->tag) != 0)
165165 int
166166 imap_logout(struct account *a)
167167 {
168 struct imap_data *data = a->data;
168 struct fetch_imap_data *data = a->data;
169169 char *line;
170170
171171 if (data->putln(a, "%u LOGOUT", ++data->tag) != 0)
181181 void
182182 imap_abort(struct account *a)
183183 {
184 struct imap_data *data = a->data;
184 struct fetch_imap_data *data = a->data;
185185
186186 data->putln(a, "%u LOGOUT", ++data->tag);
187187 data->flush(a);
190190 int
191191 imap_poll(struct account *a, u_int *n)
192192 {
193 struct imap_data *data = a->data;
193 struct fetch_imap_data *data = a->data;
194194
195195 *n = data->num;
196196
200200 int
201201 imap_fetch(struct account *a, struct mail *m)
202202 {
203 struct imap_data *data = a->data;
203 struct fetch_imap_data *data = a->data;
204204 char *line, *ptr;
205205 u_int n, i, lines;
206206 size_t size, off, len;
340340 int
341341 imap_keep(struct account *a)
342342 {
343 struct imap_data *data = a->data;
343 struct fetch_imap_data *data = a->data;
344344
345345 ARRAY_ADD(&data->kept, data->uid, u_int);
346346
350350 int
351351 imap_delete(struct account *a)
352352 {
353 struct imap_data *data = a->data;
353 struct fetch_imap_data *data = a->data;
354354 char *line;
355355
356356 if (data->putln(a, "%u STORE %u +FLAGS \\Deleted", ++data->tag,
367367 int
368368 imap_purge(struct account *a)
369369 {
370 struct imap_data *data = a->data;
370 struct fetch_imap_data *data = a->data;
371371 char *line;
372372
373373 if (data->putln(a, "%u EXPUNGE", ++data->tag) != 0)
8080 int
8181 match_age_match(struct match_ctx *mctx, struct expritem *ei)
8282 {
83 struct age_data *data = ei->data;
84 struct account *a = mctx->account;
85 struct mail *m = mctx->mail;
86 char *s, *ptr, *endptr, *hdr;
87 const char *errstr;
88 size_t len;
89 struct tm tm;
90 time_t then, now;
91 long long diff;
92 int tz;
83 struct match_age_data *data = ei->data;
84 struct account *a = mctx->account;
85 struct mail *m = mctx->mail;
86 char *s, *ptr, *endptr, *hdr;
87 const char *errstr;
88 size_t len;
89 struct tm tm;
90 time_t then, now;
91 long long diff;
92 int tz;
9393
9494 memset(&tm, 0, sizeof tm);
9595
173173 void
174174 match_age_desc(struct expritem *ei, char *buf, size_t len)
175175 {
176 struct age_data *data = ei->data;
176 struct match_age_data *data = ei->data;
177177 const char *cmp = "";
178178
179179 if (data->time < 0) {
3333 int
3434 match_attachment_match(struct match_ctx *mctx, struct expritem *ei)
3535 {
36 struct attachment_data *data = ei->data;
37 struct account *a = mctx->account;
38 struct mail *m = mctx->mail;
39 struct attach *at;
40 size_t size;
41 u_int n;
36 struct match_attachment_data *data = ei->data;
37 struct account *a = mctx->account;
38 struct mail *m = mctx->mail;
39 struct attach *at;
40 size_t size;
41 u_int n;
4242
4343 if (!m->attach_built) {
4444 /* fill attachments */
148148 void
149149 match_attachment_desc(struct expritem *ei, char *buf, size_t len)
150150 {
151 struct attachment_data *data = ei->data;
152 const char *cmp = "";
151 struct match_attachment_data *data = ei->data;
152 const char *cmp = "";
153153
154154 if (data->cmp == CMP_LT)
155155 cmp = "<";
3333 int
3434 match_command_match(struct match_ctx *mctx, struct expritem *ei)
3535 {
36 struct command_data *data = ei->data;
37 struct account *a = mctx->account;
38 struct mail *m = mctx->mail;
39 struct io *io = mctx->io;
40 struct msg msg;
36 struct match_command_data *data = ei->data;
37 struct account *a = mctx->account;
38 struct mail *m = mctx->mail;
39 struct io *io = mctx->io;
40 struct msg msg;
4141
4242 /* we are called as the child so to change uid this needs to be done
4343 largely in the parent */
6565 void
6666 match_command_desc(struct expritem *ei, char *buf, size_t len)
6767 {
68 struct command_data *data = ei->data;
69 char ret[11];
70 const char *type;
68 struct match_command_data *data = ei->data;
69 char ret[11];
70 const char *type;
7171
7272 *ret = '\0';
7373 if (data->ret != -1)
3333 int
3434 match_regexp_match(struct match_ctx *mctx, struct expritem *ei)
3535 {
36 struct regexp_data *data = ei->data;
37 struct account *a = mctx->account;
38 struct mail *m = mctx->mail;
39 int res;
40 char *cause;
36 struct match_regexp_data *data = ei->data;
37 struct account *a = mctx->account;
38 struct mail *m = mctx->mail;
39 int res;
40 char *cause;
4141
4242 if (data->area == AREA_BODY && m->body == -1)
4343 return (MATCH_FALSE);
7777 void
7878 match_regexp_desc(struct expritem *ei, char *buf, size_t len)
7979 {
80 struct regexp_data *data = ei->data;
81 const char *area = NULL;
80 struct match_regexp_data *data = ei->data;
81 const char *area = NULL;
8282
8383 switch (data->area) {
8484 case AREA_BODY:
3333 int
3434 match_size_match(struct match_ctx *mctx, struct expritem *ei)
3535 {
36 struct size_data *data = ei->data;
36 struct match_size_data *data = ei->data;
3737 struct mail *m = mctx->mail;
3838
3939 if (data->cmp == CMP_LT && m->size < data->size)
4646 void
4747 match_size_desc(struct expritem *ei, char *buf, size_t len)
4848 {
49 struct size_data *data = ei->data;
49 struct match_size_data *data = ei->data;
5050 const char *cmp = "";
5151
5252 if (data->cmp == CMP_LT)
3434 int
3535 match_string_match(struct match_ctx *mctx, struct expritem *ei)
3636 {
37 struct string_data *data = ei->data;
38 struct account *a = mctx->account;
39 struct mail *m = mctx->mail;
40 int res;
41 char *s, *cause;
37 struct match_string_data *data = ei->data;
38 struct account *a = mctx->account;
39 struct mail *m = mctx->mail;
40 int res;
41 char *s, *cause;
4242
4343 if (!mctx->pm_valid) {
4444 log_warnx("%s: string match but no regexp match data", a->name);
6565 void
6666 match_string_desc(struct expritem *ei, char *buf, size_t len)
6767 {
68 struct string_data *data = ei->data;
68 struct match_string_data *data = ei->data;
6969
7070 xsnprintf(buf, len, "string \"%s\" to \"%s\"", data->str, data->re.str);
7171 }
3434 int
3535 match_tagged_match(struct match_ctx *mctx, struct expritem *ei)
3636 {
37 struct tagged_data *data = ei->data;
38 struct mail *m = mctx->mail;
37 struct match_tagged_data *data = ei->data;
38 struct mail *m = mctx->mail;
3939
4040 if (match_tag(m->tags, data->tag) != NULL)
4141 return (MATCH_TRUE);
4545 void
4646 match_tagged_desc(struct expritem *ei, char *buf, size_t len)
4747 {
48 struct tagged_data *data = ei->data;
48 struct match_tagged_data *data = ei->data;
4949
5050 xsnprintf(buf, len, "tagged %s", data->tag);
5151 }
4545 };
4646
4747 /* Match attachment data. */
48 struct attachment_data {
48 struct match_attachment_data {
4949 enum {
5050 ATTACHOP_COUNT,
5151 ATTACHOP_TOTALSIZE,
6464 };
6565
6666 /* Match age data. */
67 struct age_data {
67 struct match_age_data {
6868 long long time;
6969 enum cmp cmp;
7070 };
7171
7272 /* Match size data. */
73 struct size_data {
73 struct match_size_data {
7474 size_t size;
7575 enum cmp cmp;
7676 };
7777
7878 /* Match tagged data. */
79 struct tagged_data {
79 struct match_tagged_data {
8080 char *tag;
8181 };
8282
8383 /* Match string data. */
84 struct string_data {
84 struct match_string_data {
8585 struct re re;
8686
8787 char *str;
8888 };
8989
9090 /* Match regexp data. */
91 struct regexp_data {
91 struct match_regexp_data {
9292 struct re re;
9393
9494 enum area area;
9595 };
9696
9797 /* Match command data. */
98 struct command_data {
98 struct match_command_data {
9999 char *cmd;
100100 uid_t uid;
101101 int pipe; /* pipe mail to command */
2929 #include "match.h"
3030
3131 int parent_action(struct action *, struct deliver_ctx *, uid_t);
32 int parent_command(struct match_ctx *, struct command_data *, uid_t);
32 int parent_command(struct match_ctx *, struct match_command_data *, uid_t);
3333
3434 int
3535 do_parent(struct child *child)
258258 }
259259
260260 int
261 parent_command(struct match_ctx *mctx, struct command_data *data, uid_t uid)
261 parent_command(struct match_ctx *mctx, struct match_command_data *data,
262 uid_t uid)
262263 {
263264 struct account *a = mctx->account;
264265 struct mail *m = mctx->mail;
21092109 /** [$1: poptype (int)] [$2: server (struct { ... } server)] */
21102110 /** [$4: strv (char *)] [$6: strv (char *)] */
21112111 {
2112 struct pop3_data *data;
2112 struct fetch_pop3_data *data;
21132113
21142114 if (*$4 == '\0')
21152115 yyerror("invalid user");
21332133 /** [$1: imaptype (int)] [$2: server (struct { ... } server)] */
21342134 /** [$4: strv (char *)] [$6: strv (char *)] [$7: folder (char *)] */
21352135 {
2136 struct imap_data *data;
2136 struct fetch_imap_data *data;
21372137
21382138 if (*$4 == '\0')
21392139 yyerror("invalid user");
21602160 /** [$3: strv (char *)] */
21612161 /** [$4: userpass (struct { ... } userpass)] [$5: folder (char *)] */
21622162 {
2163 struct imap_data *data;
2164 struct strb *tags;
2163 struct fetch_imap_data *data;
2164 struct strb *tags;
21652165
21662166 if ($5 != NULL && *$5 == '\0')
21672167 yyerror("invalid folder");
21812181 }
21822182 | TOKSTDIN
21832183 {
2184 struct stdin_data *data;
2184 struct fetch_stdin_data *data;
21852185
21862186 $$.fetch = &fetch_stdin;
21872187 data = xcalloc(1, sizeof *data);
21902190 | maildirs
21912191 /** [$1: maildirs (struct strings *)] */
21922192 {
2193 struct maildir_data *data;
2193 struct fetch_maildir_data *data;
21942194
21952195 $$.fetch = &fetch_maildir;
21962196 data = xcalloc(1, sizeof *data);
22012201 /** [$2: server (struct { ... } server)] */
22022202 /** [$3: groups (struct strings *)] [$5: strv (char *)] */
22032203 {
2204 struct nntp_data *data;
2205 char *group;
2204 struct fetch_nntp_data *data;
2205 char *group;
22062206 struct strb *tags;
22072207
22082208 if (*$5 == '\0')