X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=pop%2Fpop_lib.c;h=693259d90325feb4554104a512123aeef4240fb2;hp=603fa05c6d112fc47af98c0f852671cb5bc03d4e;hb=4f1b1414371cc373f50ca79a888928635a3a3763;hpb=8e037c67a88cb4680c4391134c578e3b55a80f8a diff --git a/pop/pop_lib.c b/pop/pop_lib.c index 603fa05..693259d 100644 --- a/pop/pop_lib.c +++ b/pop/pop_lib.c @@ -7,52 +7,34 @@ * please see the file GPL in the top level source directory. */ -#if HAVE_CONFIG_H -# include "config.h" -#endif - -#include +#include +#include #include "mutt.h" -#include "ascii.h" -#include "mx.h" -#include "url.h" #include "pop.h" -#if defined (USE_SSL) || defined (USE_GNUTLS) -# include "mutt_ssl.h" -#endif - -#include "lib/mem.h" -#include "lib/intl.h" -#include "lib/debug.h" -#include "lib/str.h" - -#include -#include -#include /* given an POP mailbox name, return host, port, username and password */ -int pop_parse_path (const char *path, ACCOUNT * acct) +int pop_parse_path (const char *path, ACCOUNT * act) { ciss_url_t url; char *c; int ret = -1; /* Defaults */ - acct->flags = 0; - acct->port = POP_PORT; - acct->type = M_ACCT_TYPE_POP; + act->flags = 0; + act->port = POP_PORT; + act->type = M_ACCT_TYPE_POP; - c = str_dup (path); + c = m_strdup(path); url_parse_ciss (&url, c); if (url.scheme == U_POP || url.scheme == U_POPS) { if (url.scheme == U_POPS) { - acct->flags |= M_ACCT_SSL; - acct->port = POP_SSL_PORT; + act->flags |= M_ACCT_SSL; + act->port = POP_SSL_PORT; } - if ((!url.path || !*url.path) && mutt_account_fromurl (acct, &url) == 0) + if ((!url.path || !*url.path) && mutt_account_fromurl (act, &url) == 0) ret = 0; } @@ -68,16 +50,14 @@ void pop_error (POP_DATA * pop_data, char *msg) t = strchr (pop_data->err_msg, '\0'); c = msg; - if (!str_ncmp (msg, "-ERR ", 5)) { - c2 = msg + 5; - SKIPWS (c2); - + if (!m_strncmp(msg, "-ERR ", 5)) { + c2 = vskipspaces(msg + 5); if (*c2) c = c2; } - strfcpy (t, c, sizeof (pop_data->err_msg) - strlen (pop_data->err_msg)); - str_skip_trailws (pop_data->err_msg); + m_strcpy(t, sizeof(pop_data->err_msg) - strlen(pop_data->err_msg), c); + m_strrtrim(pop_data->err_msg); } /* Parse CAPA output */ @@ -88,9 +68,8 @@ static int fetch_capa (char *line, void *data) if (!ascii_strncasecmp (line, "SASL", 4)) { p_delete(&pop_data->auth_list); - c = line + 4; - SKIPWS (c); - pop_data->auth_list = str_dup (c); + c = vskipspaces(line + 4); + pop_data->auth_list = m_strdup(c); } else if (!ascii_strncasecmp (line, "STLS", 4)) @@ -112,15 +91,17 @@ static int fetch_capa (char *line, void *data) static int fetch_auth (char *line, void *data) { POP_DATA *pop_data = (POP_DATA *) data; + ssize_t auth_list_len; if (!pop_data->auth_list) { - pop_data->auth_list = p_new(char, strlen(line) + 1); + auth_list_len = m_strlen(line) + 1; + pop_data->auth_list = p_new(char, auth_list_len); } else { - mem_realloc (&pop_data->auth_list, - strlen (pop_data->auth_list) + strlen (line) + 2); - strcat (pop_data->auth_list, " "); /* __STRCAT_CHECKED__ */ + auth_list_len = m_strlen(pop_data->auth_list) + m_strlen(line) + 2; + p_realloc(&pop_data->auth_list, auth_list_len); + m_strcat(pop_data->auth_list, auth_list_len, " "); } - strcat (pop_data->auth_list, line); /* __STRCAT_CHECKED__ */ + m_strcat(pop_data->auth_list, auth_list_len, line); return 0; } @@ -154,7 +135,7 @@ static pop_query_status pop_capabilities (POP_DATA * pop_data, int mode) /* Execute CAPA command */ if (mode == 0 || pop_data->cmd_capa != CMD_NOT_AVAILABLE) { - strfcpy (buf, "CAPA\r\n", sizeof (buf)); + m_strcpy(buf, sizeof(buf), "CAPA\r\n"); switch (pop_fetch_data (pop_data, buf, NULL, fetch_capa, pop_data)) { case PQ_OK: { @@ -178,7 +159,7 @@ static pop_query_status pop_capabilities (POP_DATA * pop_data, int mode) pop_data->cmd_uidl = CMD_UNKNOWN; pop_data->cmd_top = CMD_UNKNOWN; - strfcpy (buf, "AUTH\r\n", sizeof (buf)); + m_strcpy(buf, sizeof(buf), "AUTH\r\n"); if (pop_fetch_data (pop_data, buf, NULL, fetch_auth, pop_data) == PQ_NOT_CONNECTED) return PQ_NOT_CONNECTED; } @@ -223,7 +204,7 @@ pop_query_status pop_connect (POP_DATA * pop_data) pop_data->status = POP_CONNECTED; - if (str_ncmp (buf, "+OK", 3)) { + if (m_strncmp(buf, "+OK", 3)) { *pop_data->err_msg = '\0'; pop_error (pop_data, buf); mutt_error ("%s", pop_data->err_msg); @@ -262,22 +243,17 @@ pop_query_status pop_open_connection (POP_DATA * pop_data) return PQ_ERR; } -#if (defined(USE_SSL) || defined(USE_GNUTLS)) /* Attempt STLS if available and desired. */ - if (!pop_data->conn->ssf && (pop_data->cmd_stls || option(OPTSSLFORCETLS))) { - if (option (OPTSSLFORCETLS)) + if (!pop_data->conn->ssf && (pop_data->cmd_stls || mod_ssl.force_tls)) { + if (mod_ssl.force_tls) pop_data->use_stls = 2; if (pop_data->use_stls == 0) { - ret = query_quadoption (OPT_SSLSTARTTLS, - _("Secure connection with TLS?")); - if (ret == -1) - return PQ_ERR; pop_data->use_stls = 1; - if (ret == M_YES) + if (mod_ssl.starttls) pop_data->use_stls = 2; } if (pop_data->use_stls == 2) { - strfcpy (buf, "STLS\r\n", sizeof (buf)); + m_strcpy(buf, sizeof(buf), "STLS\r\n"); ret = pop_query (pop_data, buf, sizeof (buf)); if (ret == PQ_NOT_CONNECTED) goto err_conn; @@ -285,9 +261,7 @@ pop_query_status pop_open_connection (POP_DATA * pop_data) mutt_error ("%s", pop_data->err_msg); mutt_sleep (2); } -#if defined (USE_SSL) || defined (USE_GNUTLS) else if (mutt_ssl_starttls (pop_data->conn)) -#endif { mutt_error (_("Could not negotiate TLS connection")); mutt_sleep (2); @@ -306,12 +280,11 @@ pop_query_status pop_open_connection (POP_DATA * pop_data) } } - if (option(OPTSSLFORCETLS) && !pop_data->conn->ssf) { + if (mod_ssl.force_tls && !pop_data->conn->ssf) { mutt_error _("Encrypted connection unavailable"); mutt_sleep (1); return -2; } -#endif ret = pop_authenticate (pop_data); if (ret == PQ_NOT_CONNECTED) @@ -331,7 +304,7 @@ pop_query_status pop_open_connection (POP_DATA * pop_data) } /* get total size of mailbox */ - strfcpy (buf, "STAT\r\n", sizeof (buf)); + m_strcpy(buf, sizeof(buf), "STAT\r\n"); ret = pop_query (pop_data, buf, sizeof (buf)); if (ret == PQ_NOT_CONNECTED) goto err_conn; @@ -364,12 +337,12 @@ void pop_logout (CONTEXT * ctx) mutt_message _("Closing connection to POP server..."); if (ctx->readonly) { - strfcpy (buf, "RSET\r\n", sizeof (buf)); + m_strcpy(buf, sizeof(buf), "RSET\r\n"); ret = pop_query (pop_data, buf, sizeof (buf)); } if (ret != PQ_NOT_CONNECTED) { - strfcpy (buf, "QUIT\r\n", sizeof (buf)); + m_strcpy(buf, sizeof(buf), "QUIT\r\n"); pop_query (pop_data, buf, sizeof (buf)); } @@ -386,23 +359,14 @@ void pop_logout (CONTEXT * ctx) * -1 - conection lost, * -2 - invalid command or execution error. */ -pop_query_status pop_query_d (POP_DATA * pop_data, char *buf, size_t buflen, const char *msg) +pop_query_status pop_query (POP_DATA * pop_data, char *buf, size_t buflen) { - int dbg = M_SOCK_LOG_CMD; char *c; if (pop_data->status != POP_CONNECTED) return PQ_NOT_CONNECTED; -#ifdef DEBUG - /* print msg instaed of real command */ - if (msg) { - dbg = M_SOCK_LOG_FULL; - debug_print (M_SOCK_LOG_CMD, ("> %s", msg)); - } -#endif - - mutt_socket_write_d (pop_data->conn, buf, dbg); + mutt_socket_write(pop_data->conn, buf); c = strpbrk (buf, " \r\n"); *c = '\0'; @@ -412,7 +376,7 @@ pop_query_status pop_query_d (POP_DATA * pop_data, char *buf, size_t buflen, con pop_data->status = POP_DISCONNECTED; return PQ_NOT_CONNECTED; } - if (!str_ncmp (buf, "+OK", 3)) + if (!m_strncmp(buf, "+OK", 3)) return PQ_OK; pop_error (pop_data, buf); @@ -439,17 +403,16 @@ pop_query_status pop_fetch_data (POP_DATA * pop_data, const char *query, progres long pos = 0; size_t lenbuf = 0; - strfcpy (buf, query, sizeof (buf)); + m_strcpy(buf, sizeof(buf), query); ret = pop_query (pop_data, buf, sizeof (buf)); if (ret != PQ_OK) return ret; inbuf = p_new(char, sizeof(buf)); - FOREVER { + for (;;) { chunk = - mutt_socket_readln_d (buf, sizeof (buf), pop_data->conn, - M_SOCK_LOG_HDR); + mutt_socket_readln(buf, sizeof (buf), pop_data->conn); if (chunk < 0) { pop_data->status = POP_DISCONNECTED; ret = PQ_NOT_CONNECTED; @@ -463,13 +426,12 @@ pop_query_status pop_fetch_data (POP_DATA * pop_data, const char *query, progres p++; } - strfcpy (inbuf + lenbuf, p, sizeof (buf)); + m_strcpy(inbuf + lenbuf,sizeof(buf), p); pos += chunk; - if (chunk >= sizeof (buf)) { + if (chunk >= ssizeof(buf)) { lenbuf += strlen (p); - } - else { + } else { if (bar) mutt_progress_bar (bar, pos); if (ret == 0 && funct (inbuf, data) < 0) @@ -477,7 +439,7 @@ pop_query_status pop_fetch_data (POP_DATA * pop_data, const char *query, progres lenbuf = 0; } - mem_realloc (&inbuf, lenbuf + sizeof (buf)); + p_realloc(&inbuf, lenbuf + sizeof(buf)); } p_delete(&inbuf); @@ -487,14 +449,13 @@ pop_query_status pop_fetch_data (POP_DATA * pop_data, const char *query, progres /* find message with this UIDL and set refno */ static int check_uidl (char *line, void *data) { - int i; - unsigned int index; - CONTEXT *ctx = (CONTEXT *) data; + int i, idx; + CONTEXT *ctx = (CONTEXT *)data; - sscanf (line, "%u %s", &index, line); + sscanf (line, "%u %s", &idx, line); for (i = 0; i < ctx->msgcount; i++) { - if (!str_cmp (ctx->hdrs[i]->data, line)) { - ctx->hdrs[i]->refno = index; + if (!m_strcmp(ctx->hdrs[i]->data, line)) { + ctx->hdrs[i]->refno = idx; break; } } @@ -514,7 +475,7 @@ pop_query_status pop_reconnect (CONTEXT * ctx) if (pop_data->status == POP_BYE) return PQ_NOT_CONNECTED; - FOREVER { + for (;;) { mutt_socket_close (pop_data->conn); ret = pop_open_connection (pop_data);