projects
/
mmh
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix SASL issue properly, by making sm_rrecord() and thus sm_hear() set
[mmh]
/
mts
/
smtp
/
smtp.c
diff --git
a/mts/smtp/smtp.c
b/mts/smtp/smtp.c
index
bf0804e
..
13e8eff
100644
(file)
--- a/
mts/smtp/smtp.c
+++ b/
mts/smtp/smtp.c
@@
-18,8
+18,8
@@
#endif
#ifdef CYRUS_SASL
#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>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
@@
-502,15
+502,6
@@
rclient (char *server, char *protocol, char *service)
return NOTOK;
}
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)
{
int
sm_winit (int mode, char *from)
{
@@
-968,7
+959,7
@@
bad_data:
free (cp);
{
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)
struct stat st;
if (fstat (fileno (sm_wfp), &st) == NOTOK || (cc = st.st_blksize) < BUFSIZ)
@@
-1579,7
+1570,8
@@
static int
smhear (void)
{
int i, code, cont, bc, rc, more;
smhear (void)
{
int i, code, cont, bc, rc, more;
- char *bp, *rp;
+ unsigned char *bp;
+ char *rp;
char **ehlo, buffer[BUFSIZ];
if (doingEHLO) {
char **ehlo, buffer[BUFSIZ];
if (doingEHLO) {
@@
-1696,15
+1688,17
@@
sm_rrecord (char *buffer, int *len)
fgets (buffer, BUFSIZ, sm_rfp);
*len = strlen (buffer);
fgets (buffer, BUFSIZ, sm_rfp);
*len = strlen (buffer);
- if (ferror (sm_rfp) || feof (sm_rfp))
+ /* *len should be >0 except on EOF, but check for safety's sake */
+ if (ferror (sm_rfp) || feof (sm_rfp) || (*len == 0))
return sm_rerror ();
if (buffer[*len - 1] != '\n')
while (getc (sm_rfp) != '\n' && !ferror (sm_rfp) && !feof (sm_rfp))
continue;
else
return sm_rerror ();
if (buffer[*len - 1] != '\n')
while (getc (sm_rfp) != '\n' && !ferror (sm_rfp) && !feof (sm_rfp))
continue;
else
- if (buffer[*len - 2] == '\r')
+ if ((*len > 1) && (buffer[*len - 2] == '\r'))
*len -= 1;
*len -= 1;
- buffer[*len - 1] = 0;
+ *len -= 1;
+ buffer[*len] = 0;
return OK;
}
return OK;
}