diff options
Diffstat (limited to 'imap')
| -rw-r--r-- | imap/ChangeLog | 9 | ||||
| -rw-r--r-- | imap/imapd.c | 2 | ||||
| -rw-r--r-- | imap/imaplogin.c | 4 | ||||
| -rw-r--r-- | imap/imaptoken.c | 5 | ||||
| -rw-r--r-- | imap/imaptoken.h | 1 | ||||
| -rw-r--r-- | imap/mainloop.c | 7 | ||||
| -rw-r--r-- | imap/pop3login.c | 1 | 
7 files changed, 24 insertions, 5 deletions
| diff --git a/imap/ChangeLog b/imap/ChangeLog index a5eeb40..3db1562 100644 --- a/imap/ChangeLog +++ b/imap/ChangeLog @@ -1,3 +1,12 @@ +2013-11-25  Sam Varshavchik  <mrsam@courier-mta.com> + +	* pop3login.c (starttls): Clear input buffer after STARTTLS. + +	* imaplogin.c (starttls): Clear input buffer after STARTTLS. + +	* Fix various compiler warnings about unchecked results from setuid +	and setgid calls. +  2013-11-10  Sam Varshavchik  <mrsam@courier-mta.com>  	* libs/tcpd/libcouriergnutls.c, libs/tcpd/libcouriertls.c: remove the diff --git a/imap/imapd.c b/imap/imapd.c index 7a61e2b..497850d 100644 --- a/imap/imapd.c +++ b/imap/imapd.c @@ -4135,7 +4135,7 @@ static int validate_charset(const char *tag, char **charset)  	return (0);  } -int do_imap_command(const char *tag) +int do_imap_command(const char *tag, int *flushflag)  {  struct	imaptoken *curtoken=nexttoken();  int	uid=0; diff --git a/imap/imaplogin.c b/imap/imaplogin.c index c3dfa7f..0a46783 100644 --- a/imap/imaplogin.c +++ b/imap/imaplogin.c @@ -245,7 +245,7 @@ int login_callback(struct authinfo *ainfo, void *dummy)  	return(rc);  } -int do_imap_command(const char *tag) +int do_imap_command(const char *tag, int *flushflag)  {  	struct	imaptoken *curtoken=nexttoken();  	char authservice[40]; @@ -298,7 +298,7 @@ int do_imap_command(const char *tag)  		putenv("IMAP_STARTTLS=NO");  		putenv("IMAP_TLS_REQUIRED=0");  		putenv("IMAP_TLS=1"); - +		*flushflag=1;  		return (0);  	} diff --git a/imap/imaptoken.c b/imap/imaptoken.c index a2d3cd8..7df8846 100644 --- a/imap/imaptoken.c +++ b/imap/imaptoken.c @@ -143,6 +143,11 @@ int n = 0;  	return (n);  } +void readflush() +{ +	imap_readptrleft=0; +} +  void readfill()  {  	imap_readptrleft=doread(readbuf, sizeof(readbuf)); diff --git a/imap/imaptoken.h b/imap/imaptoken.h index 6ca1b2d..65f8119 100644 --- a/imap/imaptoken.h +++ b/imap/imaptoken.h @@ -50,6 +50,7 @@ extern size_t doread(char *buf, size_t bufsiz);  extern char *imap_readptr;  extern size_t imap_readptrleft;  extern void readfill(); +extern void readflush();  #define	READ()	( imap_readptrleft ? \  	(--imap_readptrleft, (int)(unsigned char)*imap_readptr++): \ diff --git a/imap/mainloop.c b/imap/mainloop.c index b58ae6f..f2224a8 100644 --- a/imap/mainloop.c +++ b/imap/mainloop.c @@ -19,7 +19,7 @@  #include	"numlib/numlib.h" -extern int do_imap_command(const char *); +extern int do_imap_command(const char *, int *);  extern unsigned long header_count, body_count;  extern unsigned long bytes_received_count, bytes_sent_count; @@ -119,18 +119,21 @@ void mainloop(void)  			curtoken->tokentype == IT_NUMBER)  		{  		int	rc; +		int	flushflag=0;  			if (strlen(tag)+strlen(curtoken->tokenbuf) > IT_MAX_ATOM_SIZE)  				write_error_exit("max atom size too small");  			strncat(tag, curtoken->tokenbuf, IT_MAX_ATOM_SIZE); -			rc=do_imap_command(tag); +			rc=do_imap_command(tag, &flushflag);  			if (rc == 0)  			{  				noerril = 0;  				writeflush();  				read_eol(); +				if (flushflag) +					readflush();  				continue;  			}  			if (rc == -2) diff --git a/imap/pop3login.c b/imap/pop3login.c index 2c6e599..4bc291b 100644 --- a/imap/pop3login.c +++ b/imap/pop3login.c @@ -66,6 +66,7 @@ static int	starttls()  	printf("+OK Begin SSL/TLS negotiation now.\r\n");  	fflush(stdout); +	fflush(stdin);  	if (couriertls_start(argvec, &cinfo))  	{ | 
