X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=imap%2Fimap.c;h=8fd96f82b771f0dce7886ef98232d98610916b55;hp=e54b81f7c1d7ddc424e4b0805a55056a74b376bb;hb=3438f31945bb94bc4f4b9603ac47fcde03d5c073;hpb=25594eeaad2af2d06328b47283cfba72fa3bc8cd diff --git a/imap/imap.c b/imap/imap.c index e54b81f..8fd96f8 100644 --- a/imap/imap.c +++ b/imap/imap.c @@ -21,9 +21,6 @@ #include "browser.h" #include "message.h" #include "imap_private.h" -#if defined(USE_SSL) || defined(USE_GNUTLS) -# include -#endif #include "buffy.h" /* imap forward declarations */ @@ -238,13 +235,13 @@ static int imap_get_delim (IMAP_DATA * idata) * than getting the delim wrong */ idata->delim = '/'; - imap_cmd_start (idata, "LIST\"\" \"\""); + imap_cmd_start (idata, "LIST \"\" \"\""); do { if ((rc = imap_cmd_step (idata)) != IMAP_CMD_CONTINUE) break; - s = imap_next_word (idata->cmd.buf); + s = imap_next_word (idata->cmd.buf.data); if (ascii_strncasecmp ("LIST", s, 4) == 0) { s = imap_next_word (s); s = imap_next_word (s); @@ -279,7 +276,7 @@ static int imap_check_acl (IMAP_DATA * idata) static int imap_check_capabilities (IMAP_DATA * idata) { if (imap_exec (idata, "CAPABILITY", 0) != 0) { - imap_error ("imap_check_capabilities", idata->cmd.buf); + imap_error ("imap_check_capabilities", idata->cmd.buf.data); return -1; } @@ -302,7 +299,6 @@ IMAP_DATA *imap_conn_find (const ACCOUNT * account, int flags) CONNECTION *conn; IMAP_DATA *idata; ACCOUNT *creds; - int new = 0; if (!(conn = mutt_conn_find (NULL, account))) return NULL; @@ -332,33 +328,31 @@ IMAP_DATA *imap_conn_find (const ACCOUNT * account, int flags) if (!idata) { /* The current connection is a new connection */ - if (!(idata = imap_new_idata ())) { - mutt_socket_free (conn); - return NULL; - } - - conn->data = idata; + idata = imap_new_idata(); + conn->data = idata; idata->conn = conn; - new = 1; } if (idata->state == IMAP_DISCONNECTED) imap_open_connection (idata); if (idata->state == IMAP_CONNECTED) { - if (!imap_authenticate (idata)) { + if (!imap_authenticate(idata)) { idata->state = IMAP_AUTHENTICATED; } else { - mutt_account_unsetpass (&idata->conn->account); + mutt_socket_close(idata->conn); + idata->state = IMAP_DISCONNECTED; + idata->conn->account.has_pass = 0; } p_delete(&idata->capstr); } - if (new && idata->state == IMAP_AUTHENTICATED) { + if (idata->isnew && idata->state == IMAP_AUTHENTICATED) { imap_get_delim (idata); if (option (OPTIMAPCHECKSUBSCRIBED)) { mutt_message _("Checking mailbox subscriptions"); imap_exec (idata, "LSUB \"\" \"*\"", 0); } + idata->isnew = 0; } return idata; @@ -379,28 +373,22 @@ int imap_open_connection (IMAP_DATA * idata) return -1; } - if (ascii_strncasecmp ("* OK", idata->cmd.buf, 4) == 0) { + if (ascii_strncasecmp ("* OK", idata->cmd.buf.data, 4) == 0) { /* TODO: Parse new tagged CAPABILITY data (* OK [CAPABILITY...]) */ if (imap_check_capabilities (idata)) goto bail; -#if defined(USE_SSL) || defined(USE_GNUTLS) /* Attempt STARTTLS if available and desired. */ - if (!idata->conn->ssf && (option(OPTSSLFORCETLS) || + if (!idata->conn->ssf && (mod_ssl.force_tls || mutt_bit_isset (idata->capabilities, STARTTLS))) { int rc; - if (option (OPTSSLFORCETLS)) + if (mod_ssl.force_tls) rc = M_YES; - else if ((rc = query_quadoption (OPT_SSLSTARTTLS, - _("Secure connection with TLS?"))) == -1) - goto err_close_conn; - if (rc == M_YES) { + else if (mod_ssl.starttls) { if ((rc = imap_exec (idata, "STARTTLS", IMAP_CMD_FAIL_OK)) == -1) goto bail; if (rc != -2) { -#if defined (USE_SSL) || defined (USE_GNUTLS) if (mutt_ssl_starttls (idata->conn)) -#endif { mutt_error (_("Could not negotiate TLS connection")); mutt_sleep (1); @@ -415,14 +403,13 @@ int imap_open_connection (IMAP_DATA * idata) } } - if (option(OPTSSLFORCETLS) && ! idata->conn->ssf) { + if (mod_ssl.force_tls && ! idata->conn->ssf) { mutt_error _("Encrypted connection unavailable"); mutt_sleep (1); goto err_close_conn; } -#endif } - else if (ascii_strncasecmp ("* PREAUTH", idata->cmd.buf, 9) == 0) { + else if (ascii_strncasecmp ("* PREAUTH", idata->cmd.buf.data, 9) == 0) { idata->state = IMAP_AUTHENTICATED; if (imap_check_capabilities (idata) != 0) goto bail; @@ -545,7 +532,7 @@ static int imap_open_mailbox (CONTEXT * ctx) if ((rc = imap_cmd_step (idata)) != IMAP_CMD_CONTINUE) break; - pc = idata->cmd.buf + 2; + pc = idata->cmd.buf.data + 2; /* Obtain list of available flags here, may be overridden by a * PERMANENTFLAGS tag in the OK response */ @@ -587,7 +574,7 @@ static int imap_open_mailbox (CONTEXT * ctx) if (rc == IMAP_CMD_NO) { char *s; - s = imap_next_word (idata->cmd.buf); /* skip seq */ + s = imap_next_word (idata->cmd.buf.data); /* skip seq */ s = imap_next_word (s); /* Skip response */ mutt_error ("%s", s); mutt_sleep (2); @@ -599,7 +586,7 @@ static int imap_open_mailbox (CONTEXT * ctx) /* check for READ-ONLY notification */ if (!ascii_strncasecmp - (imap_get_qualifier (idata->cmd.buf), "[READ-ONLY]", 11) + (imap_get_qualifier (idata->cmd.buf.data), "[READ-ONLY]", 11) && !mutt_bit_isset (idata->capabilities, ACL)) { ctx->readonly = 1; } @@ -696,25 +683,8 @@ void imap_logout (IMAP_DATA * idata) idata->status = IMAP_BYE; imap_cmd_start (idata, "LOGOUT"); while (imap_cmd_step (idata) == IMAP_CMD_CONTINUE); - p_delete(&idata->cmd.buf); - p_delete(&idata); -} - -/* -int imap_close_connection (CONTEXT *ctx) -{ - if (CTX_DATA->status != IMAP_BYE) - { - mutt_message _("Closing connection to IMAP server..."); - imap_logout (CTX_DATA); - mutt_clear_error (); - } - mutt_socket_close (CTX_DATA->conn); - CTX_DATA->state = IMAP_DISCONNECTED; - CTX_DATA->conn->data = NULL; - return 0; + imap_free_idata(&idata); } -*/ /* imap_set_flag: append str to flags if we currently have permission * according to aclbit */ @@ -868,7 +838,7 @@ int imap_sync_message (IMAP_DATA *idata, HEADER *hdr, BUFFER *cmd, err_continue && (*err_continue != M_YES)) { *err_continue = imap_continue ("imap_sync_message: STORE failed", - idata->cmd.buf); + idata->cmd.buf.data); if (*err_continue != M_YES) return -1; } @@ -968,7 +938,7 @@ int imap_sync_mailbox (CONTEXT * ctx, int expunge, int *index_hint) /* Set expunge bit so we don't get spurious reopened messages */ idata->reopen |= IMAP_EXPUNGE_EXPECTED; if (imap_exec (idata, "EXPUNGE", 0) != 0) { - imap_error (_("imap_sync_mailbox: EXPUNGE failed"), idata->cmd.buf); + imap_error (_("imap_sync_mailbox: EXPUNGE failed"), idata->cmd.buf.data); rc = imap_reconnect (ctx); goto out; } @@ -1132,7 +1102,7 @@ int imap_mailbox_check (char *path, int new) if ((rc = imap_cmd_step (idata)) != IMAP_CMD_CONTINUE) break; - s = imap_next_word (idata->cmd.buf); + s = imap_next_word (idata->cmd.buf.data); if (ascii_strncasecmp ("STATUS", s, 6) == 0) { s = imap_next_word (s); /* The mailbox name may or may not be quoted here. We could try to @@ -1306,7 +1276,7 @@ int imap_parse_list_response (IMAP_DATA * idata, char **name, int *noselect, if (rc != IMAP_CMD_CONTINUE) return -1; - s = imap_next_word (idata->cmd.buf); + s = imap_next_word (idata->cmd.buf.data); if ((ascii_strncasecmp ("LIST", s, 4) == 0) || (ascii_strncasecmp ("LSUB", s, 4) == 0)) { *noselect = 0; @@ -1347,11 +1317,11 @@ int imap_parse_list_response (IMAP_DATA * idata, char **name, int *noselect, } s = imap_next_word (s); /* name */ if (s && *s == '{') { /* Literal */ - if (imap_get_literal_count (idata->cmd.buf, &bytes) < 0) + if (imap_get_literal_count (idata->cmd.buf.data, &bytes) < 0) return -1; if (imap_cmd_step (idata) != IMAP_CMD_CONTINUE) return -1; - *name = idata->cmd.buf; + *name = idata->cmd.buf.data; } else *name = s; @@ -1366,8 +1336,6 @@ int imap_subscribe (char *path, int subscribe) IMAP_DATA *idata; char buf[LONG_STRING]; char mbox[LONG_STRING]; - char errstr[STRING]; - BUFFER err, token; IMAP_MBOX mx; if (mx_get_magic (path) != M_IMAP || imap_parse_path (path, &mx) < 0) { @@ -1383,13 +1351,7 @@ int imap_subscribe (char *path, int subscribe) imap_fix_path (idata, mx.mbox, buf, sizeof (buf)); if (option (OPTIMAPCHECKSUBSCRIBED)) { - p_clear(&token, 1); - err.data = errstr; - err.dsize = sizeof (errstr); - snprintf (mbox, sizeof (mbox), "%smailboxes \"%s\"", - subscribe ? "" : "un", path); - mutt_parse_rc_line (mbox, &token, &err); - p_delete(&token.data); + buffy_do_mailboxes(path, subscribe); } if (subscribe) @@ -1543,7 +1505,7 @@ int imap_complete (char *dest, size_t dlen, char *path) { completions++; } } - while (m_strncmp(idata->cmd.seq, idata->cmd.buf, SEQLEN)); + while (m_strncmp(idata->cmd.seq, idata->cmd.buf.data, SEQLEN)); if (completions) { /* reformat output */ @@ -1600,7 +1562,7 @@ static int imap_open_new_message (MESSAGE * msg, { char tmp[_POSIX_PATH_MAX]; - msg->fp = m_tempfile(tmp, sizeof(tmp), NONULL(Tempdir), NULL); + msg->fp = m_tempfile(tmp, sizeof(tmp), NONULL(mod_core.tmpdir), NULL); if (!msg->fp) { mutt_perror(tmp); return -1;