X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=pop%2Fpop_lib.c;h=8e667ad00cd4e938fab5e3f627dac946a700a92c;hp=b17cb25c108847b1f6e115d1a53cf9457c685f50;hb=bbc4fd52516a8afefbd14c77e34f8389d6f0a6ed;hpb=203e950e3d3c76795fa49895d040f732adad2049 diff --git a/pop/pop_lib.c b/pop/pop_lib.c index b17cb25..8e667ad 100644 --- a/pop/pop_lib.c +++ b/pop/pop_lib.c @@ -12,6 +12,7 @@ #endif #include "mutt.h" +#include "ascii.h" #include "mx.h" #include "url.h" #include "pop.h" @@ -21,6 +22,8 @@ #include "lib/mem.h" #include "lib/intl.h" +#include "lib/debug.h" +#include "lib/str.h" #include #include @@ -38,7 +41,7 @@ int pop_parse_path (const char *path, ACCOUNT * acct) acct->port = POP_PORT; acct->type = M_ACCT_TYPE_POP; - c = safe_strdup (path); + c = str_dup (path); url_parse_ciss (&url, c); if (url.scheme == U_POP || url.scheme == U_POPS) { @@ -51,7 +54,7 @@ int pop_parse_path (const char *path, ACCOUNT * acct) ret = 0; } - FREE (&c); + mem_free (&c); return ret; } @@ -63,7 +66,7 @@ void pop_error (POP_DATA * pop_data, char *msg) t = strchr (pop_data->err_msg, '\0'); c = msg; - if (!mutt_strncmp (msg, "-ERR ", 5)) { + if (!str_ncmp (msg, "-ERR ", 5)) { c2 = msg + 5; SKIPWS (c2); @@ -72,7 +75,7 @@ void pop_error (POP_DATA * pop_data, char *msg) } strfcpy (t, c, sizeof (pop_data->err_msg) - strlen (pop_data->err_msg)); - mutt_remove_trailing_ws (pop_data->err_msg); + str_skip_trailws (pop_data->err_msg); } /* Parse CAPA output */ @@ -82,10 +85,10 @@ static int fetch_capa (char *line, void *data) char *c; if (!ascii_strncasecmp (line, "SASL", 4)) { - FREE (&pop_data->auth_list); + mem_free (&pop_data->auth_list); c = line + 4; SKIPWS (c); - pop_data->auth_list = safe_strdup (c); + pop_data->auth_list = str_dup (c); } else if (!ascii_strncasecmp (line, "STLS", 4)) @@ -109,11 +112,11 @@ static int fetch_auth (char *line, void *data) POP_DATA *pop_data = (POP_DATA *) data; if (!pop_data->auth_list) { - pop_data->auth_list = safe_malloc (strlen (line) + 1); + pop_data->auth_list = mem_malloc (strlen (line) + 1); *pop_data->auth_list = '\0'; } else { - safe_realloc (&pop_data->auth_list, + mem_realloc (&pop_data->auth_list, strlen (pop_data->auth_list) + strlen (line) + 2); strcat (pop_data->auth_list, " "); /* __STRCAT_CHECKED__ */ } @@ -146,7 +149,7 @@ static pop_query_status pop_capabilities (POP_DATA * pop_data, int mode) pop_data->resp_codes = 0; pop_data->expire = 1; pop_data->login_delay = 0; - FREE (&pop_data->auth_list); + mem_free (&pop_data->auth_list); } /* Execute CAPA command */ @@ -219,7 +222,7 @@ pop_query_status pop_connect (POP_DATA * pop_data) pop_data->status = POP_CONNECTED; - if (mutt_strncmp (buf, "+OK", 3)) { + if (str_ncmp (buf, "+OK", 3)) { *pop_data->err_msg = '\0'; pop_error (pop_data, buf); mutt_error ("%s", pop_data->err_msg); @@ -258,9 +261,11 @@ pop_query_status pop_open_connection (POP_DATA * pop_data) return PQ_ERR; } -#if (defined(USE_SSL) || defined(USE_GNUTLS)) && !defined(USE_NSS) +#if (defined(USE_SSL) || defined(USE_GNUTLS)) /* Attempt STLS if available and desired. */ - if (pop_data->cmd_stls && !pop_data->conn->ssf) { + if (!pop_data->conn->ssf && (pop_data->cmd_stls || option(OPTSSLFORCETLS))) { + if (option (OPTSSLFORCETLS)) + pop_data->use_stls = 2; if (pop_data->use_stls == 0) { ret = query_quadoption (OPT_SSLSTARTTLS, _("Secure connection with TLS?")); @@ -301,6 +306,12 @@ pop_query_status pop_open_connection (POP_DATA * pop_data) } } } + + if (option(OPTSSLFORCETLS) && !pop_data->conn->ssf) { + mutt_error _("Encrypted connection unavailable"); + mutt_sleep (1); + return -2; + } #endif ret = pop_authenticate (pop_data); @@ -388,7 +399,7 @@ pop_query_status pop_query_d (POP_DATA * pop_data, char *buf, size_t buflen, cha /* print msg instaed of real command */ if (msg) { dbg = M_SOCK_LOG_FULL; - dprint (M_SOCK_LOG_CMD, (debugfile, "> %s", msg)); + debug_print (M_SOCK_LOG_CMD, ("> %s", msg)); } #endif @@ -402,7 +413,7 @@ pop_query_status pop_query_d (POP_DATA * pop_data, char *buf, size_t buflen, cha pop_data->status = POP_DISCONNECTED; return PQ_NOT_CONNECTED; } - if (!mutt_strncmp (buf, "+OK", 3)) + if (!str_ncmp (buf, "+OK", 3)) return PQ_OK; pop_error (pop_data, buf); @@ -433,7 +444,7 @@ pop_query_status pop_fetch_data (POP_DATA * pop_data, char *query, char *msg, if (ret != PQ_OK) return ret; - inbuf = safe_malloc (sizeof (buf)); + inbuf = mem_malloc (sizeof (buf)); FOREVER { chunk = @@ -466,10 +477,10 @@ pop_query_status pop_fetch_data (POP_DATA * pop_data, char *query, char *msg, lenbuf = 0; } - safe_realloc (&inbuf, lenbuf + sizeof (buf)); + mem_realloc (&inbuf, lenbuf + sizeof (buf)); } - FREE (&inbuf); + mem_free (&inbuf); return ret; } @@ -482,7 +493,7 @@ static int check_uidl (char *line, void *data) sscanf (line, "%u %s", &index, line); for (i = 0; i < ctx->msgcount; i++) { - if (!mutt_strcmp (ctx->hdrs[i]->data, line)) { + if (!str_cmp (ctx->hdrs[i]->data, line)) { ctx->hdrs[i]->refno = index; break; }