summaryrefslogtreecommitdiff
path: root/vio/viossl.c
diff options
context:
space:
mode:
authorunknown <msvensson@pilot.mysql.com>2008-02-07 09:55:49 +0100
committerunknown <msvensson@pilot.mysql.com>2008-02-07 09:55:49 +0100
commit2d88db9555eaed2581127771b5c246f0d975400e (patch)
treeaebf06f4835002e735e559e17101f3e9ef45f409 /vio/viossl.c
parent0c0c3460101862af923e538c61b0a07c638aa6d9 (diff)
parent8d040352d99a95e272e69c622fbe72c89fe425d5 (diff)
downloadmariadb-git-2d88db9555eaed2581127771b5c246f0d975400e.tar.gz
Merge pilot.mysql.com:/data/msvensson/mysql/bug25988/my50-bug25988
into pilot.mysql.com:/data/msvensson/mysql/bug25988/my51-bug25988 vio/viossl.c: Auto merged
Diffstat (limited to 'vio/viossl.c')
-rw-r--r--vio/viossl.c35
1 files changed, 21 insertions, 14 deletions
diff --git a/vio/viossl.c b/vio/viossl.c
index 24bb18b9c68..0651fd8b7a3 100644
--- a/vio/viossl.c
+++ b/vio/viossl.c
@@ -172,20 +172,15 @@ void vio_ssl_delete(Vio *vio)
vio_delete(vio);
}
-int sslaccept(struct st_VioSSLFd *ptr, Vio *vio, long timeout)
-{
- DBUG_ENTER("sslaccept");
- DBUG_RETURN(sslconnect(ptr, vio, timeout));
-}
-
-int sslconnect(struct st_VioSSLFd *ptr, Vio *vio, long timeout)
+static int ssl_do(struct st_VioSSLFd *ptr, Vio *vio, long timeout,
+ int (*connect_accept_func)(SSL*))
{
SSL *ssl;
my_bool unused;
my_bool was_blocking;
- DBUG_ENTER("sslconnect");
+ DBUG_ENTER("ssl_do");
DBUG_PRINT("enter", ("ptr: 0x%lx, sd: %d ctx: 0x%lx",
(long) ptr, vio->sd, (long) ptr->ssl_context));
@@ -204,13 +199,9 @@ int sslconnect(struct st_VioSSLFd *ptr, Vio *vio, long timeout)
SSL_SESSION_set_timeout(SSL_get_session(ssl), timeout);
SSL_set_fd(ssl, vio->sd);
- /*
- SSL_do_handshake will select between SSL_connect
- or SSL_accept depending on server or client side
- */
- if (SSL_do_handshake(ssl) < 1)
+ if (connect_accept_func(ssl) < 1)
{
- DBUG_PRINT("error", ("SSL_do_handshake failure"));
+ DBUG_PRINT("error", ("SSL_connect/accept failure"));
report_errors(ssl);
SSL_free(ssl);
vio_blocking(vio, was_blocking, &unused);
@@ -259,6 +250,20 @@ int sslconnect(struct st_VioSSLFd *ptr, Vio *vio, long timeout)
}
+int sslaccept(struct st_VioSSLFd *ptr, Vio *vio, long timeout)
+{
+ DBUG_ENTER("sslaccept");
+ DBUG_RETURN(ssl_do(ptr, vio, timeout, SSL_accept));
+}
+
+
+int sslconnect(struct st_VioSSLFd *ptr, Vio *vio, long timeout)
+{
+ DBUG_ENTER("sslconnect");
+ DBUG_RETURN(ssl_do(ptr, vio, timeout, SSL_connect));
+}
+
+
int vio_ssl_blocking(Vio *vio __attribute__((unused)),
my_bool set_blocking_mode,
my_bool *old_mode)
@@ -269,4 +274,6 @@ int vio_ssl_blocking(Vio *vio __attribute__((unused)),
return (set_blocking_mode ? 0 : 1);
}
+
+
#endif /* HAVE_OPENSSL */