Hi,

The relayd used the CHECK_TIMEOUT for connect and ssl handshake.
This is 200 milliseconds and too short.  Instead use the 600 seconds
session timeout that is used for accepted sessions everywhere else.

While there, make flag handling in relay_ssl_transaction() consistent
to the other functions.

ok?

bluhm


Index: usr.sbin/relayd/relay.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/usr.sbin/relayd/relay.c,v
retrieving revision 1.138
diff -u -p -r1.138 relay.c
--- usr.sbin/relayd/relay.c     20 May 2011 09:43:53 -0000      1.138
+++ usr.sbin/relayd/relay.c     1 Sep 2011 07:58:40 -0000
@@ -2279,7 +2279,8 @@ relay_connect(struct rsession *con)
 
        if (errno == EINPROGRESS)
                event_again(&con->se_ev, con->se_out.s, EV_WRITE|EV_TIMEOUT,
-                   relay_connected, &con->se_tv_start, &env->sc_timeout, con);
+                   relay_connected, &con->se_tv_start, &rlay->rl_conf.timeout, 
+                   con);
        else
                relay_connected(con->se_out.s, EV_WRITE, con);
 
@@ -2625,7 +2626,7 @@ relay_ssl_transaction(struct rsession *c
        SSL                     *ssl;
        const SSL_METHOD        *method;
        void                    (*cb)(int, short, void *);
-       u_int                    flags = EV_TIMEOUT;
+       u_int                    flag;
 
        ssl = SSL_new(rlay->rl_ssl_ctx);
        if (ssl == NULL)
@@ -2634,11 +2635,11 @@ relay_ssl_transaction(struct rsession *c
        if (cre->dir == RELAY_DIR_REQUEST) {
                cb = relay_ssl_accept;
                method = SSLv23_server_method();
-               flags |= EV_READ;
+               flag = EV_READ;
        } else {
                cb = relay_ssl_connect;
                method = SSLv23_client_method();
-               flags |= EV_WRITE;
+               flag = EV_WRITE;
        }
 
        if (!SSL_set_ssl_method(ssl, method))
@@ -2653,8 +2654,10 @@ relay_ssl_transaction(struct rsession *c
 
        cre->ssl = ssl;
 
-       event_again(&con->se_ev, cre->s, EV_TIMEOUT|flags,
-           cb, &con->se_tv_start, &env->sc_timeout, con);
+       DPRINTF("%s: session %d: scheduling on %s", __func__, con->se_id,
+           (flag == EV_READ) ? "EV_READ" : "EV_WRITE");
+       event_again(&con->se_ev, cre->s, EV_TIMEOUT|flag, cb,
+           &con->se_tv_start, &rlay->rl_conf.timeout, con);
        return;
 
  err:
@@ -2721,7 +2724,7 @@ retry:
        DPRINTF("%s: session %d: scheduling on %s", __func__, con->se_id,
            (retry_flag == EV_READ) ? "EV_READ" : "EV_WRITE");
        event_again(&con->se_ev, fd, EV_TIMEOUT|retry_flag, relay_ssl_accept,
-           &con->se_tv_start, &env->sc_timeout, con);
+           &con->se_tv_start, &rlay->rl_conf.timeout, con);
 }
 
 void
@@ -2780,7 +2783,7 @@ retry:
        DPRINTF("%s: session %d: scheduling on %s", __func__, con->se_id,
            (retry_flag == EV_READ) ? "EV_READ" : "EV_WRITE");
        event_again(&con->se_ev, fd, EV_TIMEOUT|retry_flag, relay_ssl_connect,
-           &con->se_tv_start, &env->sc_timeout, con);
+           &con->se_tv_start, &rlay->rl_conf.timeout, con);
 }
 
 void

Reply via email to