X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=imap.c;h=65d225381b7c1b926c5d38d1e8312dbaf67c6ee2;hb=f16d8d23439b5569f0c2e1af22494708b507f277;hp=93f05f2c6ba7ba7cb392cd587550092944329188;hpb=c0afd60c07987a3519aea96b599e8558ea2361d6;p=~andy%2Ffetchmail diff --git a/imap.c b/imap.c index 93f05f2c..65d22538 100644 --- a/imap.c +++ b/imap.c @@ -10,18 +10,15 @@ #include #include #include -#if defined(STDC_HEADERS) #include #include #include -#endif #include "fetchmail.h" #include "socket.h" -#include "i18n.h" +#include "gettext.h" /* imap_version values */ -#define IMAP2 -1 /* IMAP2 or IMAP2BIS, RFC1176 */ #define IMAP4 0 /* IMAP4 rev 0, RFC1730 */ #define IMAP4rev1 1 /* IMAP4 rev 1, RFC2060 */ @@ -354,12 +351,6 @@ static int capa_probe(int sock, struct query *ctl) report(stdout, GT_("Protocol identified as IMAP4 rev 0\n")); } } - else if (ok == PS_ERROR) - { - imap_version = IMAP2; - if (outlevel >= O_DEBUG) - report(stdout, GT_("Protocol identified as IMAP2 or IMAP2BIS\n")); - } else return ok; @@ -378,7 +369,7 @@ static int capa_probe(int sock, struct query *ctl) report(stdout, GT_("will idle after poll\n")); } - peek_capable = (imap_version >= IMAP4); + peek_capable = TRUE; return PS_SUCCESS; } @@ -542,24 +533,6 @@ static int imap_getauth(int sock, struct query *ctl, char *greeting) } #endif /* GSSAPI */ -#ifdef KERBEROS_V4 - if ((ctl->server.authenticate == A_ANY - || ctl->server.authenticate == A_KERBEROS_V4 - || ctl->server.authenticate == A_KERBEROS_V5) - && strstr(capabilities, "AUTH=KERBEROS_V4")) - { - if ((ok = do_rfc1731(sock, "AUTHENTICATE", ctl->server.truename))) - { - /* SASL cancellation of authentication */ - gen_send(sock, "*"); - if(ctl->server.authenticate != A_ANY) - return ok; - } - else - return ok; - } -#endif /* KERBEROS_V4 */ - /* * No such luck. OK, now try the variants that mask your password * in a challenge-response. @@ -619,15 +592,6 @@ static int imap_getauth(int sock, struct query *ctl, char *greeting) } #endif /* NTLM_ENABLE */ -#ifdef __UNUSED__ /* The Cyrus IMAP4rev1 server chokes on this */ - /* this handles either AUTH=LOGIN or AUTH-LOGIN */ - if ((imap_version >= IMAP4rev1) && (!strstr(capabilities, "LOGIN"))) - { - report(stderr, - GT_("Required LOGIN capability not supported by server\n")); - } -#endif /* __UNUSED__ */ - /* * We're stuck with sending the password en clair. * The reason for this odd-looking logic is that some @@ -776,7 +740,7 @@ static int imap_search(int sock, struct query *ctl, int count) * higher and only when keeping mails. This flag will have an * effect only when user has marked some unread mails for deletion * using another e-mail client. */ - flag skipdeleted = (imap_version >= IMAP4) && ctl->keep; + flag skipdeleted = ctl->keep; const char *undeleted; /* structure to keep the end portion of the incomplete response */ @@ -1182,7 +1146,7 @@ static int imap_fetch_headers(int sock, struct query *ctl,int number,int *lenp) /* an unexpected tagged response */ if (outlevel > O_SILENT) report(stderr, GT_("Incorrect FETCH response: %s.\n"), buf); - return(PS_ERROR); + return(PS_TRANSIENT); } return(ok); } @@ -1208,28 +1172,23 @@ static int imap_fetch_body(int sock, struct query *ctl, int number, int *lenp) * equivalent". However, we know of at least one server that * treats them differently in the presence of MIME attachments; * the latter form downloads the attachment, the former does not. - * The server is InterChange, and the fool who implemented this - * misfeature ought to be strung up by his thumbs. + * The server is InterChange. * * When I tried working around this by disabling use of the 4rev1 form, * I found that doing this breaks operation with M$ Exchange. * Annoyingly enough, Exchange's refusal to cope is technically legal - * under RFC2062. Trust Microsoft, the Great Enemy of interoperability - * standards, to find a way to make standards compliance irritating.... + * under RFC2062. */ switch (imap_version) { case IMAP4rev1: /* RFC 2060 */ + default: gen_send(sock, "FETCH %d BODY.PEEK[TEXT]", number); break; case IMAP4: /* RFC 1730 */ gen_send(sock, "FETCH %d RFC822.TEXT.PEEK", number); break; - - default: /* RFC 1176 */ - gen_send(sock, "FETCH %d RFC822.TEXT", number); - break; } /* looking for FETCH response */ @@ -1311,21 +1270,13 @@ static int imap_delete(int sock, struct query *ctl, int number) number -= expunged; /* - * Use SILENT if possible as a minor throughput optimization. - * Note: this has been dropped from IMAP4rev1. - * - * We set \Seen because there are some IMAP servers (notably HP - * OpenMail and MS Exchange) do message-receipt DSNs, - * but only when the seen bit gets set. - * This is the appropriate time -- we get here right + * We set Seen because there are some IMAP servers (notably HP + * OpenMail) that do message-receipt DSNs, but only when the seen + * bit is set. This is the appropriate time -- we get here right * after the local SMTP response that says delivery was * successful. */ - if ((ok = gen_transact(sock, - imap_version == IMAP4 - ? "STORE %d +FLAGS.SILENT (%s)" - : "STORE %d +FLAGS (%s)", - number, delflags))) + if ((ok = gen_transact(sock, "STORE %d +FLAGS.SILENT (\\Seen \\Deleted)", number))) return(ok); else deletions++; @@ -1353,11 +1304,7 @@ static int imap_mark_seen(int sock, struct query *ctl, int number) /* expunges change the message numbers */ number -= expunged; - return(gen_transact(sock, - imap_version == IMAP4 - ? "STORE %d +FLAGS.SILENT (\\Seen)" - : "STORE %d +FLAGS (\\Seen)", - number)); + return(gen_transact(sock,"STORE %d +FLAGS.SILENT (\\Seen)", number)); } static int imap_end_mailbox_poll(int sock, struct query *ctl)