diff options
| -rw-r--r-- | fetchmail.h | 8 | ||||
| -rw-r--r-- | pop3.c | 23 | 
2 files changed, 28 insertions, 3 deletions
diff --git a/fetchmail.h b/fetchmail.h index a638df9e..dfafd2b5 100644 --- a/fetchmail.h +++ b/fetchmail.h @@ -277,8 +277,16 @@ struct hostdata		/* shared among all user connections to given server */      size_t trueaddr_len;		/* size of trueaddr data */      struct hostdata *lead_server;	/* ptr to lead query for this server */      int esmtp_options; +    int workarounds;			/* track which workarounds the user was warned about */  }; +/* + * bit flags to set in workarounds after the corresponding warning, + * which we assume to be server-specific, has been printed, + * so we don't spam our users in daemon mode. + */ +#define WKA_TOP (1L << 0)		/* Maillennium TOP -> RETR override warning */ +  struct query  {      /* mailserver connection controls */ @@ -611,10 +611,27 @@ static int pop3_getauth(int sock, struct query *ctl, char *greeting)  #endif      set_peek_capable(ctl); -    /* comcast's Maillennium POP3/PROXY is full of bugs and truncates -     * TOP replies after c. 80 kByte, so disable TOP. */ +    /* +     * The "Maillennium POP3/PROXY server" deliberately truncates +     * TOP replies after c. 64 or 80 kByte (we have varying reports), so +     * disable TOP. Comcast once spewed marketing babble to the extent +     * of protecting Outlook -- pretty overzealous to break a protocol +     * for that that Microsoft could have read, too. Comcast aren't +     * alone in using this software though. +     * <http://lists.ccil.org/pipermail/fetchmail-friends/2004-April/008523.html> +     * (Thanks to Ed Wilts for reminding me of that.) +     * +     * The warning is printed once per server, until fetchmail exits. +     * It will be suppressed when --fetchall or other circumstances make +     * us use RETR anyhow. +     * +     * Matthias Andree +     */      if (peek_capable && strstr(greeting, "Maillennium POP3/PROXY server")) { -	report(stdout, GT_("Warning: Maillennium POP3/PROXY server found, using RETR command.\n")); +	if (ctl->server.workarounds & WKA_TOP == 0) { +	    report(stdout, GT_("Warning: Maillennium POP3/PROXY server found, using RETR command.\n")); +	    ctl->server.workarounds |= WKA_TOP; +	}  	peek_capable = 0;      }  | 
