The EVP_*Init_ex() functions take one extra argument. Let's default
[openssl.git] / apps / s_client.c
index bdb94dab44f06d1d853de19c409f1619c7732790..2c9ae354627f71c9ad1d3d89b616e72b574bddca 100644 (file)
@@ -60,6 +60,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <openssl/e_os2.h>
 #ifdef OPENSSL_NO_STDIO
 #define APPS_WIN16
 #endif
@@ -68,7 +69,7 @@
    recursive header file inclusion, resulting in the compiler complaining
    that u_int isn't defined, but only if _POSIX_C_SOURCE is defined, which
    is needed to have fileno() declared correctly...  So let's define u_int */
-#if defined(VMS) && defined(__DECC) && !defined(__U_INT)
+#if defined(OPENSSL_SYS_VMS_DECC) && !defined(__U_INT)
 #define __U_INT
 typedef unsigned int u_int;
 #endif
@@ -79,15 +80,15 @@ typedef unsigned int u_int;
 #include <openssl/ssl.h>
 #include <openssl/err.h>
 #include <openssl/pem.h>
-#include <openssl/engine.h>
+#include <openssl/rand.h>
 #include "s_apps.h"
 
-#ifdef WINDOWS
+#ifdef OPENSSL_SYS_WINDOWS
 #include <conio.h>
 #endif
 
 
-#if (defined(VMS) && __VMS_VER < 70000000)
+#if (defined(OPENSSL_SYS_VMS) && __VMS_VER < 70000000)
 /* FIONBIO used as a switch to enable ioctl, and that isn't in VMS < 7.0 */
 #undef FIONBIO
 #endif
@@ -165,6 +166,7 @@ int MAIN(int argc, char **argv)
        {
        int off=0;
        SSL *con=NULL,*con2=NULL;
+       X509_STORE *store = NULL;
        int s,k,width,state=0;
        char *cbuf=NULL,*sbuf=NULL;
        int cbuf_len,cbuf_off;
@@ -180,13 +182,13 @@ int MAIN(int argc, char **argv)
        int write_tty,read_tty,write_ssl,read_ssl,tty_on,ssl_pending;
        SSL_CTX *ctx=NULL;
        int ret=1,in_init=1,i,nbio_test=0;
-       int prexit = 0;
+       int prexit = 0, vflags = 0;
        SSL_METHOD *meth=NULL;
        BIO *sbio;
        char *inrand=NULL;
        char *engine_id=NULL;
        ENGINE *e=NULL;
-#ifdef WINDOWS
+#ifdef OPENSSL_SYS_WINDOWS
        struct timeval tv;
 #endif
 
@@ -254,6 +256,10 @@ int MAIN(int argc, char **argv)
                        if (--argc < 1) goto bad;
                        cert_file= *(++argv);
                        }
+               else if (strcmp(*argv,"-crl_check") == 0)
+                       vflags |= X509_V_FLAG_CRL_CHECK;
+               else if (strcmp(*argv,"-crl_check_all") == 0)
+                       vflags |= X509_V_FLAG_CRL_CHECK|X509_V_FLAG_CRL_CHECK_ALL;
                else if (strcmp(*argv,"-prexit") == 0)
                        prexit=1;
                else if (strcmp(*argv,"-crlf") == 0)
@@ -376,28 +382,7 @@ bad:
        OpenSSL_add_ssl_algorithms();
        SSL_load_error_strings();
 
-       if (engine_id != NULL)
-               {
-               if((e = ENGINE_by_id(engine_id)) == NULL)
-                       {
-                       BIO_printf(bio_err,"invalid engine\n");
-                       ERR_print_errors(bio_err);
-                       goto end;
-                       }
-               if (c_debug)
-                       {
-                       ENGINE_ctrl(e, ENGINE_CTRL_SET_LOGSTREAM,
-                               0, bio_err, 0);
-                       }
-               if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
-                       {
-                       BIO_printf(bio_err,"can't use that engine\n");
-                       ERR_print_errors(bio_err);
-                       goto end;
-                       }
-               BIO_printf(bio_err,"engine \"%s\" set.\n", engine_id);
-               ENGINE_free(e);
-               }
+        e = setup_engine(bio_err, engine_id, 1);
 
        ctx=SSL_CTX_new(meth);
        if (ctx == NULL)
@@ -435,6 +420,8 @@ bad:
                /* goto end; */
                }
 
+       store = SSL_CTX_get_cert_store(ctx);
+       X509_STORE_set_flags(store, vflags);
 
        con=SSL_new(ctx);
 #ifndef OPENSSL_NO_KRB5
@@ -537,7 +524,7 @@ re_start:
 
                if (!ssl_pending)
                        {
-#ifndef WINDOWS
+#ifndef OPENSSL_SYS_WINDOWS
                        if (tty_on)
                                {
                                if (read_tty)  FD_SET(fileno(stdin),&readfds);
@@ -564,7 +551,7 @@ re_start:
                         * will choke the compiler: if you do have a cast then
                         * you can either go for (int *) or (void *).
                         */
-#ifdef WINDOWS
+#ifdef OPENSSL_SYS_WINDOWS
                        /* Under Windows we make the assumption that we can
                         * always write to the tty: therefore if we need to
                         * write to the tty we just fall through. Otherwise
@@ -663,7 +650,7 @@ re_start:
                                goto shut;
                                }
                        }
-#ifdef WINDOWS
+#ifdef OPENSSL_SYS_WINDOWS
                /* Assume Windows can always write */
                else if (!ssl_pending && write_tty)
 #else
@@ -744,7 +731,7 @@ printf("read=%d pending=%d peek=%d\n",k,SSL_pending(con),SSL_peek(con,zbuf,10240
                                }
                        }
 
-#ifdef WINDOWS
+#ifdef OPENSSL_SYS_WINDOWS
                else if ((_kbhit()) || (WAIT_OBJECT_0 == WaitForSingleObject(GetStdHandle(STD_INPUT_HANDLE), 0)))
 #else
                else if (FD_ISSET(fileno(stdin),&readfds))
@@ -816,6 +803,7 @@ end:
                BIO_free(bio_c_out);
                bio_c_out=NULL;
                }
+       apps_shutdown();
        EXIT(ret);
        }
 
@@ -937,5 +925,7 @@ static void print_stuff(BIO *bio, SSL *s, int full)
        BIO_printf(bio,"---\n");
        if (peer != NULL)
                X509_free(peer);
+       /* flush, or debugging output gets mixed with http response */
+       BIO_flush(bio);
        }