aboutsummaryrefslogtreecommitdiff
path: root/databases/mysql50-server/files/patch-vio_viossl.c
blob: 7614326aeaaef6627b2ab8aa095089fdf21863bd (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
--- vio/viossl.c.orig	2007-11-15 15:07:13.000000000 +0100
+++ vio/viossl.c	2008-01-21 08:02:45.000000000 +0100
@@ -172,20 +172,14 @@
   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 sslprocess(struct st_VioSSLFd *ptr, Vio *vio, long timeout, my_bool accept)
 {
   SSL *ssl;
   my_bool unused;
   my_bool was_blocking;
 
-  DBUG_ENTER("sslconnect");
+  DBUG_ENTER("sslprocess");
   DBUG_PRINT("enter", ("ptr: 0x%lx, sd: %d  ctx: 0x%lx",
                        (long) ptr, vio->sd, (long) ptr->ssl_context));
 
@@ -201,6 +195,12 @@
   }
   DBUG_PRINT("info", ("ssl: 0x%lx timeout: %ld", (long) ssl, timeout));
   SSL_clear(ssl);
+
+  if (accept)
+	  SSL_set_accept_state(ssl);
+  else
+	  SSL_set_connect_state(ssl);
+
   SSL_SESSION_set_timeout(SSL_get_session(ssl), timeout);
   SSL_set_fd(ssl, vio->sd);
 
@@ -258,6 +258,17 @@
   DBUG_RETURN(0);
 }
 
+int sslaccept(struct st_VioSSLFd *ptr, Vio *vio, long timeout)
+{
+  DBUG_ENTER("sslaccept");
+  DBUG_RETURN(sslprocess(ptr, vio, timeout, TRUE));
+}
+
+int sslconnect(struct st_VioSSLFd *ptr, Vio *vio, long timeout)
+{
+  DBUG_ENTER("sslconnect");
+  DBUG_RETURN(sslprocess(ptr, vio, timeout, FALSE));
+}
 
 int vio_ssl_blocking(Vio *vio __attribute__((unused)),
 		     my_bool set_blocking_mode,