Backport fix from trunk for SASL bug.
[mmh] / mts / smtp / smtp.c
index 5760356..9527a5e 100644 (file)
@@ -18,8 +18,8 @@
 #endif
 
 #ifdef CYRUS_SASL
-#include <sasl.h>
-#include <saslutil.h>
+#include <sasl/sasl.h>
+#include <sasl/saslutil.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
 /*
  * these codes must all be different!
  */
-#define        SM_OPEN  90      /* Changed from 30 in case of nameserver flakiness */
+#define        SM_OPEN  300      /* Changed to 5 minutes to comply with a SHOULD in RFC 1123 */
 #define        SM_HELO  20
 #define        SM_RSET  15
-#define        SM_MAIL  40
-#define        SM_RCPT 120
-#define        SM_DATA  20
-#define        SM_TEXT 150
-#define        SM_DOT  180
+#define        SM_MAIL  301      /* changed to 5 minutes and a second (for uniqueness), see above */
+#define        SM_RCPT  302      /* see above */
+#define        SM_DATA  120      /* see above */
+#define        SM_TEXT 180     /* see above */
+#define        SM_DOT  600     /* see above */
 #define        SM_QUIT  30
 #define        SM_CLOS  10
 #define        SM_AUTH  45
@@ -502,15 +502,6 @@ rclient (char *server, char *protocol, char *service)
     return NOTOK;
 }
 
-#ifdef CYRUS_SASL
-#include <sasl.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-#include <errno.h>
-#endif /* CYRUS_SASL */
-
 int
 sm_winit (int mode, char *from)
 {
@@ -968,7 +959,7 @@ bad_data:
     free (cp);
 
     {
-#ifdef HAVE_ST_BLKSIZE
+#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
        struct stat st;
 
        if (fstat (fileno (sm_wfp), &st) == NOTOK || (cc = st.st_blksize) < BUFSIZ)
@@ -1255,7 +1246,7 @@ sm_auth_sasl(char *user, char *mechlist, char *host)
            result = sasl_decode64(sm_reply.text, sm_reply.length,
                                   outbuf, sizeof(outbuf), &outlen);
        
-           if (result != SASL_OK) {
+           if (result != SASL_OK && result != SASL_CONTINUE) {
                smtalk(SM_AUTH, "*");
                sm_ierror("SASL base64 decode failed: %s",
                          sasl_errstring(result, NULL, NULL));
@@ -1579,7 +1570,8 @@ static int
 smhear (void)
 {
     int i, code, cont, bc, rc, more;
-    char *bp, *rp;
+    unsigned char *bp;
+    char *rp;
     char **ehlo, buffer[BUFSIZ];
 
     if (doingEHLO) {