X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/49f70d46ea38ceb7a501594db7f6ea35e19681aa..63807d4757d1c2ab6e4e0c5ec537316fcb324436:/lib-src/pop.c diff --git a/lib-src/pop.c b/lib-src/pop.c index 77691e8b1d..b8ed65c3ea 100644 --- a/lib-src/pop.c +++ b/lib-src/pop.c @@ -1,6 +1,7 @@ /* pop.c: client routines for talking to a POP3-protocol post-office server - Copyright (C) 1991, 1993, 1996, 1997, 1999, 2001, 2002, 2003, 2004, - 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. + +Copyright (C) 1991, 1993, 1996-1997, 1999, 2001-2012 + Free Software Foundation, Inc. Author: Jonathan Kamens @@ -20,11 +21,7 @@ You should have received a copy of the GNU General Public License along with GNU Emacs. If not, see . */ -#ifdef HAVE_CONFIG_H #include -#else -#define MAIL_USE_POP -#endif #ifdef MAIL_USE_POP @@ -33,15 +30,15 @@ along with GNU Emacs. If not, see . */ #include "ntlib.h" #include #undef SOCKET_ERROR -#define RECV(s,buf,len,flags) recv(s,buf,len,flags) -#define SEND(s,buf,len,flags) send(s,buf,len,flags) -#define CLOSESOCKET(s) closesocket(s) +#define RECV(s,buf,len,flags) recv (s,buf,len,flags) +#define SEND(s,buf,len,flags) send (s,buf,len,flags) +#define CLOSESOCKET(s) closesocket (s) #else #include #include -#define RECV(s,buf,len,flags) read(s,buf,len) -#define SEND(s,buf,len,flags) write(s,buf,len) -#define CLOSESOCKET(s) close(s) +#define RECV(s,buf,len,flags) read (s,buf,len) +#define SEND(s,buf,len,flags) write (s,buf,len) +#define CLOSESOCKET(s) close (s) #endif #include @@ -64,13 +61,8 @@ extern struct servent *hes_getservbyname (/* char *, char * */); #include #include #include -#ifdef STDC_HEADERS #include -#define index strchr -#endif -#ifdef HAVE_UNISTD_H #include -#endif #ifdef KERBEROS # ifdef HAVE_KRB5_H @@ -92,6 +84,8 @@ extern struct servent *hes_getservbyname (/* char *, char * */); # endif #endif /* KERBEROS */ +#include + #ifdef KERBEROS #ifndef KERBEROS5 extern int krb_sendauth (/* long, int, KTEXT, char *, char *, char *, @@ -103,47 +97,35 @@ extern char *krb_realmofhost (/* char * */); #endif /* KERBEROS */ #ifndef WINDOWSNT -#if !defined(HAVE_H_ERRNO) || !defined(HAVE_CONFIG_H) +#ifndef HAVE_H_ERRNO extern int h_errno; #endif #endif -#ifndef __P -# ifdef __STDC__ -# define __P(a) a -# else -# define __P(a) () -# endif /* __STDC__ */ -#endif /* ! __P */ - -static int socket_connection __P((char *, int)); -static int pop_getline __P((popserver, char **)); -static int sendline __P((popserver, char *)); -static int fullwrite __P((int, char *, int)); -static int getok __P((popserver)); +static int socket_connection (char *, int); +static int pop_getline (popserver, char **); +static int sendline (popserver, const char *); +static int fullwrite (int, char *, int); +static int getok (popserver); #if 0 -static int gettermination __P((popserver)); +static int gettermination (popserver); #endif -static void pop_trash __P((popserver)); -static char *find_crlf __P((char *, int)); +static void pop_trash (popserver); +static char *find_crlf (char *, int); #define ERROR_MAX 160 /* a pretty arbitrary size, but needs to be bigger than the original value of 80 */ #define POP_PORT 110 -#define KPOP_PORT 1109 #define POP_SERVICE "pop3" /* we don't want the POP2 port! */ #ifdef KERBEROS +#define KPOP_PORT 1109 #define KPOP_SERVICE "kpop" /* never used: look for 20060515 to see why */ #endif char pop_error[ERROR_MAX]; int pop_debug = 0; -#ifndef min -#define min(a,b) (((a) < (b)) ? (a) : (b)) -#endif - /* * Function: pop_open (char *host, char *username, char *password, * int flags) @@ -174,11 +156,7 @@ int pop_debug = 0; * explanation of the error. */ popserver -pop_open (host, username, password, flags) - char *host; - char *username; - char *password; - int flags; +pop_open (char *host, char *username, char *password, int flags) { int sock; popserver server; @@ -345,10 +323,7 @@ pop_open (host, username, password, flags) * connection impossible. */ int -pop_stat (server, count, size) - popserver server; - int *count; - int *size; +pop_stat (popserver server, int *count, int *size) { char *fromserver; char *end_ptr; @@ -367,6 +342,7 @@ pop_stat (server, count, size) if (0 == strncmp (fromserver, "-ERR", 4)) { strncpy (pop_error, fromserver, ERROR_MAX); + pop_error[ERROR_MAX-1] = '\0'; } else { @@ -421,11 +397,7 @@ pop_stat (server, count, size) * connection impossible. */ int -pop_list (server, message, IDs, sizes) - popserver server; - int message; - int **IDs; - int **sizes; +pop_list (popserver server, int message, int **IDs, int **sizes) { int how_many, i; char *fromserver; @@ -472,7 +444,10 @@ pop_list (server, message, IDs, sizes) if (strncmp (fromserver, "+OK ", 4)) { if (! strncmp (fromserver, "-ERR", 4)) - strncpy (pop_error, fromserver, ERROR_MAX); + { + strncpy (pop_error, fromserver, ERROR_MAX); + pop_error[ERROR_MAX-1] = '\0'; + } else { strcpy (pop_error, @@ -484,7 +459,7 @@ pop_list (server, message, IDs, sizes) return (-1); } (*IDs)[0] = atoi (&fromserver[4]); - fromserver = index (&fromserver[4], ' '); + fromserver = strchr (&fromserver[4], ' '); if (! fromserver) { strcpy (pop_error, @@ -515,7 +490,7 @@ pop_list (server, message, IDs, sizes) return (-1); } (*IDs)[i] = atoi (fromserver); - fromserver = index (fromserver, ' '); + fromserver = strchr (fromserver, ' '); if (! fromserver) { strcpy (pop_error, @@ -567,11 +542,7 @@ pop_list (server, message, IDs, sizes) * Side effects: May kill connection on error. */ int -pop_retrieve (server, message, markfrom, msg_buf) - popserver server; - int message; - int markfrom; - char **msg_buf; +pop_retrieve (popserver server, int message, int markfrom, char **msg_buf) { int *IDs, *sizes, bufsize, fromcount = 0, cp = 0; char *ptr, *fromserver; @@ -635,7 +606,7 @@ pop_retrieve (server, message, markfrom, msg_buf) } ptr[cp++] = '>'; } - bcopy (fromserver, &ptr[cp], ret); + memcpy (&ptr[cp], fromserver, ret); cp += ret; ptr[cp++] = '\n'; } @@ -645,10 +616,7 @@ pop_retrieve (server, message, markfrom, msg_buf) } int -pop_retrieve_first (server, message, response) - popserver server; - int message; - char **response; +pop_retrieve_first (popserver server, int message, char **response) { sprintf (pop_error, "RETR %d", message); return (pop_multi_first (server, pop_error, response)); @@ -663,25 +631,19 @@ pop_retrieve_first (server, message, response) */ int -pop_retrieve_next (server, line) - popserver server; - char **line; +pop_retrieve_next (popserver server, char **line) { return (pop_multi_next (server, line)); } int -pop_retrieve_flush (server) - popserver server; +pop_retrieve_flush (popserver server) { return (pop_multi_flush (server)); } int -pop_top_first (server, message, lines, response) - popserver server; - int message, lines; - char **response; +pop_top_first (popserver server, int message, int lines, char **response) { sprintf (pop_error, "TOP %d %d", message, lines); return (pop_multi_first (server, pop_error, response)); @@ -696,25 +658,19 @@ pop_top_first (server, message, lines, response) */ int -pop_top_next (server, line) - popserver server; - char **line; +pop_top_next (popserver server, char **line) { return (pop_multi_next (server, line)); } int -pop_top_flush (server) - popserver server; +pop_top_flush (popserver server) { return (pop_multi_flush (server)); } int -pop_multi_first (server, command, response) - popserver server; - char *command; - char **response; +pop_multi_first (popserver server, const char *command, char **response) { if (server->in_multi) { @@ -731,6 +687,7 @@ pop_multi_first (server, command, response) if (0 == strncmp (*response, "-ERR", 4)) { strncpy (pop_error, *response, ERROR_MAX); + pop_error[ERROR_MAX-1] = '\0'; return (-1); } else if (0 == strncmp (*response, "+OK", 3)) @@ -757,9 +714,7 @@ pop_multi_first (server, command, response) 0, LINE is set to null. */ int -pop_multi_next (server, line) - popserver server; - char **line; +pop_multi_next (popserver server, char **line) { char *fromserver; int ret; @@ -797,8 +752,7 @@ pop_multi_next (server, line) } int -pop_multi_flush (server) - popserver server; +pop_multi_flush (popserver server) { char *line; int ret; @@ -829,9 +783,7 @@ pop_multi_flush (server) * otherwise. */ int -pop_delete (server, message) - popserver server; - int message; +pop_delete (popserver server, int message) { if (server->in_multi) { @@ -861,8 +813,7 @@ pop_delete (server, message) * Side effects: Closes connection on error. */ int -pop_noop (server) - popserver server; +pop_noop (popserver server) { if (server->in_multi) { @@ -891,8 +842,7 @@ pop_noop (server) * Side effects: Closes the connection on error. */ int -pop_last (server) - popserver server; +pop_last (popserver server) { char *fromserver; @@ -911,6 +861,7 @@ pop_last (server) if (! strncmp (fromserver, "-ERR", 4)) { strncpy (pop_error, fromserver, ERROR_MAX); + pop_error[ERROR_MAX-1] = '\0'; return (-1); } else if (strncmp (fromserver, "+OK ", 4)) @@ -949,8 +900,7 @@ pop_last (server) * Side effects: Closes the connection on error. */ int -pop_reset (server) - popserver server; +pop_reset (popserver server) { if (pop_retrieve_flush (server)) { @@ -978,8 +928,7 @@ pop_reset (server) * function is called, even if an error occurs. */ int -pop_quit (server) - popserver server; +pop_quit (popserver server) { int ret = 0; @@ -1023,9 +972,7 @@ static int have_winsock = 0; * into pop_error. */ static int -socket_connection (host, flags) - char *host; - int flags; +socket_connection (char *host, int flags) { #ifdef HAVE_GETADDRINFO struct addrinfo *res, *it; @@ -1037,7 +984,7 @@ socket_connection (host, flags) struct servent *servent; struct sockaddr_in addr; char found_port = 0; - char *service; + const char *service; int sock; char *realhost; #ifdef KERBEROS @@ -1069,7 +1016,7 @@ socket_connection (host, flags) } #endif - bzero ((char *) &addr, sizeof (addr)); + memset (&addr, 0, sizeof (addr)); addr.sin_family = AF_INET; /** "kpop" service is never used: look for 20060515 to see why **/ @@ -1122,7 +1069,7 @@ socket_connection (host, flags) } #ifdef HAVE_GETADDRINFO - memset (&hints, 0, sizeof(hints)); + memset (&hints, 0, sizeof (hints)); hints.ai_socktype = SOCK_STREAM; hints.ai_flags = AI_CANONNAME; hints.ai_family = AF_INET; @@ -1145,8 +1092,7 @@ socket_connection (host, flags) if (it->ai_addrlen == sizeof (addr)) { struct sockaddr_in *in_a = (struct sockaddr_in *) it->ai_addr; - bcopy (&in_a->sin_addr, (char *) &addr.sin_addr, - sizeof (addr.sin_addr)); + memcpy (&addr.sin_addr, &in_a->sin_addr, sizeof (addr.sin_addr)); if (! connect (sock, (struct sockaddr *) &addr, sizeof (addr))) break; } @@ -1174,8 +1120,7 @@ socket_connection (host, flags) while (*hostent->h_addr_list) { - bcopy (*hostent->h_addr_list, (char *) &addr.sin_addr, - hostent->h_length); + memcpy (&addr.sin_addr, *hostent->h_addr_list, hostent->h_length); if (! connect (sock, (struct sockaddr *) &addr, sizeof (addr))) break; hostent->h_addr_list++; @@ -1216,7 +1161,7 @@ socket_connection (host, flags) krb5_free_context (kcontext); strcpy (pop_error, KRB_ERROR); strncat (pop_error, error_message (rem), - ERROR_MAX - sizeof(KRB_ERROR)); + ERROR_MAX - sizeof (KRB_ERROR)); CLOSESOCKET (sock); return (-1); } @@ -1269,7 +1214,7 @@ socket_connection (host, flags) ERROR_MAX - strlen (pop_error) - 1); } #elif defined HAVE_KRB5_ERROR_E_TEXT - if (err_ret && err_ret->e_text && strlen(*err_ret->e_text)) + if (err_ret && err_ret->e_text && strlen (*err_ret->e_text)) { strncat (pop_error, " [server says '", ERROR_MAX - strlen (pop_error) - 1); @@ -1335,9 +1280,7 @@ socket_connection (host, flags) * THE RETURNED LINE MAY CONTAIN EMBEDDED NULLS! */ static int -pop_getline (server, line) - popserver server; - char **line; +pop_getline (popserver server, char **line) { #define GETLINE_ERROR "Error reading from server: " @@ -1369,8 +1312,8 @@ pop_getline (server, line) } else { - bcopy (server->buffer + server->buffer_index, - server->buffer, server->data); + memmove (server->buffer, server->buffer + server->buffer_index, + server->data); /* Record the fact that we've searched the data already in the buffer for a CRLF, so that when we search below, we don't have to search the same data twice. There's a "- @@ -1467,9 +1410,7 @@ pop_getline (server, line) * Side effects: Closes the connection on error. */ static int -sendline (server, line) - popserver server; - char *line; +sendline (popserver server, const char *line) { #define SENDLINE_ERROR "Error writing to POP server: " int ret; @@ -1516,10 +1457,7 @@ sendline (server, line) * Return value: Same as write. Pop_error is not set. */ static int -fullwrite (fd, buf, nbytes) - int fd; - char *buf; - int nbytes; +fullwrite (int fd, char *buf, int nbytes) { char *cp; int ret = 0; @@ -1549,8 +1487,7 @@ fullwrite (fd, buf, nbytes) * Side effects: On failure, may make the connection unusable. */ static int -getok (server) - popserver server; +getok (popserver server) { char *fromline; @@ -1621,8 +1558,7 @@ gettermination (server) * since the last pop_reset) may be lost. */ void -pop_close (server) - popserver server; +pop_close (popserver server) { pop_trash (server); free ((char *) server); @@ -1638,8 +1574,7 @@ pop_close (server) * pop_close or pop_quit after this function has been called. */ static void -pop_trash (server) - popserver server; +pop_trash (popserver server) { if (server->file >= 0) { @@ -1671,9 +1606,7 @@ pop_trash (server) null, or 0 if it does not contain one. */ static char * -find_crlf (in_string, len) - char *in_string; - int len; +find_crlf (char *in_string, int len) { while (len--) { @@ -1689,6 +1622,3 @@ find_crlf (in_string, len) } #endif /* MAIL_USE_POP */ - -/* arch-tag: ceb37041-b7ad-49a8-a63d-286618b8367d - (do not change this comment) */