summaryrefslogtreecommitdiffstats
path: root/src/sfsasl.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/sfsasl.c')
-rw-r--r--src/sfsasl.c31
1 files changed, 26 insertions, 5 deletions
diff --git a/src/sfsasl.c b/src/sfsasl.c
index cad16db..ebea3f2 100644
--- a/src/sfsasl.c
+++ b/src/sfsasl.c
@@ -9,7 +9,7 @@
*/
#include <sm/gen.h>
-SM_RCSID("@(#)$Id: sfsasl.c,v 8.118 2008/07/22 15:12:48 ca Exp $")
+SM_RCSID("@(#)$Id: sfsasl.c,v 8.120 2013/03/15 17:49:12 guenther Exp $")
#include <stdlib.h>
#include <sendmail.h>
#include <sm/time.h>
@@ -628,13 +628,14 @@ tls_retry(ssl, rfd, wfd, tlsstart, timeout, err, where)
"STARTTLS=%s, error: fd %d/%d too large",
where, rfd, wfd);
if (LogLevel > 8)
- tlslogerr(where);
+ tlslogerr(LOG_WARNING, where);
}
errno = EINVAL;
}
else if (err == SSL_ERROR_WANT_READ)
{
fd_set ssl_maskr, ssl_maskx;
+ int save_errno = errno;
FD_ZERO(&ssl_maskr);
FD_SET(rfd, &ssl_maskr);
@@ -647,10 +648,12 @@ tls_retry(ssl, rfd, wfd, tlsstart, timeout, err, where)
} while (ret < 0 && errno == EINTR);
if (ret < 0 && errno > 0)
ret = -errno;
+ errno = save_errno;
}
else if (err == SSL_ERROR_WANT_WRITE)
{
fd_set ssl_maskw, ssl_maskx;
+ int save_errno = errno;
FD_ZERO(&ssl_maskw);
FD_SET(wfd, &ssl_maskw);
@@ -663,6 +666,7 @@ tls_retry(ssl, rfd, wfd, tlsstart, timeout, err, where)
} while (ret < 0 && errno == EINTR);
if (ret < 0 && errno > 0)
ret = -errno;
+ errno = save_errno;
}
return ret;
}
@@ -770,8 +774,17 @@ tls_read(fp, buf, size)
break;
#endif /* DEAL_WITH_ERROR_SSL */
err = "generic SSL error";
+
if (LogLevel > 9)
- tlslogerr("read");
+ {
+ int pri;
+
+ if (errno == EAGAIN && try > 0)
+ pri = LOG_DEBUG;
+ else
+ pri = LOG_WARNING;
+ tlslogerr(pri, "read");
+ }
#if DEAL_WITH_ERROR_SSL
/* avoid repeated calls? */
@@ -792,11 +805,19 @@ tls_read(fp, buf, size)
"STARTTLS: read error=timeout");
}
else if (LogLevel > 8)
- sm_syslog(LOG_WARNING, NOQID,
+ {
+ int pri;
+
+ if (save_errno == EAGAIN && try > 0)
+ pri = LOG_DEBUG;
+ else
+ pri = LOG_WARNING;
+ sm_syslog(pri, NOQID,
"STARTTLS: read error=%s (%d), errno=%d, get_error=%s, retry=%d, ssl_err=%d",
err, r, errno,
ERR_error_string(ERR_get_error(), NULL), try,
ssl_err);
+ }
else if (LogLevel > 7)
sm_syslog(LOG_WARNING, NOQID,
"STARTTLS: read error=%s (%d), retry=%d, ssl_err=%d",
@@ -878,7 +899,7 @@ tls_write(fp, buf, size)
ERR_GET_REASON(ERR_peek_error()));
*/
if (LogLevel > 9)
- tlslogerr("write");
+ tlslogerr(LOG_WARNING, "write");
#if DEAL_WITH_ERROR_SSL
/* avoid repeated calls? */
OpenPOWER on IntegriCloud