Deleted Added
full compact
sfsasl.c (203004) sfsasl.c (249729)
1/*
2 * Copyright (c) 1999-2006, 2008 Sendmail, Inc. and its suppliers.
3 * All rights reserved.
4 *
5 * By using this file, you agree to the terms and conditions set
6 * forth in the LICENSE file which can be found at the top level of
7 * the sendmail distribution.
8 *
9 */
10
11#include <sm/gen.h>
1/*
2 * Copyright (c) 1999-2006, 2008 Sendmail, Inc. and its suppliers.
3 * All rights reserved.
4 *
5 * By using this file, you agree to the terms and conditions set
6 * forth in the LICENSE file which can be found at the top level of
7 * the sendmail distribution.
8 *
9 */
10
11#include <sm/gen.h>
12SM_RCSID("@(#)$Id: sfsasl.c,v 8.118 2008/07/22 15:12:48 ca Exp $")
12SM_RCSID("@(#)$Id: sfsasl.c,v 8.120 2013/03/15 17:49:12 guenther Exp $")
13#include <stdlib.h>
14#include <sendmail.h>
15#include <sm/time.h>
16#include <errno.h>
17
18/* allow to disable error handling code just in case... */
19#ifndef DEAL_WITH_ERROR_SSL
20# define DEAL_WITH_ERROR_SSL 1

--- 602 unchanged lines hidden (view full) ---

623 (err == SSL_ERROR_WANT_WRITE && wfd >= FD_SETSIZE)))
624 {
625 if (LogLevel > 5)
626 {
627 sm_syslog(LOG_ERR, NOQID,
628 "STARTTLS=%s, error: fd %d/%d too large",
629 where, rfd, wfd);
630 if (LogLevel > 8)
13#include <stdlib.h>
14#include <sendmail.h>
15#include <sm/time.h>
16#include <errno.h>
17
18/* allow to disable error handling code just in case... */
19#ifndef DEAL_WITH_ERROR_SSL
20# define DEAL_WITH_ERROR_SSL 1

--- 602 unchanged lines hidden (view full) ---

623 (err == SSL_ERROR_WANT_WRITE && wfd >= FD_SETSIZE)))
624 {
625 if (LogLevel > 5)
626 {
627 sm_syslog(LOG_ERR, NOQID,
628 "STARTTLS=%s, error: fd %d/%d too large",
629 where, rfd, wfd);
630 if (LogLevel > 8)
631 tlslogerr(where);
631 tlslogerr(LOG_WARNING, where);
632 }
633 errno = EINVAL;
634 }
635 else if (err == SSL_ERROR_WANT_READ)
636 {
637 fd_set ssl_maskr, ssl_maskx;
632 }
633 errno = EINVAL;
634 }
635 else if (err == SSL_ERROR_WANT_READ)
636 {
637 fd_set ssl_maskr, ssl_maskx;
638 int save_errno = errno;
638
639 FD_ZERO(&ssl_maskr);
640 FD_SET(rfd, &ssl_maskr);
641 FD_ZERO(&ssl_maskx);
642 FD_SET(rfd, &ssl_maskx);
643 do
644 {
645 ret = select(rfd + 1, &ssl_maskr, NULL, &ssl_maskx,
646 &tv);
647 } while (ret < 0 && errno == EINTR);
648 if (ret < 0 && errno > 0)
649 ret = -errno;
639
640 FD_ZERO(&ssl_maskr);
641 FD_SET(rfd, &ssl_maskr);
642 FD_ZERO(&ssl_maskx);
643 FD_SET(rfd, &ssl_maskx);
644 do
645 {
646 ret = select(rfd + 1, &ssl_maskr, NULL, &ssl_maskx,
647 &tv);
648 } while (ret < 0 && errno == EINTR);
649 if (ret < 0 && errno > 0)
650 ret = -errno;
651 errno = save_errno;
650 }
651 else if (err == SSL_ERROR_WANT_WRITE)
652 {
653 fd_set ssl_maskw, ssl_maskx;
652 }
653 else if (err == SSL_ERROR_WANT_WRITE)
654 {
655 fd_set ssl_maskw, ssl_maskx;
656 int save_errno = errno;
654
655 FD_ZERO(&ssl_maskw);
656 FD_SET(wfd, &ssl_maskw);
657 FD_ZERO(&ssl_maskx);
658 FD_SET(rfd, &ssl_maskx);
659 do
660 {
661 ret = select(wfd + 1, NULL, &ssl_maskw, &ssl_maskx,
662 &tv);
663 } while (ret < 0 && errno == EINTR);
664 if (ret < 0 && errno > 0)
665 ret = -errno;
657
658 FD_ZERO(&ssl_maskw);
659 FD_SET(wfd, &ssl_maskw);
660 FD_ZERO(&ssl_maskx);
661 FD_SET(rfd, &ssl_maskx);
662 do
663 {
664 ret = select(wfd + 1, NULL, &ssl_maskw, &ssl_maskx,
665 &tv);
666 } while (ret < 0 && errno == EINTR);
667 if (ret < 0 && errno > 0)
668 ret = -errno;
669 errno = save_errno;
666 }
667 return ret;
668}
669
670/* errno to force refill() etc to stop (see IS_IO_ERROR()) */
671#ifdef ETIMEDOUT
672# define SM_ERR_TIMEOUT ETIMEDOUT
673#else /* ETIMEDOUT */

