58 |
*/ |
*/ |
59 |
int login(int *sock, char *user, char *pass) |
int login(int *sock, char *user, char *pass) |
60 |
{ |
{ |
|
log_info(LOG_USERNAME, user); |
|
|
|
|
61 |
return server_response(sock, imap_login(sock, user, pass)); |
return server_response(sock, imap_login(sock, user, pass)); |
62 |
} |
} |
63 |
|
|
122 |
*/ |
*/ |
123 |
int logout(int *sock) |
int logout(int *sock) |
124 |
{ |
{ |
125 |
return server_response(sock, imap_logout(sock)); |
return logout_response(sock, imap_logout(sock)); |
126 |
} |
} |
127 |
|
|
128 |
|
|
370 |
return 0; |
return 0; |
371 |
|
|
372 |
log_info(LOG_ACTION, type); |
log_info(LOG_ACTION, type); |
373 |
|
log_info(LOG_DESTINATION_ACCOUNT, raccount->key); |
374 |
log_info(LOG_DESTINATION_MAILBOX, destmbox); |
log_info(LOG_DESTINATION_MAILBOX, destmbox); |
375 |
|
|
376 |
cnt = count_messages(mesgs); |
cnt = count_messages(mesgs); |
413 |
action_list(mesgs, args); |
action_list(mesgs, args); |
414 |
break; |
break; |
415 |
} |
} |
416 |
|
|
417 |
if (!*args) |
if (*args == '\0') |
418 |
log_info(LOG_WRITE, NULL); |
log_info(LOG_PREAMBLE, NULL); |
419 |
|
|
420 |
return 0; |
return 0; |
421 |
} |
} |
432 |
|
|
433 |
m = mcp = convert_messages(mesgs); |
m = mcp = convert_messages(mesgs); |
434 |
|
|
435 |
while ((tok = strsep(&m, " "))) |
tok = strtok_r(m, " ", &m); |
436 |
|
while (tok) { |
437 |
server_response(&sockpri, imap_store(&sockpri, tok, |
server_response(&sockpri, imap_store(&sockpri, tok, |
438 |
STORE_FLAG_ADD, "\\Deleted")); |
STORE_FLAG_ADD, "\\Deleted")); |
439 |
|
|
440 |
|
tok = strtok_r(NULL, " ", &m); |
441 |
|
} |
442 |
|
|
443 |
if (options & OPTION_EXPUNGE) |
if (options & OPTION_EXPUNGE) |
444 |
server_response(&sockpri, imap_expunge(&sockpri)); |
server_response(&sockpri, imap_expunge(&sockpri)); |
445 |
|
|
461 |
|
|
462 |
m = mcp = convert_messages(mesgs); |
m = mcp = convert_messages(mesgs); |
463 |
|
|
464 |
while ((tok = strsep(&m, " "))) { |
tok = strtok_r(m, " ", &m); |
465 |
|
while (tok) { |
466 |
if ((r = copy_response(&sockpri, |
if ((r = copy_response(&sockpri, |
467 |
imap_copy(&sockpri, tok, destmbox))) == |
imap_copy(&sockpri, tok, destmbox))) == |
468 |
RESPONSE_TRYCREATE) |
RESPONSE_TRYCREATE) |
473 |
r = copy_response(&sockpri, |
r = copy_response(&sockpri, |
474 |
imap_copy(&sockpri, tok, destmbox)); |
imap_copy(&sockpri, tok, destmbox)); |
475 |
} |
} |
476 |
|
tok = strtok_r(NULL, " ", &m); |
477 |
} |
} |
478 |
|
|
479 |
xfree(mcp); |
xfree(mcp); |
499 |
*/ |
*/ |
500 |
int action_rcopy(char *mesgs, account_t * destacc, char *destmbox, char *args) |
int action_rcopy(char *mesgs, account_t * destacc, char *destmbox, char *args) |
501 |
{ |
{ |
502 |
int r, at, ft; |
int r, ta, tf; |
503 |
char *tok, *m, *mcp, *ndm; |
char *tok, *m, *mcp, *ndm; |
504 |
unsigned int n; |
unsigned int n; |
505 |
char buf[RESPONSE_BUF]; |
char buf[RESPONSE_BUF * 2 + 1]; |
506 |
|
|
507 |
if (init_connection(&sockaux, destacc->server, destacc->port, |
if (init_connection(&sockaux, destacc->server, destacc->port, |
508 |
destacc->ssl)) |
destacc->ssl)) |
536 |
/* apply_namespace() returns a pointer to a static buffer. */ |
/* apply_namespace() returns a pointer to a static buffer. */ |
537 |
ndm = apply_namespace(destmbox, nspaux.prefix, nspaux.delim); |
ndm = apply_namespace(destmbox, nspaux.prefix, nspaux.delim); |
538 |
|
|
539 |
r = check_mailbox(&sockaux, ndm, &nspaux); |
r = check_mailbox(&sockaux, destmbox, &nspaux); |
540 |
|
|
541 |
if (r == RESPONSE_OK) |
if (r == RESPONSE_OK) |
542 |
close_mailbox(&sockaux); |
close_mailbox(&sockaux); |
547 |
} |
} |
548 |
m = mcp = xstrdup(mesgs); |
m = mcp = xstrdup(mesgs); |
549 |
|
|
550 |
while ((tok = strsep(&m, " "))) { |
tok = strtok_r(m, " ", &m); |
551 |
|
while (tok) { |
552 |
fetchsize_response(&sockpri, &n, |
fetchsize_response(&sockpri, &n, |
553 |
imap_fetch(&sockpri, tok, "RFC822.SIZE")); |
imap_fetch(&sockpri, tok, "RFC822.SIZE")); |
554 |
|
|
555 |
at = imap_append(&sockaux, ndm, n); |
ta = imap_append(&sockaux, ndm, n); |
556 |
|
|
557 |
fetch_response(&sockpri, 1, NULL, 0); |
fetch_response(&sockpri, 0, 1, NULL); |
558 |
ft = imap_fetch(&sockpri, tok, "RFC822.HEADER"); |
tf = imap_fetch(&sockpri, tok, "RFC822.HEADER"); |
559 |
do { |
do { |
560 |
r = fetch_response(&sockpri, 0, buf, ft); |
r = fetch_response(&sockpri, tf, 0, buf); |
561 |
socket_write(&sockaux, buf); |
socket_write(&sockaux, buf); |
562 |
} while (r == RESPONSE_NONE); |
} while (r == RESPONSE_NONE); |
563 |
|
|
564 |
socket_write(&sockaux, "\r\n"); |
socket_write(&sockaux, "\r\n"); |
565 |
|
|
566 |
fetch_response(&sockpri, 1, NULL, 0); |
fetch_response(&sockpri, 0, 1, NULL); |
567 |
ft = imap_fetch(&sockpri, tok, "BODY[TEXT]"); |
tf = imap_fetch(&sockpri, tok, "BODY[TEXT]"); |
568 |
do { |
do { |
569 |
r = fetch_response(&sockpri, 0, buf, ft); |
r = fetch_response(&sockpri, tf, 0, buf); |
570 |
socket_write(&sockaux, buf); |
if (r != RESPONSE_NULLBODY) |
571 |
|
socket_write(&sockaux, buf); |
572 |
} while (r == RESPONSE_NONE); |
} while (r == RESPONSE_NONE); |
573 |
|
|
574 |
socket_write(&sockaux, "\r\n\r\n"); |
if (r != RESPONSE_NULLBODY) |
575 |
|
socket_write(&sockaux, "\r\n\r\n"); |
576 |
|
else |
577 |
|
socket_write(&sockaux, "\r\n"); |
578 |
|
|
579 |
append_response(&sockaux, at); |
append_response(&sockaux, ta); |
580 |
|
|
581 |
|
tok = strtok_r(NULL, " ", &m); |
582 |
} |
} |
583 |
|
|
584 |
logout(&sockaux); |
logout(&sockaux); |
644 |
|
|
645 |
m = mcp = convert_messages(mesgs); |
m = mcp = convert_messages(mesgs); |
646 |
|
|
647 |
while ((tok = strsep(&m, " "))) |
tok = strtok_r(m, " ", &m); |
648 |
|
while (tok) { |
649 |
server_response(&sockpri, imap_store(&sockpri, tok, t, s)); |
server_response(&sockpri, imap_store(&sockpri, tok, t, s)); |
650 |
|
|
651 |
|
tok = strtok_r(NULL, " ", &m); |
652 |
|
} |
653 |
|
|
654 |
if (options & OPTION_EXPUNGE) |
if (options & OPTION_EXPUNGE) |
655 |
server_response(&sockpri, imap_expunge(&sockpri)); |
server_response(&sockpri, imap_expunge(&sockpri)); |
656 |
|
|
667 |
int r, t; |
int r, t; |
668 |
char *tok, *mcp, *m; |
char *tok, *mcp, *m; |
669 |
char s[ARGS_LEN + 27]; |
char s[ARGS_LEN + 27]; |
670 |
char hdrs[RESPONSE_BUF]; |
char hdrs[RESPONSE_BUF * 2 + 1]; |
671 |
|
|
672 |
if (!*args) |
if (!*args) |
673 |
return 0; |
return 0; |
676 |
|
|
677 |
snprintf(s, ARGS_LEN + 27 - 1, "BODY.PEEK[HEADER.FIELDS (%s)]", args); |
snprintf(s, ARGS_LEN + 27 - 1, "BODY.PEEK[HEADER.FIELDS (%s)]", args); |
678 |
|
|
679 |
while ((tok = strsep(&m, " "))) { |
tok = strtok_r(m, " ", &m); |
680 |
|
while (tok) { |
681 |
/* Reset internal fetch counter. */ |
/* Reset internal fetch counter. */ |
682 |
fetch_response(&sockpri, 1, NULL, 0); |
fetch_response(&sockpri, 0, 1, NULL); |
683 |
t = imap_fetch(&sockpri, tok, s); |
t = imap_fetch(&sockpri, tok, s); |
684 |
do { |
log_info(LOG_PREAMBLE, NULL); |
|
r = fetch_response(&sockpri, 0, hdrs, t); |
|
685 |
|
|
686 |
|
do { |
687 |
|
r = fetch_response(&sockpri, t, 0, hdrs); |
688 |
|
|
689 |
if (*hdrs) { |
if (*hdrs) { |
690 |
if (options & OPTION_HEADERS) |
if (options & OPTION_HEADERS) |
691 |
info("%s\n", hdrs); |
info("%s\n", hdrs); |
692 |
log_info(LOG_WRITE, hdrs); |
log_info(LOG_HEADER, hdrs); |
|
} else { |
|
|
log_info(LOG_WRITE, NULL); |
|
693 |
} |
} |
694 |
} while (r == RESPONSE_NONE); |
} while (r == RESPONSE_NONE); |
695 |
|
tok = strtok_r(NULL, " ", &m); |
696 |
} |
} |
697 |
|
|
698 |
xfree(mcp); |
xfree(mcp); |
725 |
*/ |
*/ |
726 |
char *convert_messages(char *mesgs) |
char *convert_messages(char *mesgs) |
727 |
{ |
{ |
728 |
unsigned int maxlen; |
int maxlen; |
729 |
unsigned int start, end, tmp; |
unsigned int start, end, tmp; |
730 |
char *c, *cp, *tail; |
char *c, *cp, *tail; |
731 |
|
|