From cc22852e2e916adca848ae0720131d0963bf8a84 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 26 Aug 2001 00:18:20 +0800 Subject: Some warning fixes and some SSL testprograms check-in extra/resolveip.c: Removed warnings about implicit declarations myisam/mi_open.c: Removed warning about unused symbol mysys/my_compress.c: Removed warnings about implicit declaration mysys/string.c: Removed warning about uninitialized variable strings/ctype.c: Removed warning about implicit declaration vio/test-sslclient.c: Testprogram heavy modify vio/test-sslserver.c: Testprogram heavy modify --- vio/test-ssl.c | 131 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 vio/test-ssl.c (limited to 'vio/test-ssl.c') diff --git a/vio/test-ssl.c b/vio/test-ssl.c new file mode 100644 index 00000000000..f47655c99ab --- /dev/null +++ b/vio/test-ssl.c @@ -0,0 +1,131 @@ +#include +#ifdef HAVE_OPENSSL +#include +#include +#include +#include "mysql.h" +#include "errmsg.h" +#include +#ifndef __GNU_LIBRARY__ +#define __GNU_LIBRARY__ // Skip warnings in getopt.h +#endif +#include +#include +#include + +const char *VER="0.1"; + + +#ifndef DBUG_OFF +const char *default_dbug_option="d:t:O,-"; +#endif + +void +fatal_error( const char* r) +{ + perror(r); + exit(0); +} + +void +print_usage() +{ + printf("viossl-test: testing SSL virtual IO. Usage:\n"); + printf("viossl-test server-key server-cert client-key client-cert [CAfile] [CApath]\n"); +} + +int +main( int argc, + char** argv) +{ + char* server_key = 0, *server_cert = 0; + char* client_key = 0, *client_cert = 0; + char* ca_file = 0, *ca_path = 0; + int child_pid,sv[2]; + struct st_VioSSLAcceptorFd* ssl_acceptor=0; + struct st_VioSSLConnectorFd* ssl_connector=0; + Vio* client_vio=0, *server_vio=0; + MY_INIT(argv[0]); + DBUG_PROCESS(argv[0]); + DBUG_PUSH(default_dbug_option); + + if (argc<5) + { + print_usage(); + return 1; + } + + server_key = argv[1]; + server_cert = argv[2]; + client_key = argv[3]; + client_cert = argv[4]; + if (argc>5) + ca_file = argv[5]; + if (argc>6) + ca_path = argv[6]; + printf("Server key/cert : %s/%s\n", server_key, server_cert); + printf("Client key/cert : %s/%s\n", client_key, client_cert); + if (ca_file!=0) + printf("CAfile : %s\n", ca_file); + if (ca_path!=0) + printf("CApath : %s\n", ca_path); + + + if (socketpair(PF_UNIX, SOCK_STREAM, IPPROTO_IP, sv)==-1) + fatal_error("socketpair"); + + ssl_acceptor = new_VioSSLAcceptorFd(server_key, server_cert, ca_file, ca_path); + ssl_connector = new_VioSSLConnectorFd(client_key, client_cert, ca_file, ca_path); + + client_vio = (struct st_vio*)my_malloc(sizeof(struct st_vio),MYF(0)); + client_vio->sd = sv[0]; + client_vio->vioblocking(client_vio,0); + sslconnect(ssl_connector,client_vio); + server_vio = (struct st_vio*)my_malloc(sizeof(struct st_vio),MYF(0)); + server_vio->sd = sv[1]; + server_vio->vioblocking(client_vio,0); + sslaccept(ssl_acceptor,server_vio); + + printf("Socketpair: %d , %d\n", client_vio->sd, server_vio->sd); + + child_pid = fork(); + if (child_pid==-1) { + my_free((gptr)ssl_acceptor,MYF(0)); + my_free((gptr)ssl_connector,MYF(0)); + fatal_error("fork"); + } + if (child_pid==0) { + //child, therefore, client + char xbuf[100]; + int r = client_vio->read(client_vio,xbuf, sizeof(xbuf)); + if (r<=0) { + my_free((gptr)ssl_acceptor,MYF(0)); + my_free((gptr)ssl_connector,MYF(0)); + fatal_error("client:SSL_read"); + } + xbuf[r] = 0; + printf("client:got %s\n", xbuf); + my_free((gptr)client_vio,MYF(0)); + my_free((gptr)ssl_acceptor,MYF(0)); + my_free((gptr)ssl_connector,MYF(0)); + } else { + const char* s = "Huhuhuh"; + int r = server_vio->write(server_vio,(gptr)s, strlen(s)); + if (r<=0) { + my_free((gptr)ssl_acceptor,MYF(0)); + my_free((gptr)ssl_connector,MYF(0)); + fatal_error("server:SSL_write"); + } + my_free((gptr)server_vio,MYF(0)); + my_free((gptr)ssl_acceptor,MYF(0)); + my_free((gptr)ssl_connector,MYF(0)); + } + return 0; +} +#else /* HAVE_OPENSSL */ + +int main() { +return 0; +} +#endif /* HAVE_OPENSSL */ + -- cgit v1.2.1