Bodo Moeller wrote:
> 
> Dan Kegel <[EMAIL PROTECTED]>:
> 
> > I just realized I have to accept either SSLV2 or SSLV3 (or TLS)
> > connections, so I switched from SSLv3_server_method() to
> > SSLv23_server_method().  But oops, that doesn't support SSL_peek()!
> > What to do?
> 
> Use SSL_accept first.  It will change the SSL object's method
> during the handshake.

Like this?  Or are there unpleasant consequences to this
(e.g. does SSL_accept block, or something silly like that)?
This does seem to work in my one little test.

--- ssl/s23_srvr.c.orig Wed Mar  7 09:58:57 2001
+++ ssl/s23_srvr.c      Wed Mar  7 12:54:02 2001
@@ -63,6 +63,7 @@
 #include <openssl/evp.h>
 #include "ssl_locl.h"
 
+static int ssl23_srvr_peek(SSL *s, char *buf, int len);
 static SSL_METHOD *ssl23_get_server_method(int ver);
 int ssl23_get_client_hello(SSL *s);
 static SSL_METHOD *ssl23_get_server_method(int ver)
@@ -90,6 +91,7 @@
                        (char *)sslv23_base_method(),sizeof(SSL_METHOD));
                SSLv23_server_data.ssl_accept=ssl23_accept;
                SSLv23_server_data.get_ssl_method=ssl23_get_server_method;
+               SSLv23_server_data.ssl_peek=ssl23_srvr_peek;
                init=0;
                }
        return(&SSLv23_server_data);
@@ -573,4 +575,19 @@
 err:
        if (buf != buf_space) OPENSSL_free(buf);
        return(-1);
+       }
+
+/* Only used until ssl23_accept finishes */
+int ssl23_srvr_peek(SSL *s, char *buf, int len)
+       {
+       int ret;
+
+       /* can't call peek until accept decides whether it's v2 or v3 */
+       ret=ssl23_accept(s);
+       if (ret > 0)
+               {
+               /* don't know whether it's v2 or v3, so use the polymorphic call */
+               ret=SSL_peek(s, buf, len);
+               }
+       return(ret);
        }
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    [EMAIL PROTECTED]
Automated List Manager                           [EMAIL PROTECTED]

Reply via email to