--- 91 unchanged lines hidden (view full) ---

765*/
766 break;
767 case SSL_ERROR_SSL:
768#if DEAL_WITH_ERROR_SSL
769 if (r == 0 && errno == 0) /* out of protocol EOF found */
770 break;
771#endif /* DEAL_WITH_ERROR_SSL */
772 err = "generic SSL error";
670 }
671 return ret;
672}
673
674/* errno to force refill() etc to stop (see IS_IO_ERROR()) */
675#ifdef ETIMEDOUT
676# define SM_ERR_TIMEOUT ETIMEDOUT
677#else /* ETIMEDOUT */

--- 91 unchanged lines hidden (view full) ---

769*/
770 break;
771 case SSL_ERROR_SSL:
772#if DEAL_WITH_ERROR_SSL
773 if (r == 0 && errno == 0) /* out of protocol EOF found */
774 break;
775#endif /* DEAL_WITH_ERROR_SSL */
776 err = "generic SSL error";
777
773 if (LogLevel > 9)
778 if (LogLevel > 9)
774 tlslogerr("read");
779 {
780 int pri;
775
781
782 if (errno == EAGAIN && try > 0)
783 pri = LOG_DEBUG;
784 else
785 pri = LOG_WARNING;
786 tlslogerr(pri, "read");
787 }
788
776#if DEAL_WITH_ERROR_SSL
777 /* avoid repeated calls? */
778 if (r == 0)
779 r = -1;
780#endif /* DEAL_WITH_ERROR_SSL */
781 break;
782 }
783 if (err != NULL)
784 {
785 int save_errno;
786
787 save_errno = (errno == 0) ? EIO : errno;
788 if (try == 0 && save_errno == SM_ERR_TIMEOUT)
789 {
790 if (LogLevel > 7)
791 sm_syslog(LOG_WARNING, NOQID,
792 "STARTTLS: read error=timeout");
793 }
794 else if (LogLevel > 8)
789#if DEAL_WITH_ERROR_SSL
790 /* avoid repeated calls? */
791 if (r == 0)
792 r = -1;
793#endif /* DEAL_WITH_ERROR_SSL */
794 break;
795 }
796 if (err != NULL)
797 {
798 int save_errno;
799
800 save_errno = (errno == 0) ? EIO : errno;
801 if (try == 0 && save_errno == SM_ERR_TIMEOUT)
802 {
803 if (LogLevel > 7)
804 sm_syslog(LOG_WARNING, NOQID,
805 "STARTTLS: read error=timeout");
806 }
807 else if (LogLevel > 8)
795 sm_syslog(LOG_WARNING, NOQID,
808 {
809 int pri;
810
811 if (save_errno == EAGAIN && try > 0)
812 pri = LOG_DEBUG;
813 else
814 pri = LOG_WARNING;
815 sm_syslog(pri, NOQID,
796 "STARTTLS: read error=%s (%d), errno=%d, get_error=%s, retry=%d, ssl_err=%d",
797 err, r, errno,
798 ERR_error_string(ERR_get_error(), NULL), try,
799 ssl_err);
816 "STARTTLS: read error=%s (%d), errno=%d, get_error=%s, retry=%d, ssl_err=%d",
817 err, r, errno,
818 ERR_error_string(ERR_get_error(), NULL), try,
819 ssl_err);
820 }
800 else if (LogLevel > 7)
801 sm_syslog(LOG_WARNING, NOQID,
802 "STARTTLS: read error=%s (%d), retry=%d, ssl_err=%d",
803 err, r, errno, try, ssl_err);
804 errno = save_errno;
805 }
806 return r;
807}

--- 65 unchanged lines hidden (view full) ---

873*/
874 break;
875 case SSL_ERROR_SSL:
876 err = "generic SSL error";
877/*
878 ERR_GET_REASON(ERR_peek_error()));
879*/
880 if (LogLevel > 9)
821 else if (LogLevel > 7)
822 sm_syslog(LOG_WARNING, NOQID,
823 "STARTTLS: read error=%s (%d), retry=%d, ssl_err=%d",
824 err, r, errno, try, ssl_err);
825 errno = save_errno;
826 }
827 return r;
828}

--- 65 unchanged lines hidden (view full) ---

894*/
895 break;
896 case SSL_ERROR_SSL:
897 err = "generic SSL error";
898/*
899 ERR_GET_REASON(ERR_peek_error()));
900*/
901 if (LogLevel > 9)
881 tlslogerr("write");
902 tlslogerr(LOG_WARNING, "write");
882
883#if DEAL_WITH_ERROR_SSL
884 /* avoid repeated calls? */
885 if (r == 0)
886 r = -1;
887#endif /* DEAL_WITH_ERROR_SSL */
888 break;
889 }

--- 85 unchanged lines hidden ---
903
904#if DEAL_WITH_ERROR_SSL
905 /* avoid repeated calls? */
906 if (r == 0)
907 r = -1;
908#endif /* DEAL_WITH_ERROR_SSL */
909 break;
910 }

--- 85 unchanged lines hidden ---