summaryrefslogtreecommitdiffstats
path: root/imap
diff options
context:
space:
mode:
Diffstat (limited to 'imap')
-rw-r--r--imap/ChangeLog9
-rw-r--r--imap/imapd.c2
-rw-r--r--imap/imaplogin.c4
-rw-r--r--imap/imaptoken.c5
-rw-r--r--imap/imaptoken.h1
-rw-r--r--imap/mainloop.c7
-rw-r--r--imap/pop3login.c1
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))
{