2 |
#include <stdlib.h> |
#include <stdlib.h> |
3 |
#include <string.h> |
#include <string.h> |
4 |
#include <errno.h> |
#include <errno.h> |
5 |
|
#include <time.h> |
6 |
|
|
7 |
#include "config.h" |
#include "config.h" |
8 |
#include "imapfilter.h" |
#include "imapfilter.h" |
73 |
* Check if a mailbox exists. |
* Check if a mailbox exists. |
74 |
*/ |
*/ |
75 |
int |
int |
76 |
check_mailbox(int *sock, char *mbox, namesp_t * nsp) |
check_mailbox(int *sock, char *mbox) |
77 |
{ |
{ |
78 |
return server_response(sock, imap_examine(sock, |
return server_response(sock, imap_status(sock, mbox, "MESSAGES")); |
|
apply_namespace(mbox, nsp->prefix, nsp->delim))); |
|
79 |
} |
} |
80 |
|
|
81 |
|
|
480 |
{ |
{ |
481 |
int r; |
int r; |
482 |
char *tok, *mcp, *m; |
char *tok, *mcp, *m; |
483 |
char dm[MBOX_NAME_LEN]; |
char dm[2][MBOX_NAME_LEN]; |
484 |
|
|
485 |
r = 0; |
r = 0; |
486 |
tok = NULL; |
tok = NULL; |
492 |
else |
else |
493 |
m = mcp = convert_messages(mesgs); |
m = mcp = convert_messages(mesgs); |
494 |
|
|
495 |
|
xstrncpy(dm[0], destmbox, MBOX_NAME_LEN - 1); |
496 |
|
current_date(dm[0]); |
497 |
tok = strtok_r(m, " ", &m); |
tok = strtok_r(m, " ", &m); |
498 |
while (tok != NULL) { |
while (tok != NULL) { |
499 |
xstrncpy(dm, destmbox, MBOX_NAME_LEN - 1); |
xstrncpy(dm[1], dm[0], MBOX_NAME_LEN - 1); |
500 |
current_date(dm); |
message_date(tok, dm[1]); |
|
message_date(tok, dm); |
|
501 |
|
|
502 |
if ((r = copy_response(&sockpri, imap_copy(&sockpri, tok, |
if ((r = copy_response(&sockpri, imap_copy(&sockpri, tok, |
503 |
dm))) == RESPONSE_TRYCREATE) |
dm[1]))) == RESPONSE_TRYCREATE) |
504 |
if (!server_response(&sockpri, imap_create(&sockpri, |
if (!server_response(&sockpri, imap_create(&sockpri, |
505 |
dm))) { |
dm[1]))) { |
506 |
if ((options & OPTION_SUBSCRIBE)) |
if ((options & OPTION_SUBSCRIBE)) |
507 |
server_response(&sockpri, |
server_response(&sockpri, |
508 |
imap_subscribe(&sockpri, dm)); |
imap_subscribe(&sockpri, dm[1])); |
509 |
r = copy_response(&sockpri, |
r = copy_response(&sockpri, |
510 |
imap_copy(&sockpri, tok, dm)); |
imap_copy(&sockpri, tok, dm[1])); |
511 |
} |
} |
512 |
tok = strtok_r(NULL, " ", &m); |
tok = strtok_r(NULL, " ", &m); |
513 |
} |
} |
541 |
char *tok, *m, *mcp, *ndm; |
char *tok, *m, *mcp, *ndm; |
542 |
unsigned int n; |
unsigned int n; |
543 |
char buf[RESPONSE_BUF * 2]; |
char buf[RESPONSE_BUF * 2]; |
544 |
|
char dm[3][MBOX_NAME_LEN]; |
545 |
|
|
546 |
|
*dm[0] = *dm[1] = *dm[2] = '\0'; |
547 |
|
|
548 |
if (init_connection(&sockaux, destacc->server, destacc->port, |
if (init_connection(&sockaux, destacc->server, destacc->port, |
549 |
destacc->ssl)) |
destacc->ssl)) |
574 |
} |
} |
575 |
check_namespace(&sockaux, &nspaux); |
check_namespace(&sockaux, &nspaux); |
576 |
|
|
|
/* apply_namespace() returns a pointer to a static buffer. */ |
|
|
ndm = apply_namespace(destmbox, nspaux.prefix, nspaux.delim); |
|
|
|
|
|
r = check_mailbox(&sockaux, destmbox, &nspaux); |
|
|
|
|
|
if (r == RESPONSE_OK) |
|
|
close_mailbox(&sockaux); |
|
|
else if (r == RESPONSE_NO) { |
|
|
server_response(&sockaux, imap_create(&sockaux, ndm)); |
|
|
if ((options & OPTION_SUBSCRIBE)) |
|
|
server_response(&sockaux, imap_subscribe(&sockaux, |
|
|
ndm)); |
|
|
} |
|
577 |
m = mcp = xstrdup(mesgs); |
m = mcp = xstrdup(mesgs); |
578 |
|
|
579 |
|
xstrncpy(dm[1], destmbox, MBOX_NAME_LEN - 1); |
580 |
|
current_date(dm[1]); |
581 |
|
|
582 |
tok = strtok_r(m, " ", &m); |
tok = strtok_r(m, " ", &m); |
583 |
while (tok != NULL) { |
while (tok != NULL) { |
584 |
|
xstrncpy(dm[2], dm[1], MBOX_NAME_LEN - 1); |
585 |
|
message_date(tok, dm[2]); |
586 |
|
|
587 |
|
/* apply_namespace() returns a pointer to a static buffer. */ |
588 |
|
ndm = apply_namespace(dm[2], nspaux.prefix, nspaux.delim); |
589 |
|
|
590 |
|
/* Check only if mailbox name is different from last one. */ |
591 |
|
if (strncmp(dm[0], dm[2], strlen(dm[2]))) { |
592 |
|
r = check_mailbox(&sockaux, ndm); |
593 |
|
if (r == RESPONSE_NO) { |
594 |
|
server_response(&sockaux, |
595 |
|
imap_create(&sockaux, ndm)); |
596 |
|
if ((options & OPTION_SUBSCRIBE)) |
597 |
|
server_response(&sockaux, |
598 |
|
imap_subscribe(&sockaux, ndm)); |
599 |
|
} |
600 |
|
} |
601 |
|
xstrncpy(dm[0], dm[2], MBOX_NAME_LEN - 1); |
602 |
|
|
603 |
fetchsize_response(&sockpri, &n, |
fetchsize_response(&sockpri, &n, |
604 |
imap_fetch(&sockpri, tok, "RFC822.SIZE")); |
imap_fetch(&sockpri, tok, "RFC822.SIZE")); |
605 |
|
|