X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=mts%2Fsmtp%2Fsmtp.c;h=13e8eff9dc352d59ff9a10f57074189f95a40d80;hb=757fa32156f812a166631942816e46e2138ebae3;hp=bf0804e171eef0911c12ac2ad8cd84a9b28f3b7b;hpb=f292123e4a8ff7bf829d2954ec838f677043ebd4;p=mmh diff --git a/mts/smtp/smtp.c b/mts/smtp/smtp.c index bf0804e..13e8eff 100644 --- a/mts/smtp/smtp.c +++ b/mts/smtp/smtp.c @@ -18,8 +18,8 @@ #endif #ifdef CYRUS_SASL -#include -#include +#include +#include #include #include #include @@ -502,15 +502,6 @@ rclient (char *server, char *protocol, char *service) return NOTOK; } -#ifdef CYRUS_SASL -#include -#include -#include -#include -#include -#include -#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) @@ -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) { @@ -1696,15 +1688,17 @@ sm_rrecord (char *buffer, int *len) 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 - if (buffer[*len - 2] == '\r') + if ((*len > 1) && (buffer[*len - 2] == '\r')) *len -= 1; - buffer[*len - 1] = 0; + *len -= 1; + buffer[*len] = 0; return OK; }