This diff removes the IO_TLSVERIFIED which is not a io event, and
inlines the necessary code where the callback functions are called
for this event.

Eric.

Index: ioev.c
===================================================================
RCS file: /cvs/src/usr.sbin/smtpd/ioev.c,v
retrieving revision 1.27
diff -u -p -r1.27 ioev.c
--- ioev.c      16 Nov 2016 21:30:37 -0000      1.27
+++ ioev.c      16 Nov 2016 21:56:25 -0000
@@ -118,7 +118,6 @@ io_strevent(int evt)
        switch (evt) {
        CASE(IO_CONNECTED);
        CASE(IO_TLSREADY);
-       CASE(IO_TLSVERIFIED);
        CASE(IO_DATAIN);
        CASE(IO_LOWAT);
        CASE(IO_DISCONNECTED);
Index: ioev.h
===================================================================
RCS file: /cvs/src/usr.sbin/smtpd/ioev.h,v
retrieving revision 1.7
diff -u -p -r1.7 ioev.h
--- ioev.h      16 Nov 2016 21:30:37 -0000      1.7
+++ ioev.h      16 Nov 2016 21:56:25 -0000
@@ -20,7 +20,6 @@
 enum {
        IO_CONNECTED = 0,       /* connection successful        */
        IO_TLSREADY,            /* TLS started successfully     */
-       IO_TLSVERIFIED,         /* XXX - needs more work        */
        IO_TLSERROR,            /* XXX - needs more work        */
        IO_DATAIN,              /* new data in input buffer     */
        IO_LOWAT,               /* output queue running low     */
Index: mta_session.c
===================================================================
RCS file: /cvs/src/usr.sbin/smtpd/mta_session.c,v
retrieving revision 1.84
diff -u -p -r1.84 mta_session.c
--- mta_session.c       16 Nov 2016 21:30:37 -0000      1.84
+++ mta_session.c       16 Nov 2016 21:56:25 -0000
@@ -259,6 +259,7 @@ mta_session_imsg(struct mproc *p, struct
        const char              *name;
        void                    *ssl;
        int                      dnserror, status;
+       X509                    *x;
 
        switch (imsg->hdr.type) {
 
@@ -363,7 +364,22 @@ mta_session_imsg(struct mproc *p, struct
                        return;
                }
 
-               mta_io(&s->io, IO_TLSVERIFIED, s->io.arg);
+               x = SSL_get_peer_certificate(s->io.ssl);
+               if (x) {
+                       log_info("smtp-out: Server certificate verification %s "
+                           "on session %016"PRIx64,
+                           (s->flags & MTA_VERIFIED) ? "succeeded" : "failed",
+                           s->id);
+                       X509_free(x);
+               }
+
+               if (s->use_smtps) {
+                       mta_enter_state(s, MTA_BANNER);
+                       io_set_read(&s->io);
+               }
+               else
+                       mta_enter_state(s, MTA_EHLO);
+
                io_resume(&s->io, IO_PAUSE_IN);
                io_reload(&s->io);
                return;
@@ -1141,7 +1157,6 @@ mta_io(struct io *io, int evt, void *arg
        size_t                   len;
        const char              *error;
        int                      cont;
-       X509                    *x;
 
        log_trace(TRACE_IO, "mta: %p: %s %s", s, io_strevent(evt),
            io_strio(io));
@@ -1170,24 +1185,6 @@ mta_io(struct io *io, int evt, void *arg
                        io_pause(&s->io, IO_PAUSE_IN);
                        break;
                }
-
-       case IO_TLSVERIFIED:
-               x = SSL_get_peer_certificate(s->io.ssl);
-               if (x) {
-                       log_info("smtp-out: Server certificate verification %s "
-                           "on session %016"PRIx64,
-                           (s->flags & MTA_VERIFIED) ? "succeeded" : "failed",
-                           s->id);
-                       X509_free(x);
-               }
-
-               if (s->use_smtps) {
-                       mta_enter_state(s, MTA_BANNER);
-                       io_set_read(io);
-               }
-               else
-                       mta_enter_state(s, MTA_EHLO);
-               break;
 
        case IO_DATAIN:
            nextline:
Index: smtp_session.c
===================================================================
RCS file: /cvs/src/usr.sbin/smtpd/smtp_session.c,v
retrieving revision 1.290
diff -u -p -r1.290 smtp_session.c
--- smtp_session.c      16 Nov 2016 21:30:37 -0000      1.290
+++ smtp_session.c      16 Nov 2016 21:56:26 -0000
@@ -698,6 +698,7 @@ smtp_session_imsg(struct mproc *p, struc
        uint32_t                         msgid;
        int                              status, success, dnserror;
        void                            *ssl_ctx;
+       X509                            *x;
 
        switch (imsg->hdr.type) {
        case IMSG_SMTP_DNS_PTR:
@@ -993,7 +994,26 @@ smtp_session_imsg(struct mproc *p, struc
                        smtp_free(s, "SSL certificate check failed");
                        return;
                }
-               smtp_io(&s->io, IO_TLSVERIFIED, s->io.arg);
+
+               x = SSL_get_peer_certificate(s->io.ssl);
+               if (x) {
+                       log_info("%016"PRIx64" smtp "
+                           "event=client-cert-check address=%s host=%s 
result=\"%s\"",
+                           s->id, ss_to_text(&s->ss), s->hostname,
+                           (s->flags & SF_VERIFIED) ? "success" : "failure");
+                       X509_free(x);
+               }
+
+               if (s->listener->flags & F_SMTPS) {
+                       stat_increment("smtp.smtps", 1);
+                       io_set_write(&s->io);
+                       smtp_send_banner(s);
+               }
+               else {
+                       stat_increment("smtp.tls", 1);
+                       smtp_enter_state(s, STATE_HELO);
+               }
+
                io_resume(&s->io, IO_PAUSE_IN);
                return;
        }
@@ -1238,7 +1258,6 @@ smtp_io(struct io *io, int evt, void *ar
        struct smtp_session    *s = arg;
        char                   *line;
        size_t                  len;
-       X509                   *x;
 
        log_trace(TRACE_IO, "smtp: %p: %s %s", s, io_strevent(evt),
            io_strio(io));
@@ -1266,27 +1285,6 @@ smtp_io(struct io *io, int evt, void *ar
                }
 
                /* No verification required, cascade */
-
-       case IO_TLSVERIFIED:
-               x = SSL_get_peer_certificate(s->io.ssl);
-               if (x) {
-                       log_info("%016"PRIx64" smtp "
-                           "event=client-cert-check address=%s host=%s 
result=\"%s\"",
-                           s->id, ss_to_text(&s->ss), s->hostname,
-                           (s->flags & SF_VERIFIED) ? "success" : "failure");
-                       X509_free(x);
-               }
-
-               if (s->listener->flags & F_SMTPS) {
-                       stat_increment("smtp.smtps", 1);
-                       io_set_write(&s->io);
-                       smtp_send_banner(s);
-               }
-               else {
-                       stat_increment("smtp.tls", 1);
-                       smtp_enter_state(s, STATE_HELO);
-               }
-               break;
 
        case IO_DATAIN:
            nextline:

Reply via email to