diff options
Diffstat (limited to 'lib-src/pop.c')
| -rw-r--r-- | lib-src/pop.c | 147 |
1 files changed, 42 insertions, 105 deletions
diff --git a/lib-src/pop.c b/lib-src/pop.c index 64488e7e3ea..26a992fa0b0 100644 --- a/lib-src/pop.c +++ b/lib-src/pop.c | |||
| @@ -108,24 +108,16 @@ extern int h_errno; | |||
| 108 | #endif | 108 | #endif |
| 109 | #endif | 109 | #endif |
| 110 | 110 | ||
| 111 | #ifndef __P | 111 | static int socket_connection (char *, int); |
| 112 | # ifdef __STDC__ | 112 | static int pop_getline (popserver, char **); |
| 113 | # define __P(a) a | 113 | static int sendline (popserver, char *); |
| 114 | # else | 114 | static int fullwrite (int, char *, int); |
| 115 | # define __P(a) () | 115 | static int getok (popserver); |
| 116 | # endif /* __STDC__ */ | ||
| 117 | #endif /* ! __P */ | ||
| 118 | |||
| 119 | static int socket_connection __P((char *, int)); | ||
| 120 | static int pop_getline __P((popserver, char **)); | ||
| 121 | static int sendline __P((popserver, char *)); | ||
| 122 | static int fullwrite __P((int, char *, int)); | ||
| 123 | static int getok __P((popserver)); | ||
| 124 | #if 0 | 116 | #if 0 |
| 125 | static int gettermination __P((popserver)); | 117 | static int gettermination (popserver); |
| 126 | #endif | 118 | #endif |
| 127 | static void pop_trash __P((popserver)); | 119 | static void pop_trash (popserver); |
| 128 | static char *find_crlf __P((char *, int)); | 120 | static char *find_crlf (char *, int); |
| 129 | 121 | ||
| 130 | #define ERROR_MAX 160 /* a pretty arbitrary size, but needs | 122 | #define ERROR_MAX 160 /* a pretty arbitrary size, but needs |
| 131 | to be bigger than the original | 123 | to be bigger than the original |
| @@ -174,11 +166,7 @@ int pop_debug = 0; | |||
| 174 | * explanation of the error. | 166 | * explanation of the error. |
| 175 | */ | 167 | */ |
| 176 | popserver | 168 | popserver |
| 177 | pop_open (host, username, password, flags) | 169 | pop_open (char *host, char *username, char *password, int flags) |
| 178 | char *host; | ||
| 179 | char *username; | ||
| 180 | char *password; | ||
| 181 | int flags; | ||
| 182 | { | 170 | { |
| 183 | int sock; | 171 | int sock; |
| 184 | popserver server; | 172 | popserver server; |
| @@ -345,10 +333,7 @@ pop_open (host, username, password, flags) | |||
| 345 | * connection impossible. | 333 | * connection impossible. |
| 346 | */ | 334 | */ |
| 347 | int | 335 | int |
| 348 | pop_stat (server, count, size) | 336 | pop_stat (popserver server, int *count, int *size) |
| 349 | popserver server; | ||
| 350 | int *count; | ||
| 351 | int *size; | ||
| 352 | { | 337 | { |
| 353 | char *fromserver; | 338 | char *fromserver; |
| 354 | char *end_ptr; | 339 | char *end_ptr; |
| @@ -421,11 +406,7 @@ pop_stat (server, count, size) | |||
| 421 | * connection impossible. | 406 | * connection impossible. |
| 422 | */ | 407 | */ |
| 423 | int | 408 | int |
| 424 | pop_list (server, message, IDs, sizes) | 409 | pop_list (popserver server, int message, int **IDs, int **sizes) |
| 425 | popserver server; | ||
| 426 | int message; | ||
| 427 | int **IDs; | ||
| 428 | int **sizes; | ||
| 429 | { | 410 | { |
| 430 | int how_many, i; | 411 | int how_many, i; |
| 431 | char *fromserver; | 412 | char *fromserver; |
| @@ -484,7 +465,7 @@ pop_list (server, message, IDs, sizes) | |||
| 484 | return (-1); | 465 | return (-1); |
| 485 | } | 466 | } |
| 486 | (*IDs)[0] = atoi (&fromserver[4]); | 467 | (*IDs)[0] = atoi (&fromserver[4]); |
| 487 | fromserver = index (&fromserver[4], ' '); | 468 | fromserver = strchr (&fromserver[4], ' '); |
| 488 | if (! fromserver) | 469 | if (! fromserver) |
| 489 | { | 470 | { |
| 490 | strcpy (pop_error, | 471 | strcpy (pop_error, |
| @@ -515,7 +496,7 @@ pop_list (server, message, IDs, sizes) | |||
| 515 | return (-1); | 496 | return (-1); |
| 516 | } | 497 | } |
| 517 | (*IDs)[i] = atoi (fromserver); | 498 | (*IDs)[i] = atoi (fromserver); |
| 518 | fromserver = index (fromserver, ' '); | 499 | fromserver = strchr (fromserver, ' '); |
| 519 | if (! fromserver) | 500 | if (! fromserver) |
| 520 | { | 501 | { |
| 521 | strcpy (pop_error, | 502 | strcpy (pop_error, |
| @@ -567,11 +548,7 @@ pop_list (server, message, IDs, sizes) | |||
| 567 | * Side effects: May kill connection on error. | 548 | * Side effects: May kill connection on error. |
| 568 | */ | 549 | */ |
| 569 | int | 550 | int |
| 570 | pop_retrieve (server, message, markfrom, msg_buf) | 551 | pop_retrieve (popserver server, int message, int markfrom, char **msg_buf) |
| 571 | popserver server; | ||
| 572 | int message; | ||
| 573 | int markfrom; | ||
| 574 | char **msg_buf; | ||
| 575 | { | 552 | { |
| 576 | int *IDs, *sizes, bufsize, fromcount = 0, cp = 0; | 553 | int *IDs, *sizes, bufsize, fromcount = 0, cp = 0; |
| 577 | char *ptr, *fromserver; | 554 | char *ptr, *fromserver; |
| @@ -635,7 +612,7 @@ pop_retrieve (server, message, markfrom, msg_buf) | |||
| 635 | } | 612 | } |
| 636 | ptr[cp++] = '>'; | 613 | ptr[cp++] = '>'; |
| 637 | } | 614 | } |
| 638 | bcopy (fromserver, &ptr[cp], ret); | 615 | memcpy (&ptr[cp], fromserver, ret); |
| 639 | cp += ret; | 616 | cp += ret; |
| 640 | ptr[cp++] = '\n'; | 617 | ptr[cp++] = '\n'; |
| 641 | } | 618 | } |
| @@ -645,10 +622,7 @@ pop_retrieve (server, message, markfrom, msg_buf) | |||
| 645 | } | 622 | } |
| 646 | 623 | ||
| 647 | int | 624 | int |
| 648 | pop_retrieve_first (server, message, response) | 625 | pop_retrieve_first (popserver server, int message, char **response) |
| 649 | popserver server; | ||
| 650 | int message; | ||
| 651 | char **response; | ||
| 652 | { | 626 | { |
| 653 | sprintf (pop_error, "RETR %d", message); | 627 | sprintf (pop_error, "RETR %d", message); |
| 654 | return (pop_multi_first (server, pop_error, response)); | 628 | return (pop_multi_first (server, pop_error, response)); |
| @@ -663,25 +637,19 @@ pop_retrieve_first (server, message, response) | |||
| 663 | */ | 637 | */ |
| 664 | 638 | ||
| 665 | int | 639 | int |
| 666 | pop_retrieve_next (server, line) | 640 | pop_retrieve_next (popserver server, char **line) |
| 667 | popserver server; | ||
| 668 | char **line; | ||
| 669 | { | 641 | { |
| 670 | return (pop_multi_next (server, line)); | 642 | return (pop_multi_next (server, line)); |
| 671 | } | 643 | } |
| 672 | 644 | ||
| 673 | int | 645 | int |
| 674 | pop_retrieve_flush (server) | 646 | pop_retrieve_flush (popserver server) |
| 675 | popserver server; | ||
| 676 | { | 647 | { |
| 677 | return (pop_multi_flush (server)); | 648 | return (pop_multi_flush (server)); |
| 678 | } | 649 | } |
| 679 | 650 | ||
| 680 | int | 651 | int |
| 681 | pop_top_first (server, message, lines, response) | 652 | pop_top_first (popserver server, int message, int lines, char **response) |
| 682 | popserver server; | ||
| 683 | int message, lines; | ||
| 684 | char **response; | ||
| 685 | { | 653 | { |
| 686 | sprintf (pop_error, "TOP %d %d", message, lines); | 654 | sprintf (pop_error, "TOP %d %d", message, lines); |
| 687 | return (pop_multi_first (server, pop_error, response)); | 655 | return (pop_multi_first (server, pop_error, response)); |
| @@ -696,25 +664,19 @@ pop_top_first (server, message, lines, response) | |||
| 696 | */ | 664 | */ |
| 697 | 665 | ||
| 698 | int | 666 | int |
| 699 | pop_top_next (server, line) | 667 | pop_top_next (popserver server, char **line) |
| 700 | popserver server; | ||
| 701 | char **line; | ||
| 702 | { | 668 | { |
| 703 | return (pop_multi_next (server, line)); | 669 | return (pop_multi_next (server, line)); |
| 704 | } | 670 | } |
| 705 | 671 | ||
| 706 | int | 672 | int |
| 707 | pop_top_flush (server) | 673 | pop_top_flush (popserver server) |
| 708 | popserver server; | ||
| 709 | { | 674 | { |
| 710 | return (pop_multi_flush (server)); | 675 | return (pop_multi_flush (server)); |
| 711 | } | 676 | } |
| 712 | 677 | ||
| 713 | int | 678 | int |
| 714 | pop_multi_first (server, command, response) | 679 | pop_multi_first (popserver server, char *command, char **response) |
| 715 | popserver server; | ||
| 716 | char *command; | ||
| 717 | char **response; | ||
| 718 | { | 680 | { |
| 719 | if (server->in_multi) | 681 | if (server->in_multi) |
| 720 | { | 682 | { |
| @@ -757,9 +719,7 @@ pop_multi_first (server, command, response) | |||
| 757 | 0, LINE is set to null. */ | 719 | 0, LINE is set to null. */ |
| 758 | 720 | ||
| 759 | int | 721 | int |
| 760 | pop_multi_next (server, line) | 722 | pop_multi_next (popserver server, char **line) |
| 761 | popserver server; | ||
| 762 | char **line; | ||
| 763 | { | 723 | { |
| 764 | char *fromserver; | 724 | char *fromserver; |
| 765 | int ret; | 725 | int ret; |
| @@ -797,8 +757,7 @@ pop_multi_next (server, line) | |||
| 797 | } | 757 | } |
| 798 | 758 | ||
| 799 | int | 759 | int |
| 800 | pop_multi_flush (server) | 760 | pop_multi_flush (popserver server) |
| 801 | popserver server; | ||
| 802 | { | 761 | { |
| 803 | char *line; | 762 | char *line; |
| 804 | int ret; | 763 | int ret; |
| @@ -829,9 +788,7 @@ pop_multi_flush (server) | |||
| 829 | * otherwise. | 788 | * otherwise. |
| 830 | */ | 789 | */ |
| 831 | int | 790 | int |
| 832 | pop_delete (server, message) | 791 | pop_delete (popserver server, int message) |
| 833 | popserver server; | ||
| 834 | int message; | ||
| 835 | { | 792 | { |
| 836 | if (server->in_multi) | 793 | if (server->in_multi) |
| 837 | { | 794 | { |
| @@ -861,8 +818,7 @@ pop_delete (server, message) | |||
| 861 | * Side effects: Closes connection on error. | 818 | * Side effects: Closes connection on error. |
| 862 | */ | 819 | */ |
| 863 | int | 820 | int |
| 864 | pop_noop (server) | 821 | pop_noop (popserver server) |
| 865 | popserver server; | ||
| 866 | { | 822 | { |
| 867 | if (server->in_multi) | 823 | if (server->in_multi) |
| 868 | { | 824 | { |
| @@ -891,8 +847,7 @@ pop_noop (server) | |||
| 891 | * Side effects: Closes the connection on error. | 847 | * Side effects: Closes the connection on error. |
| 892 | */ | 848 | */ |
| 893 | int | 849 | int |
| 894 | pop_last (server) | 850 | pop_last (popserver server) |
| 895 | popserver server; | ||
| 896 | { | 851 | { |
| 897 | char *fromserver; | 852 | char *fromserver; |
| 898 | 853 | ||
| @@ -949,8 +904,7 @@ pop_last (server) | |||
| 949 | * Side effects: Closes the connection on error. | 904 | * Side effects: Closes the connection on error. |
| 950 | */ | 905 | */ |
| 951 | int | 906 | int |
| 952 | pop_reset (server) | 907 | pop_reset (popserver server) |
| 953 | popserver server; | ||
| 954 | { | 908 | { |
| 955 | if (pop_retrieve_flush (server)) | 909 | if (pop_retrieve_flush (server)) |
| 956 | { | 910 | { |
| @@ -978,8 +932,7 @@ pop_reset (server) | |||
| 978 | * function is called, even if an error occurs. | 932 | * function is called, even if an error occurs. |
| 979 | */ | 933 | */ |
| 980 | int | 934 | int |
| 981 | pop_quit (server) | 935 | pop_quit (popserver server) |
| 982 | popserver server; | ||
| 983 | { | 936 | { |
| 984 | int ret = 0; | 937 | int ret = 0; |
| 985 | 938 | ||
| @@ -1023,9 +976,7 @@ static int have_winsock = 0; | |||
| 1023 | * into pop_error. | 976 | * into pop_error. |
| 1024 | */ | 977 | */ |
| 1025 | static int | 978 | static int |
| 1026 | socket_connection (host, flags) | 979 | socket_connection (char *host, int flags) |
| 1027 | char *host; | ||
| 1028 | int flags; | ||
| 1029 | { | 980 | { |
| 1030 | #ifdef HAVE_GETADDRINFO | 981 | #ifdef HAVE_GETADDRINFO |
| 1031 | struct addrinfo *res, *it; | 982 | struct addrinfo *res, *it; |
| @@ -1069,7 +1020,7 @@ socket_connection (host, flags) | |||
| 1069 | } | 1020 | } |
| 1070 | #endif | 1021 | #endif |
| 1071 | 1022 | ||
| 1072 | bzero ((char *) &addr, sizeof (addr)); | 1023 | memset (&addr, 0, sizeof (addr)); |
| 1073 | addr.sin_family = AF_INET; | 1024 | addr.sin_family = AF_INET; |
| 1074 | 1025 | ||
| 1075 | /** "kpop" service is never used: look for 20060515 to see why **/ | 1026 | /** "kpop" service is never used: look for 20060515 to see why **/ |
| @@ -1145,8 +1096,7 @@ socket_connection (host, flags) | |||
| 1145 | if (it->ai_addrlen == sizeof (addr)) | 1096 | if (it->ai_addrlen == sizeof (addr)) |
| 1146 | { | 1097 | { |
| 1147 | struct sockaddr_in *in_a = (struct sockaddr_in *) it->ai_addr; | 1098 | struct sockaddr_in *in_a = (struct sockaddr_in *) it->ai_addr; |
| 1148 | bcopy (&in_a->sin_addr, (char *) &addr.sin_addr, | 1099 | memcpy (&addr.sin_addr, &in_a->sin_addr, sizeof (addr.sin_addr)); |
| 1149 | sizeof (addr.sin_addr)); | ||
| 1150 | if (! connect (sock, (struct sockaddr *) &addr, sizeof (addr))) | 1100 | if (! connect (sock, (struct sockaddr *) &addr, sizeof (addr))) |
| 1151 | break; | 1101 | break; |
| 1152 | } | 1102 | } |
| @@ -1174,8 +1124,7 @@ socket_connection (host, flags) | |||
| 1174 | 1124 | ||
| 1175 | while (*hostent->h_addr_list) | 1125 | while (*hostent->h_addr_list) |
| 1176 | { | 1126 | { |
| 1177 | bcopy (*hostent->h_addr_list, (char *) &addr.sin_addr, | 1127 | memcpy (&addr.sin_addr, *hostent->h_addr_list, hostent->h_length); |
| 1178 | hostent->h_length); | ||
| 1179 | if (! connect (sock, (struct sockaddr *) &addr, sizeof (addr))) | 1128 | if (! connect (sock, (struct sockaddr *) &addr, sizeof (addr))) |
| 1180 | break; | 1129 | break; |
| 1181 | hostent->h_addr_list++; | 1130 | hostent->h_addr_list++; |
| @@ -1335,9 +1284,7 @@ socket_connection (host, flags) | |||
| 1335 | * THE RETURNED LINE MAY CONTAIN EMBEDDED NULLS! | 1284 | * THE RETURNED LINE MAY CONTAIN EMBEDDED NULLS! |
| 1336 | */ | 1285 | */ |
| 1337 | static int | 1286 | static int |
| 1338 | pop_getline (server, line) | 1287 | pop_getline (popserver server, char **line) |
| 1339 | popserver server; | ||
| 1340 | char **line; | ||
| 1341 | { | 1288 | { |
| 1342 | #define GETLINE_ERROR "Error reading from server: " | 1289 | #define GETLINE_ERROR "Error reading from server: " |
| 1343 | 1290 | ||
| @@ -1369,8 +1316,8 @@ pop_getline (server, line) | |||
| 1369 | } | 1316 | } |
| 1370 | else | 1317 | else |
| 1371 | { | 1318 | { |
| 1372 | bcopy (server->buffer + server->buffer_index, | 1319 | memmove (server->buffer, server->buffer + server->buffer_index, |
| 1373 | server->buffer, server->data); | 1320 | server->data); |
| 1374 | /* Record the fact that we've searched the data already in | 1321 | /* Record the fact that we've searched the data already in |
| 1375 | the buffer for a CRLF, so that when we search below, we | 1322 | the buffer for a CRLF, so that when we search below, we |
| 1376 | don't have to search the same data twice. There's a "- | 1323 | don't have to search the same data twice. There's a "- |
| @@ -1467,9 +1414,7 @@ pop_getline (server, line) | |||
| 1467 | * Side effects: Closes the connection on error. | 1414 | * Side effects: Closes the connection on error. |
| 1468 | */ | 1415 | */ |
| 1469 | static int | 1416 | static int |
| 1470 | sendline (server, line) | 1417 | sendline (popserver server, char *line) |
| 1471 | popserver server; | ||
| 1472 | char *line; | ||
| 1473 | { | 1418 | { |
| 1474 | #define SENDLINE_ERROR "Error writing to POP server: " | 1419 | #define SENDLINE_ERROR "Error writing to POP server: " |
| 1475 | int ret; | 1420 | int ret; |
| @@ -1516,10 +1461,7 @@ sendline (server, line) | |||
| 1516 | * Return value: Same as write. Pop_error is not set. | 1461 | * Return value: Same as write. Pop_error is not set. |
| 1517 | */ | 1462 | */ |
| 1518 | static int | 1463 | static int |
| 1519 | fullwrite (fd, buf, nbytes) | 1464 | fullwrite (int fd, char *buf, int nbytes) |
| 1520 | int fd; | ||
| 1521 | char *buf; | ||
| 1522 | int nbytes; | ||
| 1523 | { | 1465 | { |
| 1524 | char *cp; | 1466 | char *cp; |
| 1525 | int ret = 0; | 1467 | int ret = 0; |
| @@ -1549,8 +1491,7 @@ fullwrite (fd, buf, nbytes) | |||
| 1549 | * Side effects: On failure, may make the connection unusable. | 1491 | * Side effects: On failure, may make the connection unusable. |
| 1550 | */ | 1492 | */ |
| 1551 | static int | 1493 | static int |
| 1552 | getok (server) | 1494 | getok (popserver server) |
| 1553 | popserver server; | ||
| 1554 | { | 1495 | { |
| 1555 | char *fromline; | 1496 | char *fromline; |
| 1556 | 1497 | ||
| @@ -1621,8 +1562,7 @@ gettermination (server) | |||
| 1621 | * since the last pop_reset) may be lost. | 1562 | * since the last pop_reset) may be lost. |
| 1622 | */ | 1563 | */ |
| 1623 | void | 1564 | void |
| 1624 | pop_close (server) | 1565 | pop_close (popserver server) |
| 1625 | popserver server; | ||
| 1626 | { | 1566 | { |
| 1627 | pop_trash (server); | 1567 | pop_trash (server); |
| 1628 | free ((char *) server); | 1568 | free ((char *) server); |
| @@ -1638,8 +1578,7 @@ pop_close (server) | |||
| 1638 | * pop_close or pop_quit after this function has been called. | 1578 | * pop_close or pop_quit after this function has been called. |
| 1639 | */ | 1579 | */ |
| 1640 | static void | 1580 | static void |
| 1641 | pop_trash (server) | 1581 | pop_trash (popserver server) |
| 1642 | popserver server; | ||
| 1643 | { | 1582 | { |
| 1644 | if (server->file >= 0) | 1583 | if (server->file >= 0) |
| 1645 | { | 1584 | { |
| @@ -1671,9 +1610,7 @@ pop_trash (server) | |||
| 1671 | null, or 0 if it does not contain one. */ | 1610 | null, or 0 if it does not contain one. */ |
| 1672 | 1611 | ||
| 1673 | static char * | 1612 | static char * |
| 1674 | find_crlf (in_string, len) | 1613 | find_crlf (char *in_string, int len) |
| 1675 | char *in_string; | ||
| 1676 | int len; | ||
| 1677 | { | 1614 | { |
| 1678 | while (len--) | 1615 | while (len--) |
| 1679 | { | 1616 | { |