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]