diff options
author | Richard Levitte <levitte@openssl.org> | 2015-03-31 21:50:21 +0200 |
---|---|---|
committer | Richard Levitte <levitte@openssl.org> | 2015-03-31 21:59:43 +0200 |
commit | 5098c029cef9b81cbb7488ffc74e470bd79d0dac (patch) | |
tree | 985300d3f7531ce5a688c1230ff0cb5498579de8 /ssl | |
parent | b9395187df44e630fbc90dcc530e55e37a920ed4 (diff) |
Remove SSL_TASK, the DECnet Based SSL Engine
This engine is for VMS only, and isn't really part of the core OpenSSL
but rather a side project of its own that just happens to have tagged
along for a long time. The reasons why it has remained within the
OpenSSL source are long lost in history, and there not being any real
reason for it to remain here, it's time for it to move out.
This side project will appear as a project in its own right, the
location of which will be announced later on.
Reviewed-by: Tim Hudson <tjh@openssl.org>
Diffstat (limited to 'ssl')
-rw-r--r-- | ssl/ssl-lib.com | 258 | ||||
-rw-r--r-- | ssl/ssl_task.c | 389 |
2 files changed, 1 insertions, 646 deletions
diff --git a/ssl/ssl-lib.com b/ssl/ssl-lib.com index b160a0aaaa..0df80f03c5 100644 --- a/ssl/ssl-lib.com +++ b/ssl/ssl-lib.com @@ -19,7 +19,6 @@ $! Specify the following as P1 to build just that part or ALL to just $! build everything. $! $! LIBRARY To just compile the [.xxx.EXE.SSL]LIBSSL.OLB Library. -$! SSL_TASK To just compile the [.xxx.EXE.SSL]SSL_TASK.EXE $! $! Specify DEBUG or NODEBUG as P2 to compile with or without debugger $! information. @@ -162,10 +161,6 @@ $! Define The CRYPTO-LIB We Are To Use. $! $ CRYPTO_LIB := SYS$DISK:[-.'ARCHD'.EXE.CRYPTO]SSL_LIBCRYPTO'LIB32'.OLB $! -$! Set up exceptional compilations. -$! -$ CC5_SHOWN = 0 -$! $! Check To See What We Are To Do. $! $ IF (BUILDALL.EQS."TRUE") @@ -174,7 +169,6 @@ $! $! Since Nothing Special Was Specified, Do Everything. $! $ GOSUB LIBRARY -$ GOSUB SSL_TASK $! $! Else... $! @@ -223,8 +217,6 @@ $ LIB_SSL = "s3_meth, s3_srvr, s3_clnt, s3_lib, s3_enc,s3_pkt,s3_both,s3_cbc,"+ "ssl_asn1,ssl_txt,ssl_algs,ssl_conf,"+ - "bio_ssl,ssl_err,kssl,t1_reneg,tls_srp,t1_trce,ssl_utst" $! -$ COMPILEWITH_CC5 = "" -$! $! Tell The User That We Are Compiling The Library. $! $ WRITE SYS$OUTPUT "Building The ",SSL_LIB," Library." @@ -309,251 +301,6 @@ $! $! Time To RETURN. $! $ RETURN -$ SSL_TASK: -$! -$! Check To See If We Have The Proper Libraries. -$! -$ GOSUB LIB_CHECK -$! -$! Check To See If We Have A Linker Option File. -$! -$ GOSUB CHECK_OPT_FILE -$! -$! Check To See If The File We Want To Compile Is Actually There. -$! -$ IF (F$SEARCH("SYS$DISK:[]SSL_TASK.C").EQS."") -$ THEN -$! -$! Tell The User That The File Dosen't Exist. -$! -$ WRITE SYS$OUTPUT "" -$ WRITE SYS$OUTPUT "The File SSL_TASK.C Dosen't Exist." -$ WRITE SYS$OUTPUT "" -$! -$! Exit The Build. -$! -$ EXIT -$! -$! End The SSL_TASK.C File Check. -$! -$ ENDIF -$! -$ COMPILEWITH_CC5 = "" !!! ",ssl_task," -$! -$! Tell The User We Are Creating The SSL_TASK. -$! -$! Tell The User We Are Creating The SSL_TASK. -$! -$ WRITE SYS$OUTPUT "Creating SSL_TASK OSU HTTP SSL Engine." -$! -$! Tell The User What File We Are Compiling. -$! -$ FILE_NAME = "ssl_task" -$ WRITE SYS$OUTPUT " ",FILE_NAME,".c" -$! -$! Compile The File. -$! -$ ON ERROR THEN GOTO SSL_TASK_END -$! -$ FILE_NAME0 = ","+ F$ELEMENT(0,".",FILE_NAME)+ "," -$ IF COMPILEWITH_CC5 - FILE_NAME0 .NES. COMPILEWITH_CC5 -$ THEN -$ if (.not. CC5_SHOWN) -$ then -$ CC5_SHOWN = 1 -$ write sys$output " \Using special rule (5)" -$ x = " "+ CC5 -$ write /symbol sys$output x -$ endif -$ CC5 /OBJECT='OBJ_DIR''FILE_NAME'.OBJ SYS$DISK:[]'FILE_NAME'.C -$ ELSE -$ CC /OBJECT='OBJ_DIR''FILE_NAME'.OBJ SYS$DISK:[]'FILE_NAME'.C -$ ENDIF -$! -$! Link The Program. -$! -$ LINK /'DEBUGGER' /'LINKMAP' /'TRACEBACK' /EXE='EXE_DIR'SSL_TASK.EXE - - 'OBJ_DIR'SSL_TASK.OBJ, - - 'SSL_LIB'/LIBRARY, - - 'CRYPTO_LIB'/LIBRARY - - 'TCPIP_LIB' - - 'ZLIB_LIB' - - ,'OPT_FILE' /OPTIONS -$! -$! Time To Return. -$! -$SSL_TASK_END: -$ RETURN -$! -$! Check For The Link Option FIle. -$! -$ CHECK_OPT_FILE: -$! -$! Check To See If We Need To Make A VAX C Option File. -$! -$ IF (COMPILER.EQS."VAXC") -$ THEN -$! -$! Check To See If We Already Have A VAX C Linker Option File. -$! -$ IF (F$SEARCH(OPT_FILE).EQS."") -$ THEN -$! -$! We Need A VAX C Linker Option File. -$! -$ CREATE 'OPT_FILE' -$DECK -! -! Default System Options File To Link Against -! The Sharable VAX C Runtime Library. -! -SYS$SHARE:VAXCRTL.EXE/SHARE -$EOD -$! -$! End The Option File Check. -$! -$ ENDIF -$! -$! End The VAXC Check. -$! -$ ENDIF -$! -$! Check To See If We Need A GNU C Option File. -$! -$ IF (COMPILER.EQS."GNUC") -$ THEN -$! -$! Check To See If We Already Have A GNU C Linker Option File. -$! -$ IF (F$SEARCH(OPT_FILE).EQS."") -$ THEN -$! -$! We Need A GNU C Linker Option File. -$! -$ CREATE 'OPT_FILE' -$DECK -! -! Default System Options File To Link Against -! The Sharable C Runtime Library. -! -GNU_CC:[000000]GCCLIB/LIBRARY -SYS$SHARE:VAXCRTL/SHARE -$EOD -$! -$! End The Option File Check. -$! -$ ENDIF -$! -$! End The GNU C Check. -$! -$ ENDIF -$! -$! Check To See If We Need A DEC C Option File. -$! -$ IF (COMPILER.EQS."DECC") -$ THEN -$! -$! Check To See If We Already Have A DEC C Linker Option File. -$! -$ IF (F$SEARCH(OPT_FILE).EQS."") -$ THEN -$! -$! Figure Out If We Need A non-VAX Or A VAX Linker Option File. -$! -$ IF (ARCH.EQS."VAX") -$ THEN -$! -$! We Need A DEC C Linker Option File For VAX. -$! -$ CREATE 'OPT_FILE' -$DECK -! -! Default System Options File To Link Against -! The Sharable DEC C Runtime Library. -! -SYS$SHARE:DECC$SHR.EXE/SHARE -$EOD -$! -$! Else... -$! -$ ELSE -$! -$! Create The non-VAX Linker Option File. -$! -$ CREATE 'OPT_FILE' -$DECK -! -! Default System Options File For non-VAX To Link Against -! The Sharable C Runtime Library. -! -SYS$SHARE:CMA$OPEN_LIB_SHR/SHARE -SYS$SHARE:CMA$OPEN_RTL/SHARE -$EOD -$! -$! End The DEC C Option File Check. -$! -$ ENDIF -$! -$! End The Option File Search. -$! -$ ENDIF -$! -$! End The DEC C Check. -$! -$ ENDIF -$! -$! Tell The User What Linker Option File We Are Using. -$! -$ WRITE SYS$OUTPUT "Using Linker Option File ",OPT_FILE,"." -$! -$! Time To RETURN. -$! -$ RETURN -$ LIB_CHECK: -$! -$! Look For The VAX Library LIBSSL.OLB. -$! -$ IF (F$SEARCH(SSL_LIB).EQS."") -$ THEN -$! -$! Tell The User We Can't Find The LIBSSL.OLB Library. -$! -$ WRITE SYS$OUTPUT "" -$ WRITE SYS$OUTPUT "Can't Find The Library ",SSL_LIB,"." -$ WRITE SYS$OUTPUT "We Can't Link Without It." -$ WRITE SYS$OUTPUT "" -$! -$! Since We Can't Link Without It, Exit. -$! -$ EXIT -$! -$! End The LIBSSL.OLB Library Check. -$! -$ ENDIF -$! -$! Look For The Library LIBCRYPTO.OLB. -$! -$ IF (F$SEARCH(CRYPTO_LIB).EQS."") -$ THEN -$! -$! Tell The User We Can't Find The LIBCRYPTO.OLB Library. -$! -$ WRITE SYS$OUTPUT "" -$ WRITE SYS$OUTPUT "Can't Find The Library ",CRYPTO_LIB,"." -$ WRITE SYS$OUTPUT "We Can't Link Without It." -$ WRITE SYS$OUTPUT "" -$! -$! Since We Can't Link Without It, Exit. -$! -$ EXIT -$! -$! End The LIBCRYPTO.OLB Library Check. -$! -$ ENDIF -$! -$! Time To Return. -$! -$ RETURN $! $! Check The User's Options. $! @@ -574,7 +321,7 @@ $ ELSE $! $! Else, Check To See If P1 Has A Valid Argument. $! -$ IF (P1.EQS."LIBRARY").OR.(P1.EQS."SSL_TASK") +$ IF (P1.EQS."LIBRARY") $ THEN $! $! A Valid Argument. @@ -592,7 +339,6 @@ $ WRITE SYS$OUTPUT "The Option ",P1," Is Invalid. The Valid Options Are:" $ WRITE SYS$OUTPUT "" $ WRITE SYS$OUTPUT " ALL : Just Build Everything." $ WRITE SYS$OUTPUT " LIBRARY : To Compile Just The [.xxx.EXE.SSL]LIBSSL.OLB Library." -$ WRITE SYS$OUTPUT " SSL_TASK : To Compile Just The [.xxx.EXE.SSL]SSL_TASK.EXE Program." $ WRITE SYS$OUTPUT "" $ WRITE SYS$OUTPUT " Where 'xxx' Stands For:" $ WRITE SYS$OUTPUT "" @@ -1039,10 +785,8 @@ $ CC = CC + " /DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS $ IF COMPILER .EQS. "DECC" $ THEN $ CC4 = CC - CCDISABLEWARNINGS + CC4DISABLEWARNINGS -$ CC5 = CC3 - CCDISABLEWARNINGS + CC4DISABLEWARNINGS $ ELSE $ CC4 = CC -$ CC5 = CC3 $ ENDIF $! $! Show user the result diff --git a/ssl/ssl_task.c b/ssl/ssl_task.c deleted file mode 100644 index d5ca89feb8..0000000000 --- a/ssl/ssl_task.c +++ /dev/null @@ -1,389 +0,0 @@ -/* ssl/ssl_task.c */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -/* VMS */ -/*- - * DECnet object for servicing SSL. We accept the inbound and speak a - * simple protocol for multiplexing the 2 data streams (application and - * ssl data) over this logical link. - * - * Logical names: - * SSL_CIPHER Defines a list of cipher specifications the server - * will support in order of preference. - * SSL_SERVER_CERTIFICATE - * Points to PEM (privacy enhanced mail) file that - * contains the server certificate and private password. - * SYS$NET Logical created by netserver.exe as hook for completing - * DECnet logical link. - * - * Each NSP message sent over the DECnet link has the following structure: - * struct rpc_msg { - * char channel; - * char function; - * short length; - * char data[MAX_DATA]; - * } msg; - * - * The channel field designates the virtual data stream this message applies - * to and is one of: - * A - Application data (payload). - * R - Remote client connection that initiated the SSL connection. Encrypted - * data is sent over this connection. - * G - General data, reserved for future use. - * - * The data streams are half-duplex read/write and have following functions: - * G - Get, requests that up to msg.length bytes of data be returned. The - * data is returned in the next 'C' function response that matches the - * requesting channel. - * P - Put, requests that the first msg.length bytes of msg.data be appended - * to the designated stream. - * C - Confirms a get or put. Every get and put will get a confirm response, - * you cannot initiate another function on a channel until the previous - * operation has been confirmed. - * - * The 2 channels may interleave their operations, for example: - * Server msg Client msg - * A, Get, 4092 ----> - * <---- R, get, 4092 - * R, Confirm, {hello} ----> - * <---- R, put, {srv hello} - * R, Confirm, 0 ----> - * . (SSL handshake completed) - * . (read first app data). - * <---- A, confirm, {http data} - * A, Put, {http data} ----> - * <---- A, confirm, 0 - * - * The length field is not permitted to be larger that 4092 bytes. - * - * Author: Dave Jones - * Date: 22-JUL-1996 - */ -#include <stdlib.h> -#include <stdio.h> -#include <iodef.h> /* VMS IO$_ definitions */ -#include <descrip.h> /* VMS string descriptors */ -extern int SYS$QIOW(), SYS$ASSIGN(); -int LIB$INIT_TIMER(), LIB$SHOW_TIMER(); - -#include <string.h> /* from ssltest.c */ -#include <errno.h> - -#include "e_os.h" - -#include <openssl/buffer.h> -#include <openssl/x509.h> -#include <openssl/err.h> -#include "ssl_locl.h" - -int verify_callback(int ok, X509 *xs, X509 *xi, int depth, - int error); -BIO *bio_err = NULL; -BIO *bio_stdout = NULL; -BIO_METHOD *BIO_s_rtcp(); - -static char *cipher = NULL; -int verbose = 1; -#ifdef FIONBIO -static int s_nbio = 0; -#endif -#define TEST_SERVER_CERT "SSL_SERVER_CERTIFICATE" -/*************************************************************************/ -/* Should have member alignment inhibited */ -struct rpc_msg { - /* 'A'-app data. 'R'-remote client 'G'-global */ - char channel; - /* 'G'-get, 'P'-put, 'C'-confirm, 'X'-close */ - char function; - /* Amount of data returned or max to return */ - unsigned short int length; - /* variable data */ - char data[4092]; -}; -#define RPC_HDR_SIZE (sizeof(struct rpc_msg) - 4092) - -static $DESCRIPTOR(sysnet, "SYS$NET"); -typedef unsigned short io_channel; - -struct io_status { - unsigned short status; - unsigned short count; - unsigned long stsval; -}; -int doit(io_channel chan, SSL_CTX *s_ctx); -/*****************************************************************************/ -/* - * Decnet I/O routines. - */ -static int get(io_channel chan, char *buffer, int maxlen, int *length) -{ - int status; - struct io_status iosb; - status = SYS$QIOW(0, chan, IO$_READVBLK, &iosb, 0, 0, - buffer, maxlen, 0, 0, 0, 0); - if ((status & 1) == 1) - status = iosb.status; - if ((status & 1) == 1) - *length = iosb.count; - return status; -} - -static int put(io_channel chan, char *buffer, int length) -{ - int status; - struct io_status iosb; - status = SYS$QIOW(0, chan, IO$_WRITEVBLK, &iosb, 0, 0, - buffer, length, 0, 0, 0, 0); - if ((status & 1) == 1) - status = iosb.status; - return status; -} - -/***************************************************************************/ -/* - * Handle operations on the 'G' channel. - */ -static int general_request(io_channel chan, struct rpc_msg *msg, int length) -{ - return 48; -} - -/***************************************************************************/ -int main(int argc, char **argv) -{ - int status, length; - io_channel chan; - struct rpc_msg msg; - - char *CApath = NULL, *CAfile = NULL; - int badop = 0; - int ret = 1; - int client_auth = 0; - int server_auth = 0; - SSL_CTX *s_ctx = NULL; - /* - * Confirm logical link with initiating client. - */ - LIB$INIT_TIMER(); - status = SYS$ASSIGN(&sysnet, &chan, 0, 0, 0); - printf("status of assign to SYS$NET: %d\n", status); - /* - * Initialize standard out and error files. - */ - if (bio_err == NULL) - if ((bio_err = BIO_new(BIO_s_file())) != NULL) - BIO_set_fp(bio_err, stderr, BIO_NOCLOSE); - if (bio_stdout == NULL) - if ((bio_stdout = BIO_new(BIO_s_file())) != NULL) - BIO_set_fp(bio_stdout, stdout, BIO_NOCLOSE); - /* - * get the preferred cipher list and other initialization - */ - if (cipher == NULL) - cipher = getenv("SSL_CIPHER"); - printf("cipher list: %s\n", cipher ? cipher : "{undefined}"); - - SSL_load_error_strings(); - OpenSSL_add_all_algorithms(); - - s_ctx = SSL_CTX_new(SSLv23_server_method()); - - if (s_ctx == NULL) - goto end; - - SSL_CTX_use_certificate_file(s_ctx, TEST_SERVER_CERT, SSL_FILETYPE_PEM); - SSL_CTX_use_RSAPrivateKey_file(s_ctx, TEST_SERVER_CERT, SSL_FILETYPE_PEM); - printf("Loaded server certificate: '%s'\n", TEST_SERVER_CERT); - - /* - * Take commands from client until bad status. - */ - LIB$SHOW_TIMER(); - status = doit(chan, s_ctx); - LIB$SHOW_TIMER(); - /* - * do final cleanup and exit. - */ - end: - if (s_ctx != NULL) - SSL_CTX_free(s_ctx); - LIB$SHOW_TIMER(); - return 1; -} - -int doit(io_channel chan, SSL_CTX *s_ctx) -{ - int status, length, link_state; - struct rpc_msg msg; - - SSL *s_ssl = NULL; - BIO *c_to_s = NULL; - BIO *s_to_c = NULL; - BIO *c_bio = NULL; - BIO *s_bio = NULL; - int i; - int done = 0; - - s_ssl = SSL_new(s_ctx); - if (s_ssl == NULL) - goto err; - - c_to_s = BIO_new(BIO_s_rtcp()); - s_to_c = BIO_new(BIO_s_rtcp()); - if ((s_to_c == NULL) || (c_to_s == NULL)) - goto err; -/*- original, DRM 24-SEP-1997 - BIO_set_fd ( c_to_s, "", chan ); - BIO_set_fd ( s_to_c, "", chan ); -*/ - BIO_set_fd(c_to_s, 0, chan); - BIO_set_fd(s_to_c, 0, chan); - - c_bio = BIO_new(BIO_f_ssl()); - s_bio = BIO_new(BIO_f_ssl()); - if ((c_bio == NULL) || (s_bio == NULL)) - goto err; - - SSL_set_accept_state(s_ssl); - SSL_set_bio(s_ssl, c_to_s, s_to_c); - BIO_set_ssl(s_bio, s_ssl, BIO_CLOSE); - - /* We can always do writes */ - printf("Begin doit main loop\n"); - /* - * Link states: 0-idle, 1-read pending, 2-write pending, 3-closed. - */ - for (link_state = 0; link_state < 3;) { - /* - * Wait for remote end to request data action on A channel. - */ - while (link_state == 0) { - status = get(chan, (char *)&msg, sizeof(msg), &length); - if ((status & 1) == 0) { - printf("Error in main loop get: %d\n", status); - link_state = 3; - break; - } - if (length < RPC_HDR_SIZE) { - printf("Error in main loop get size: %d\n", length); - break; - link_state = 3; - } - if (msg.channel != 'A') { - printf("Error in main loop, unexpected channel: %c\n", - msg.channel); - break; - link_state = 3; - } - if (msg.function == 'G') { - link_state = 1; - } else if (msg.function == 'P') { - link_state = 2; /* write pending */ - } else if (msg.function == 'X') { - link_state = 3; - } else { - link_state = 3; - } - } - if (link_state == 1) { - i = BIO_read(s_bio, msg.data, msg.length); - if (i < 0) - link_state = 3; - else { - msg.channel = 'A'; - msg.function = 'C'; /* confirm */ - msg.length = i; - status = put(chan, (char *)&msg, i + RPC_HDR_SIZE); - if ((status & 1) == 0) - break; - link_state = 0; - } - } else if (link_state == 2) { - i = BIO_write(s_bio, msg.data, msg.length); - if (i < 0) - link_state = 3; - else { - msg.channel = 'A'; - msg.function = 'C'; /* confirm */ - msg.length = 0; - status = put(chan, (char *)&msg, RPC_HDR_SIZE); - if ((status & 1) == 0) - break; - link_state = 0; - } - } - } - fprintf(stdout, "DONE\n"); - err: - /* - * We have to set the BIO's to NULL otherwise they will be free()ed - * twice. Once when th s_ssl is SSL_free()ed and again when c_ssl is - * SSL_free()ed. This is a hack required because s_ssl and c_ssl are - * sharing the same BIO structure and SSL_set_bio() and SSL_free() - * automatically BIO_free non NULL entries. You should not normally do - * this or be required to do this - */ - s_ssl->rbio = NULL; - s_ssl->wbio = NULL; - - BIO_free(c_to_s); - BIO_free(s_to_c); - BIO_free(c_bio); - BIO_free(s_bio); - return (0); -} |