Home | History | Annotate | Line # | Download | only in apps
s_client.c revision 1.14.2.1
      1 /*
      2  * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
      3  *
      4  * Licensed under the OpenSSL license (the "License").  You may not use
      5  * this file except in compliance with the License.  You can obtain a copy
      6  * in the file LICENSE in the source distribution or at
      7  * https://www.openssl.org/source/license.html
      8  */
      9 
     10 /* ====================================================================
     11  * Copyright 2005 Nokia. All rights reserved.
     12  *
     13  * The portions of the attached software ("Contribution") is developed by
     14  * Nokia Corporation and is licensed pursuant to the OpenSSL open source
     15  * license.
     16  *
     17  * The Contribution, originally written by Mika Kousa and Pasi Eronen of
     18  * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites
     19  * support (see RFC 4279) to OpenSSL.
     20  *
     21  * No patent licenses or other rights except those expressly stated in
     22  * the OpenSSL open source license shall be deemed granted or received
     23  * expressly, by implication, estoppel, or otherwise.
     24  *
     25  * No assurances are provided by Nokia that the Contribution does not
     26  * infringe the patent or other intellectual property rights of any third
     27  * party or that the license provides you with all the necessary rights
     28  * to make use of the Contribution.
     29  *
     30  * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN
     31  * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA
     32  * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY
     33  * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR
     34  * OTHERWISE.
     35  */
     36 
     37 #include <ctype.h>
     38 #include <stdio.h>
     39 #include <stdlib.h>
     40 #include <string.h>
     41 #include <errno.h>
     42 #include <openssl/e_os2.h>
     43 
     44 #ifndef OPENSSL_NO_SOCK
     45 
     46 /*
     47  * With IPv6, it looks like Digital has mixed up the proper order of
     48  * recursive header file inclusion, resulting in the compiler complaining
     49  * that u_int isn't defined, but only if _POSIX_C_SOURCE is defined, which is
     50  * needed to have fileno() declared correctly...  So let's define u_int
     51  */
     52 #if defined(OPENSSL_SYS_VMS_DECC) && !defined(__U_INT)
     53 # define __U_INT
     54 typedef unsigned int u_int;
     55 #endif
     56 
     57 #define USE_SOCKETS
     58 #include "apps.h"
     59 #include <openssl/x509.h>
     60 #include <openssl/ssl.h>
     61 #include <openssl/err.h>
     62 #include <openssl/pem.h>
     63 #include <openssl/rand.h>
     64 #include <openssl/ocsp.h>
     65 #include <openssl/bn.h>
     66 #include <openssl/async.h>
     67 #ifndef OPENSSL_NO_SRP
     68 # include <openssl/srp.h>
     69 #endif
     70 #ifndef OPENSSL_NO_CT
     71 # include <openssl/ct.h>
     72 #endif
     73 #include "s_apps.h"
     74 #include "timeouts.h"
     75 
     76 #if defined(__has_feature)
     77 # if __has_feature(memory_sanitizer)
     78 #  include <sanitizer/msan_interface.h>
     79 # endif
     80 #endif
     81 
     82 #undef BUFSIZZ
     83 #define BUFSIZZ 1024*8
     84 #define S_CLIENT_IRC_READ_TIMEOUT 8
     85 
     86 static char *prog;
     87 static int c_debug = 0;
     88 static int c_showcerts = 0;
     89 static char *keymatexportlabel = NULL;
     90 static int keymatexportlen = 20;
     91 static BIO *bio_c_out = NULL;
     92 static int c_quiet = 0;
     93 
     94 static void print_stuff(BIO *berr, SSL *con, int full);
     95 #ifndef OPENSSL_NO_OCSP
     96 static int ocsp_resp_cb(SSL *s, void *arg);
     97 #endif
     98 
     99 static int saved_errno;
    100 
    101 static void save_errno(void)
    102 {
    103     saved_errno = errno;
    104     errno = 0;
    105 }
    106 
    107 static int restore_errno(void)
    108 {
    109     int ret = errno;
    110     errno = saved_errno;
    111     return ret;
    112 }
    113 
    114 static void do_ssl_shutdown(SSL *ssl)
    115 {
    116     int ret;
    117 
    118     do {
    119         /* We only do unidirectional shutdown */
    120         ret = SSL_shutdown(ssl);
    121         if (ret < 0) {
    122             switch (SSL_get_error(ssl, ret)) {
    123             case SSL_ERROR_WANT_READ:
    124             case SSL_ERROR_WANT_WRITE:
    125             case SSL_ERROR_WANT_ASYNC:
    126             case SSL_ERROR_WANT_ASYNC_JOB:
    127                 /* We just do busy waiting. Nothing clever */
    128                 continue;
    129             }
    130             ret = 0;
    131         }
    132     } while (ret < 0);
    133 }
    134 
    135 #ifndef OPENSSL_NO_PSK
    136 /* Default PSK identity and key */
    137 static char *psk_identity = "Client_identity";
    138 /*
    139  * char *psk_key=NULL; by default PSK is not used
    140  */
    141 
    142 static unsigned int psk_client_cb(SSL *ssl, const char *hint, char *identity,
    143                                   unsigned int max_identity_len,
    144                                   unsigned char *psk,
    145                                   unsigned int max_psk_len)
    146 {
    147     int ret;
    148     long key_len;
    149     unsigned char *key;
    150 
    151     if (c_debug)
    152         BIO_printf(bio_c_out, "psk_client_cb\n");
    153     if (!hint) {
    154         /* no ServerKeyExchange message */
    155         if (c_debug)
    156             BIO_printf(bio_c_out,
    157                        "NULL received PSK identity hint, continuing anyway\n");
    158     } else if (c_debug)
    159         BIO_printf(bio_c_out, "Received PSK identity hint '%s'\n", hint);
    160 
    161     /*
    162      * lookup PSK identity and PSK key based on the given identity hint here
    163      */
    164     ret = BIO_snprintf(identity, max_identity_len, "%s", psk_identity);
    165     if (ret < 0 || (unsigned int)ret > max_identity_len)
    166         goto out_err;
    167     if (c_debug)
    168         BIO_printf(bio_c_out, "created identity '%s' len=%d\n", identity,
    169                    ret);
    170 
    171     /* convert the PSK key to binary */
    172     key = OPENSSL_hexstr2buf(psk_key, &key_len);
    173     if (key == NULL) {
    174         BIO_printf(bio_err, "Could not convert PSK key '%s' to buffer\n",
    175                    psk_key);
    176         return 0;
    177     }
    178     if (max_psk_len > INT_MAX || key_len > (long)max_psk_len) {
    179         BIO_printf(bio_err,
    180                    "psk buffer of callback is too small (%d) for key (%ld)\n",
    181                    max_psk_len, key_len);
    182         OPENSSL_free(key);
    183         return 0;
    184     }
    185 
    186     memcpy(psk, key, key_len);
    187     OPENSSL_free(key);
    188 
    189     if (c_debug)
    190         BIO_printf(bio_c_out, "created PSK len=%ld\n", key_len);
    191 
    192     return key_len;
    193  out_err:
    194     if (c_debug)
    195         BIO_printf(bio_err, "Error in PSK client callback\n");
    196     return 0;
    197 }
    198 #endif
    199 
    200 /* This is a context that we pass to callbacks */
    201 typedef struct tlsextctx_st {
    202     BIO *biodebug;
    203     int ack;
    204 } tlsextctx;
    205 
    206 static int ssl_servername_cb(SSL *s, int *ad, void *arg)
    207 {
    208     tlsextctx *p = (tlsextctx *) arg;
    209     const char *hn = SSL_get_servername(s, TLSEXT_NAMETYPE_host_name);
    210     if (SSL_get_servername_type(s) != -1)
    211         p->ack = !SSL_session_reused(s) && hn != NULL;
    212     else
    213         BIO_printf(bio_err, "Can't use SSL_get_servername\n");
    214 
    215     return SSL_TLSEXT_ERR_OK;
    216 }
    217 
    218 #ifndef OPENSSL_NO_SRP
    219 
    220 /* This is a context that we pass to all callbacks */
    221 typedef struct srp_arg_st {
    222     char *srppassin;
    223     char *srplogin;
    224     int msg;                    /* copy from c_msg */
    225     int debug;                  /* copy from c_debug */
    226     int amp;                    /* allow more groups */
    227     int strength;               /* minimal size for N */
    228 } SRP_ARG;
    229 
    230 # define SRP_NUMBER_ITERATIONS_FOR_PRIME 64
    231 
    232 static int srp_Verify_N_and_g(const BIGNUM *N, const BIGNUM *g)
    233 {
    234     BN_CTX *bn_ctx = BN_CTX_new();
    235     BIGNUM *p = BN_new();
    236     BIGNUM *r = BN_new();
    237     int ret =
    238         g != NULL && N != NULL && bn_ctx != NULL && BN_is_odd(N) &&
    239         BN_is_prime_ex(N, SRP_NUMBER_ITERATIONS_FOR_PRIME, bn_ctx, NULL) == 1 &&
    240         p != NULL && BN_rshift1(p, N) &&
    241         /* p = (N-1)/2 */
    242         BN_is_prime_ex(p, SRP_NUMBER_ITERATIONS_FOR_PRIME, bn_ctx, NULL) == 1 &&
    243         r != NULL &&
    244         /* verify g^((N-1)/2) == -1 (mod N) */
    245         BN_mod_exp(r, g, p, N, bn_ctx) &&
    246         BN_add_word(r, 1) && BN_cmp(r, N) == 0;
    247 
    248     BN_free(r);
    249     BN_free(p);
    250     BN_CTX_free(bn_ctx);
    251     return ret;
    252 }
    253 
    254 /*-
    255  * This callback is used here for two purposes:
    256  * - extended debugging
    257  * - making some primality tests for unknown groups
    258  * The callback is only called for a non default group.
    259  *
    260  * An application does not need the call back at all if
    261  * only the standard groups are used.  In real life situations,
    262  * client and server already share well known groups,
    263  * thus there is no need to verify them.
    264  * Furthermore, in case that a server actually proposes a group that
    265  * is not one of those defined in RFC 5054, it is more appropriate
    266  * to add the group to a static list and then compare since
    267  * primality tests are rather cpu consuming.
    268  */
    269 
    270 static int ssl_srp_verify_param_cb(SSL *s, void *arg)
    271 {
    272     SRP_ARG *srp_arg = (SRP_ARG *)arg;
    273     BIGNUM *N = NULL, *g = NULL;
    274 
    275     if (((N = SSL_get_srp_N(s)) == NULL) || ((g = SSL_get_srp_g(s)) == NULL))
    276         return 0;
    277     if (srp_arg->debug || srp_arg->msg || srp_arg->amp == 1) {
    278         BIO_printf(bio_err, "SRP parameters:\n");
    279         BIO_printf(bio_err, "\tN=");
    280         BN_print(bio_err, N);
    281         BIO_printf(bio_err, "\n\tg=");
    282         BN_print(bio_err, g);
    283         BIO_printf(bio_err, "\n");
    284     }
    285 
    286     if (SRP_check_known_gN_param(g, N))
    287         return 1;
    288 
    289     if (srp_arg->amp == 1) {
    290         if (srp_arg->debug)
    291             BIO_printf(bio_err,
    292                        "SRP param N and g are not known params, going to check deeper.\n");
    293 
    294         /*
    295          * The srp_moregroups is a real debugging feature. Implementors
    296          * should rather add the value to the known ones. The minimal size
    297          * has already been tested.
    298          */
    299         if (BN_num_bits(g) <= BN_BITS && srp_Verify_N_and_g(N, g))
    300             return 1;
    301     }
    302     BIO_printf(bio_err, "SRP param N and g rejected.\n");
    303     return 0;
    304 }
    305 
    306 # define PWD_STRLEN 1024
    307 
    308 static char *ssl_give_srp_client_pwd_cb(SSL *s, void *arg)
    309 {
    310     SRP_ARG *srp_arg = (SRP_ARG *)arg;
    311     char *pass = app_malloc(PWD_STRLEN + 1, "SRP password buffer");
    312     PW_CB_DATA cb_tmp;
    313     int l;
    314 
    315     cb_tmp.password = (char *)srp_arg->srppassin;
    316     cb_tmp.prompt_info = "SRP user";
    317     if ((l = password_callback(pass, PWD_STRLEN, 0, &cb_tmp)) < 0) {
    318         BIO_printf(bio_err, "Can't read Password\n");
    319         OPENSSL_free(pass);
    320         return NULL;
    321     }
    322     *(pass + l) = '\0';
    323 
    324     return pass;
    325 }
    326 
    327 #endif
    328 
    329 static char *srtp_profiles = NULL;
    330 
    331 #ifndef OPENSSL_NO_NEXTPROTONEG
    332 /* This the context that we pass to next_proto_cb */
    333 typedef struct tlsextnextprotoctx_st {
    334     unsigned char *data;
    335     size_t len;
    336     int status;
    337 } tlsextnextprotoctx;
    338 
    339 static tlsextnextprotoctx next_proto;
    340 
    341 static int next_proto_cb(SSL *s, unsigned char **out, unsigned char *outlen,
    342                          const unsigned char *in, unsigned int inlen,
    343                          void *arg)
    344 {
    345     tlsextnextprotoctx *ctx = arg;
    346 
    347     if (!c_quiet) {
    348         /* We can assume that |in| is syntactically valid. */
    349         unsigned i;
    350         BIO_printf(bio_c_out, "Protocols advertised by server: ");
    351         for (i = 0; i < inlen;) {
    352             if (i)
    353                 BIO_write(bio_c_out, ", ", 2);
    354             BIO_write(bio_c_out, &in[i + 1], in[i]);
    355             i += in[i] + 1;
    356         }
    357         BIO_write(bio_c_out, "\n", 1);
    358     }
    359 
    360     ctx->status =
    361         SSL_select_next_proto(out, outlen, in, inlen, ctx->data, ctx->len);
    362     return SSL_TLSEXT_ERR_OK;
    363 }
    364 #endif                         /* ndef OPENSSL_NO_NEXTPROTONEG */
    365 
    366 static int serverinfo_cli_parse_cb(SSL *s, unsigned int ext_type,
    367                                    const unsigned char *in, size_t inlen,
    368                                    int *al, void *arg)
    369 {
    370     char pem_name[100];
    371     unsigned char ext_buf[4 + 65536];
    372 
    373     /* Reconstruct the type/len fields prior to extension data */
    374     ext_buf[0] = ext_type >> 8;
    375     ext_buf[1] = ext_type & 0xFF;
    376     ext_buf[2] = inlen >> 8;
    377     ext_buf[3] = inlen & 0xFF;
    378     memcpy(ext_buf + 4, in, inlen);
    379 
    380     BIO_snprintf(pem_name, sizeof(pem_name), "SERVERINFO FOR EXTENSION %d",
    381                  ext_type);
    382     PEM_write_bio(bio_c_out, pem_name, "", ext_buf, 4 + inlen);
    383     return 1;
    384 }
    385 
    386 /*
    387  * Hex decoder that tolerates optional whitespace.  Returns number of bytes
    388  * produced, advances inptr to end of input string.
    389  */
    390 static ossl_ssize_t hexdecode(const char **inptr, void *result)
    391 {
    392     unsigned char **out = (unsigned char **)result;
    393     const char *in = *inptr;
    394     unsigned char *ret = app_malloc(strlen(in) / 2, "hexdecode");
    395     unsigned char *cp = ret;
    396     uint8_t byte;
    397     int nibble = 0;
    398 
    399     if (ret == NULL)
    400         return -1;
    401 
    402     for (byte = 0; *in; ++in) {
    403         int x;
    404 
    405         if (isspace(_UC(*in)))
    406             continue;
    407         x = OPENSSL_hexchar2int(*in);
    408         if (x < 0) {
    409             OPENSSL_free(ret);
    410             return 0;
    411         }
    412         byte |= (char)x;
    413         if ((nibble ^= 1) == 0) {
    414             *cp++ = byte;
    415             byte = 0;
    416         } else {
    417             byte <<= 4;
    418         }
    419     }
    420     if (nibble != 0) {
    421         OPENSSL_free(ret);
    422         return 0;
    423     }
    424     *inptr = in;
    425 
    426     return cp - (*out = ret);
    427 }
    428 
    429 /*
    430  * Decode unsigned 0..255, returns 1 on success, <= 0 on failure. Advances
    431  * inptr to next field skipping leading whitespace.
    432  */
    433 static ossl_ssize_t checked_uint8(const char **inptr, void *out)
    434 {
    435     uint8_t *result = (uint8_t *)out;
    436     const char *in = *inptr;
    437     char *endp;
    438     long v;
    439     int e;
    440 
    441     save_errno();
    442     v = strtol(in, &endp, 10);
    443     e = restore_errno();
    444 
    445     if (((v == LONG_MIN || v == LONG_MAX) && e == ERANGE) ||
    446         endp == in || !isspace(_UC(*endp)) ||
    447         v != (*result = (uint8_t) v)) {
    448         return -1;
    449     }
    450     for (in = endp; isspace(_UC(*in)); ++in)
    451         continue;
    452 
    453     *inptr = in;
    454     return 1;
    455 }
    456 
    457 struct tlsa_field {
    458     void *var;
    459     const char *name;
    460     ossl_ssize_t (*parser)(const char **, void *);
    461 };
    462 
    463 static int tlsa_import_rr(SSL *con, const char *rrdata)
    464 {
    465     /* Not necessary to re-init these values; the "parsers" do that. */
    466     static uint8_t usage;
    467     static uint8_t selector;
    468     static uint8_t mtype;
    469     static unsigned char *data;
    470     static struct tlsa_field tlsa_fields[] = {
    471         { &usage, "usage", checked_uint8 },
    472         { &selector, "selector", checked_uint8 },
    473         { &mtype, "mtype", checked_uint8 },
    474         { &data, "data", hexdecode },
    475         { NULL, }
    476     };
    477     struct tlsa_field *f;
    478     int ret;
    479     const char *cp = rrdata;
    480     ossl_ssize_t len = 0;
    481 
    482     for (f = tlsa_fields; f->var; ++f) {
    483         /* Returns number of bytes produced, advances cp to next field */
    484         if ((len = f->parser(&cp, f->var)) <= 0) {
    485             BIO_printf(bio_err, "%s: warning: bad TLSA %s field in: %s\n",
    486                        prog, f->name, rrdata);
    487             return 0;
    488         }
    489     }
    490     /* The data field is last, so len is its length */
    491     ret = SSL_dane_tlsa_add(con, usage, selector, mtype, data, len);
    492     OPENSSL_free(data);
    493 
    494     if (ret == 0) {
    495         ERR_print_errors(bio_err);
    496         BIO_printf(bio_err, "%s: warning: unusable TLSA rrdata: %s\n",
    497                    prog, rrdata);
    498         return 0;
    499     }
    500     if (ret < 0) {
    501         ERR_print_errors(bio_err);
    502         BIO_printf(bio_err, "%s: warning: error loading TLSA rrdata: %s\n",
    503                    prog, rrdata);
    504         return 0;
    505     }
    506     return ret;
    507 }
    508 
    509 static int tlsa_import_rrset(SSL *con, STACK_OF(OPENSSL_STRING) *rrset)
    510 {
    511     int num = sk_OPENSSL_STRING_num(rrset);
    512     int count = 0;
    513     int i;
    514 
    515     for (i = 0; i < num; ++i) {
    516         char *rrdata = sk_OPENSSL_STRING_value(rrset, i);
    517         if (tlsa_import_rr(con, rrdata) > 0)
    518             ++count;
    519     }
    520     return count > 0;
    521 }
    522 
    523 typedef enum OPTION_choice {
    524     OPT_ERR = -1, OPT_EOF = 0, OPT_HELP,
    525     OPT_4, OPT_6, OPT_HOST, OPT_PORT, OPT_CONNECT, OPT_UNIX,
    526     OPT_XMPPHOST, OPT_VERIFY,
    527     OPT_CERT, OPT_CRL, OPT_CRL_DOWNLOAD, OPT_SESS_OUT, OPT_SESS_IN,
    528     OPT_CERTFORM, OPT_CRLFORM, OPT_VERIFY_RET_ERROR, OPT_VERIFY_QUIET,
    529     OPT_BRIEF, OPT_PREXIT, OPT_CRLF, OPT_QUIET, OPT_NBIO,
    530     OPT_SSL_CLIENT_ENGINE, OPT_RAND, OPT_IGN_EOF, OPT_NO_IGN_EOF,
    531     OPT_DEBUG, OPT_TLSEXTDEBUG, OPT_STATUS, OPT_WDEBUG,
    532     OPT_MSG, OPT_MSGFILE, OPT_ENGINE, OPT_TRACE, OPT_SECURITY_DEBUG,
    533     OPT_SECURITY_DEBUG_VERBOSE, OPT_SHOWCERTS, OPT_NBIO_TEST, OPT_STATE,
    534 #ifndef OPENSSL_NO_PSK
    535     OPT_PSK_IDENTITY, OPT_PSK,
    536 #endif
    537 #ifndef OPENSSL_NO_SRP
    538     OPT_SRPUSER, OPT_SRPPASS, OPT_SRP_STRENGTH, OPT_SRP_LATEUSER,
    539     OPT_SRP_MOREGROUPS,
    540 #endif
    541     OPT_SSL3, OPT_SSL_CONFIG,
    542     OPT_TLS1_2, OPT_TLS1_1, OPT_TLS1, OPT_DTLS, OPT_DTLS1,
    543     OPT_DTLS1_2, OPT_TIMEOUT, OPT_MTU, OPT_KEYFORM, OPT_PASS,
    544     OPT_CERT_CHAIN, OPT_CAPATH, OPT_NOCAPATH, OPT_CHAINCAPATH,
    545         OPT_VERIFYCAPATH,
    546     OPT_KEY, OPT_RECONNECT, OPT_BUILD_CHAIN, OPT_CAFILE, OPT_NOCAFILE,
    547     OPT_CHAINCAFILE, OPT_VERIFYCAFILE, OPT_NEXTPROTONEG, OPT_ALPN,
    548     OPT_SERVERINFO, OPT_STARTTLS, OPT_SERVERNAME,
    549     OPT_USE_SRTP, OPT_KEYMATEXPORT, OPT_KEYMATEXPORTLEN, OPT_SMTPHOST,
    550     OPT_ASYNC, OPT_SPLIT_SEND_FRAG, OPT_MAX_PIPELINES, OPT_READ_BUF,
    551     OPT_V_ENUM,
    552     OPT_X_ENUM,
    553     OPT_S_ENUM,
    554     OPT_FALLBACKSCSV, OPT_NOCMDS, OPT_PROXY, OPT_DANE_TLSA_DOMAIN,
    555 #ifndef OPENSSL_NO_CT
    556     OPT_CT, OPT_NOCT, OPT_CTLOG_FILE,
    557 #endif
    558     OPT_DANE_TLSA_RRDATA, OPT_DANE_EE_NO_NAME
    559 } OPTION_CHOICE;
    560 
    561 OPTIONS s_client_options[] = {
    562     {"help", OPT_HELP, '-', "Display this summary"},
    563     {"host", OPT_HOST, 's', "Use -connect instead"},
    564     {"port", OPT_PORT, 'p', "Use -connect instead"},
    565     {"connect", OPT_CONNECT, 's',
    566      "TCP/IP where to connect (default is :" PORT ")"},
    567     {"proxy", OPT_PROXY, 's',
    568      "Connect to via specified proxy to the real server"},
    569 #ifdef AF_UNIX
    570     {"unix", OPT_UNIX, 's', "Connect over the specified Unix-domain socket"},
    571 #endif
    572     {"4", OPT_4, '-', "Use IPv4 only"},
    573 #ifdef AF_INET6
    574     {"6", OPT_6, '-', "Use IPv6 only"},
    575 #endif
    576     {"verify", OPT_VERIFY, 'p', "Turn on peer certificate verification"},
    577     {"cert", OPT_CERT, '<', "Certificate file to use, PEM format assumed"},
    578     {"certform", OPT_CERTFORM, 'F',
    579      "Certificate format (PEM or DER) PEM default"},
    580     {"key", OPT_KEY, 's', "Private key file to use, if not in -cert file"},
    581     {"keyform", OPT_KEYFORM, 'E', "Key format (PEM, DER or engine) PEM default"},
    582     {"pass", OPT_PASS, 's', "Private key file pass phrase source"},
    583     {"CApath", OPT_CAPATH, '/', "PEM format directory of CA's"},
    584     {"CAfile", OPT_CAFILE, '<', "PEM format file of CA's"},
    585     {"no-CAfile", OPT_NOCAFILE, '-',
    586      "Do not load the default certificates file"},
    587     {"no-CApath", OPT_NOCAPATH, '-',
    588      "Do not load certificates from the default certificates directory"},
    589     {"dane_tlsa_domain", OPT_DANE_TLSA_DOMAIN, 's', "DANE TLSA base domain"},
    590     {"dane_tlsa_rrdata", OPT_DANE_TLSA_RRDATA, 's',
    591      "DANE TLSA rrdata presentation form"},
    592     {"dane_ee_no_namechecks", OPT_DANE_EE_NO_NAME, '-',
    593      "Disable name checks when matching DANE-EE(3) TLSA records"},
    594     {"reconnect", OPT_RECONNECT, '-',
    595      "Drop and re-make the connection with the same Session-ID"},
    596     {"showcerts", OPT_SHOWCERTS, '-', "Show all certificates in the chain"},
    597     {"debug", OPT_DEBUG, '-', "Extra output"},
    598     {"msg", OPT_MSG, '-', "Show protocol messages"},
    599     {"msgfile", OPT_MSGFILE, '>',
    600      "File to send output of -msg or -trace, instead of stdout"},
    601     {"nbio_test", OPT_NBIO_TEST, '-', "More ssl protocol testing"},
    602     {"state", OPT_STATE, '-', "Print the ssl states"},
    603     {"crlf", OPT_CRLF, '-', "Convert LF from terminal into CRLF"},
    604     {"quiet", OPT_QUIET, '-', "No s_client output"},
    605     {"ign_eof", OPT_IGN_EOF, '-', "Ignore input eof (default when -quiet)"},
    606     {"no_ign_eof", OPT_NO_IGN_EOF, '-', "Don't ignore input eof"},
    607     {"starttls", OPT_STARTTLS, 's',
    608      "Use the appropriate STARTTLS command before starting TLS"},
    609     {"xmpphost", OPT_XMPPHOST, 's',
    610      "Host to use with \"-starttls xmpp[-server]\""},
    611     {"rand", OPT_RAND, 's',
    612      "Load the file(s) into the random number generator"},
    613     {"sess_out", OPT_SESS_OUT, '>', "File to write SSL session to"},
    614     {"sess_in", OPT_SESS_IN, '<', "File to read SSL session from"},
    615     {"use_srtp", OPT_USE_SRTP, 's',
    616      "Offer SRTP key management with a colon-separated profile list"},
    617     {"keymatexport", OPT_KEYMATEXPORT, 's',
    618      "Export keying material using label"},
    619     {"keymatexportlen", OPT_KEYMATEXPORTLEN, 'p',
    620      "Export len bytes of keying material (default 20)"},
    621     {"fallback_scsv", OPT_FALLBACKSCSV, '-', "Send the fallback SCSV"},
    622     {"name", OPT_SMTPHOST, 's', "Hostname to use for \"-starttls smtp\""},
    623     {"CRL", OPT_CRL, '<', "CRL file to use"},
    624     {"crl_download", OPT_CRL_DOWNLOAD, '-', "Download CRL from distribution points"},
    625     {"CRLform", OPT_CRLFORM, 'F', "CRL format (PEM or DER) PEM is default"},
    626     {"verify_return_error", OPT_VERIFY_RET_ERROR, '-',
    627      "Close connection on verification error"},
    628     {"verify_quiet", OPT_VERIFY_QUIET, '-', "Restrict verify output to errors"},
    629     {"brief", OPT_BRIEF, '-',
    630      "Restrict output to brief summary of connection parameters"},
    631     {"prexit", OPT_PREXIT, '-',
    632      "Print session information when the program exits"},
    633     {"security_debug", OPT_SECURITY_DEBUG, '-',
    634      "Enable security debug messages"},
    635     {"security_debug_verbose", OPT_SECURITY_DEBUG_VERBOSE, '-',
    636      "Output more security debug output"},
    637     {"cert_chain", OPT_CERT_CHAIN, '<',
    638      "Certificate chain file (in PEM format)"},
    639     {"chainCApath", OPT_CHAINCAPATH, '/',
    640      "Use dir as certificate store path to build CA certificate chain"},
    641     {"verifyCApath", OPT_VERIFYCAPATH, '/',
    642      "Use dir as certificate store path to verify CA certificate"},
    643     {"build_chain", OPT_BUILD_CHAIN, '-', "Build certificate chain"},
    644     {"chainCAfile", OPT_CHAINCAFILE, '<',
    645      "CA file for certificate chain (PEM format)"},
    646     {"verifyCAfile", OPT_VERIFYCAFILE, '<',
    647      "CA file for certificate verification (PEM format)"},
    648     {"nocommands", OPT_NOCMDS, '-', "Do not use interactive command letters"},
    649     {"servername", OPT_SERVERNAME, 's',
    650      "Set TLS extension servername in ClientHello"},
    651     {"tlsextdebug", OPT_TLSEXTDEBUG, '-',
    652      "Hex dump of all TLS extensions received"},
    653 #ifndef OPENSSL_NO_OCSP
    654     {"status", OPT_STATUS, '-', "Request certificate status from server"},
    655 #endif
    656     {"serverinfo", OPT_SERVERINFO, 's',
    657      "types  Send empty ClientHello extensions (comma-separated numbers)"},
    658     {"alpn", OPT_ALPN, 's',
    659      "Enable ALPN extension, considering named protocols supported (comma-separated list)"},
    660     {"async", OPT_ASYNC, '-', "Support asynchronous operation"},
    661     {"ssl_config", OPT_SSL_CONFIG, 's', "Use specified configuration file"},
    662     {"split_send_frag", OPT_SPLIT_SEND_FRAG, 'n',
    663      "Size used to split data for encrypt pipelines"},
    664     {"max_pipelines", OPT_MAX_PIPELINES, 'n',
    665      "Maximum number of encrypt/decrypt pipelines to be used"},
    666     {"read_buf", OPT_READ_BUF, 'n',
    667      "Default read buffer size to be used for connections"},
    668     OPT_S_OPTIONS,
    669     OPT_V_OPTIONS,
    670     OPT_X_OPTIONS,
    671 #ifndef OPENSSL_NO_SSL3
    672     {"ssl3", OPT_SSL3, '-', "Just use SSLv3"},
    673 #endif
    674 #ifndef OPENSSL_NO_TLS1
    675     {"tls1", OPT_TLS1, '-', "Just use TLSv1"},
    676 #endif
    677 #ifndef OPENSSL_NO_TLS1_1
    678     {"tls1_1", OPT_TLS1_1, '-', "Just use TLSv1.1"},
    679 #endif
    680 #ifndef OPENSSL_NO_TLS1_2
    681     {"tls1_2", OPT_TLS1_2, '-', "Just use TLSv1.2"},
    682 #endif
    683 #ifndef OPENSSL_NO_DTLS
    684     {"dtls", OPT_DTLS, '-', "Use any version of DTLS"},
    685     {"timeout", OPT_TIMEOUT, '-',
    686      "Enable send/receive timeout on DTLS connections"},
    687     {"mtu", OPT_MTU, 'p', "Set the link layer MTU"},
    688 #endif
    689 #ifndef OPENSSL_NO_DTLS1
    690     {"dtls1", OPT_DTLS1, '-', "Just use DTLSv1"},
    691 #endif
    692 #ifndef OPENSSL_NO_DTLS1_2
    693     {"dtls1_2", OPT_DTLS1_2, '-', "Just use DTLSv1.2"},
    694 #endif
    695 #ifndef OPENSSL_NO_SSL_TRACE
    696     {"trace", OPT_TRACE, '-', "Show trace output of protocol messages"},
    697 #endif
    698 #ifdef WATT32
    699     {"wdebug", OPT_WDEBUG, '-', "WATT-32 tcp debugging"},
    700 #endif
    701     {"nbio", OPT_NBIO, '-', "Use non-blocking IO"},
    702 #ifndef OPENSSL_NO_PSK
    703     {"psk_identity", OPT_PSK_IDENTITY, 's', "PSK identity"},
    704     {"psk", OPT_PSK, 's', "PSK in hex (without 0x)"},
    705 #endif
    706 #ifndef OPENSSL_NO_SRP
    707     {"srpuser", OPT_SRPUSER, 's', "SRP authentication for 'user'"},
    708     {"srppass", OPT_SRPPASS, 's', "Password for 'user'"},
    709     {"srp_lateuser", OPT_SRP_LATEUSER, '-',
    710      "SRP username into second ClientHello message"},
    711     {"srp_moregroups", OPT_SRP_MOREGROUPS, '-',
    712      "Tolerate other than the known g N values."},
    713     {"srp_strength", OPT_SRP_STRENGTH, 'p', "Minimal length in bits for N"},
    714 #endif
    715 #ifndef OPENSSL_NO_NEXTPROTONEG
    716     {"nextprotoneg", OPT_NEXTPROTONEG, 's',
    717      "Enable NPN extension, considering named protocols supported (comma-separated list)"},
    718 #endif
    719 #ifndef OPENSSL_NO_ENGINE
    720     {"engine", OPT_ENGINE, 's', "Use engine, possibly a hardware device"},
    721     {"ssl_client_engine", OPT_SSL_CLIENT_ENGINE, 's',
    722      "Specify engine to be used for client certificate operations"},
    723 #endif
    724 #ifndef OPENSSL_NO_CT
    725     {"ct", OPT_CT, '-', "Request and parse SCTs (also enables OCSP stapling)"},
    726     {"noct", OPT_NOCT, '-', "Do not request or parse SCTs (default)"},
    727     {"ctlogfile", OPT_CTLOG_FILE, '<', "CT log list CONF file"},
    728 #endif
    729     {NULL, OPT_EOF, 0x00, NULL}
    730 };
    731 
    732 typedef enum PROTOCOL_choice {
    733     PROTO_OFF,
    734     PROTO_SMTP,
    735     PROTO_POP3,
    736     PROTO_IMAP,
    737     PROTO_FTP,
    738     PROTO_TELNET,
    739     PROTO_XMPP,
    740     PROTO_XMPP_SERVER,
    741     PROTO_CONNECT,
    742     PROTO_IRC
    743 } PROTOCOL_CHOICE;
    744 
    745 static const OPT_PAIR services[] = {
    746     {"smtp", PROTO_SMTP},
    747     {"pop3", PROTO_POP3},
    748     {"imap", PROTO_IMAP},
    749     {"ftp", PROTO_FTP},
    750     {"xmpp", PROTO_XMPP},
    751     {"xmpp-server", PROTO_XMPP_SERVER},
    752     {"telnet", PROTO_TELNET},
    753     {"irc", PROTO_IRC},
    754     {NULL, 0}
    755 };
    756 
    757 #define IS_INET_FLAG(o) \
    758  (o == OPT_4 || o == OPT_6 || o == OPT_HOST || o == OPT_PORT || o == OPT_CONNECT)
    759 #define IS_UNIX_FLAG(o) (o == OPT_UNIX)
    760 
    761 #define IS_PROT_FLAG(o) \
    762  (o == OPT_SSL3 || o == OPT_TLS1 || o == OPT_TLS1_1 || o == OPT_TLS1_2 \
    763   || o == OPT_DTLS || o == OPT_DTLS1 || o == OPT_DTLS1_2)
    764 
    765 /* Free |*dest| and optionally set it to a copy of |source|. */
    766 static void freeandcopy(char **dest, const char *source)
    767 {
    768     OPENSSL_free(*dest);
    769     *dest = NULL;
    770     if (source != NULL)
    771         *dest = OPENSSL_strdup(source);
    772 }
    773 
    774 int s_client_main(int argc, char **argv)
    775 {
    776     BIO *sbio;
    777     EVP_PKEY *key = NULL;
    778     SSL *con = NULL;
    779     SSL_CTX *ctx = NULL;
    780     STACK_OF(X509) *chain = NULL;
    781     X509 *cert = NULL;
    782     X509_VERIFY_PARAM *vpm = NULL;
    783     SSL_EXCERT *exc = NULL;
    784     SSL_CONF_CTX *cctx = NULL;
    785     STACK_OF(OPENSSL_STRING) *ssl_args = NULL;
    786     char *dane_tlsa_domain = NULL;
    787     STACK_OF(OPENSSL_STRING) *dane_tlsa_rrset = NULL;
    788     int dane_ee_no_name = 0;
    789     STACK_OF(X509_CRL) *crls = NULL;
    790     const SSL_METHOD *meth = TLS_client_method();
    791     const char *CApath = NULL, *CAfile = NULL;
    792     char *cbuf = NULL, *sbuf = NULL;
    793     char *mbuf = NULL, *proxystr = NULL, *connectstr = NULL;
    794     char *cert_file = NULL, *key_file = NULL, *chain_file = NULL;
    795     char *chCApath = NULL, *chCAfile = NULL, *host = NULL;
    796     char *port = OPENSSL_strdup(PORT);
    797     char *inrand = NULL;
    798     char *passarg = NULL, *pass = NULL, *vfyCApath = NULL, *vfyCAfile = NULL;
    799     char *sess_in = NULL, *sess_out = NULL, *crl_file = NULL, *p;
    800     char *xmpphost = NULL;
    801     const char *ehlo = "mail.example.com";
    802     struct timeval timeout, *timeoutp;
    803     fd_set readfds, writefds;
    804     int noCApath = 0, noCAfile = 0;
    805     int build_chain = 0, cbuf_len, cbuf_off, cert_format = FORMAT_PEM;
    806     int key_format = FORMAT_PEM, crlf = 0, full_log = 1, mbuf_len = 0;
    807     int prexit = 0;
    808     int sdebug = 0;
    809     int reconnect = 0, verify = SSL_VERIFY_NONE, vpmtouched = 0;
    810     int ret = 1, in_init = 1, i, nbio_test = 0, s = -1, k, width, state = 0;
    811     int sbuf_len, sbuf_off, cmdletters = 1;
    812     int socket_family = AF_UNSPEC, socket_type = SOCK_STREAM;
    813     int starttls_proto = PROTO_OFF, crl_format = FORMAT_PEM, crl_download = 0;
    814     int write_tty, read_tty, write_ssl, read_ssl, tty_on, ssl_pending;
    815 #if !defined(OPENSSL_SYS_WINDOWS) && !defined(OPENSSL_SYS_MSDOS)
    816     int at_eof = 0;
    817 #endif
    818     int read_buf_len = 0;
    819     int fallback_scsv = 0;
    820     long randamt = 0;
    821     OPTION_CHOICE o;
    822 #ifndef OPENSSL_NO_DTLS
    823     int enable_timeouts = 0;
    824     long socket_mtu = 0;
    825 #endif
    826 #ifndef OPENSSL_NO_ENGINE
    827     ENGINE *ssl_client_engine = NULL;
    828 #endif
    829     ENGINE *e = NULL;
    830 #if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS)
    831     struct timeval tv;
    832 #endif
    833     char *servername = NULL;
    834     const char *alpn_in = NULL;
    835     tlsextctx tlsextcbp = { NULL, 0 };
    836     const char *ssl_config = NULL;
    837 #define MAX_SI_TYPES 100
    838     unsigned short serverinfo_types[MAX_SI_TYPES];
    839     int serverinfo_count = 0, start = 0, len;
    840 #ifndef OPENSSL_NO_NEXTPROTONEG
    841     const char *next_proto_neg_in = NULL;
    842 #endif
    843 #ifndef OPENSSL_NO_SRP
    844     char *srppass = NULL;
    845     int srp_lateuser = 0;
    846     SRP_ARG srp_arg = { NULL, NULL, 0, 0, 0, 1024 };
    847 #endif
    848 #ifndef OPENSSL_NO_CT
    849     char *ctlog_file = NULL;
    850     int ct_validation = 0;
    851 #endif
    852     int min_version = 0, max_version = 0, prot_opt = 0, no_prot_opt = 0;
    853     int async = 0;
    854     unsigned int split_send_fragment = 0;
    855     unsigned int max_pipelines = 0;
    856     enum { use_inet, use_unix, use_unknown } connect_type = use_unknown;
    857     int count4or6 = 0;
    858     int c_nbio = 0, c_msg = 0, c_ign_eof = 0, c_brief = 0;
    859     int c_tlsextdebug = 0;
    860 #ifndef OPENSSL_NO_OCSP
    861     int c_status_req = 0;
    862 #endif
    863     BIO *bio_c_msg = NULL;
    864 
    865     FD_ZERO(&readfds);
    866     FD_ZERO(&writefds);
    867 /* Known false-positive of MemorySanitizer. */
    868 #if defined(__has_feature)
    869 # if __has_feature(memory_sanitizer)
    870     __msan_unpoison(&readfds, sizeof(readfds));
    871     __msan_unpoison(&writefds, sizeof(writefds));
    872 # endif
    873 #endif
    874 
    875     prog = opt_progname(argv[0]);
    876     c_quiet = 0;
    877     c_debug = 0;
    878     c_showcerts = 0;
    879     c_nbio = 0;
    880     vpm = X509_VERIFY_PARAM_new();
    881     cctx = SSL_CONF_CTX_new();
    882 
    883     if (vpm == NULL || cctx == NULL) {
    884         BIO_printf(bio_err, "%s: out of memory\n", prog);
    885         goto end;
    886     }
    887 
    888     cbuf = app_malloc(BUFSIZZ, "cbuf");
    889     sbuf = app_malloc(BUFSIZZ, "sbuf");
    890     mbuf = app_malloc(BUFSIZZ, "mbuf");
    891 
    892     SSL_CONF_CTX_set_flags(cctx, SSL_CONF_FLAG_CLIENT | SSL_CONF_FLAG_CMDLINE);
    893 
    894     prog = opt_init(argc, argv, s_client_options);
    895     while ((o = opt_next()) != OPT_EOF) {
    896         /* Check for intermixing flags. */
    897         if (connect_type == use_unix && IS_INET_FLAG(o)) {
    898             BIO_printf(bio_err,
    899                        "%s: Intermixed protocol flags (unix and internet domains)\n",
    900                        prog);
    901             goto end;
    902         }
    903         if (connect_type == use_inet && IS_UNIX_FLAG(o)) {
    904             BIO_printf(bio_err,
    905                        "%s: Intermixed protocol flags (internet and unix domains)\n",
    906                        prog);
    907             goto end;
    908         }
    909 
    910         if (IS_PROT_FLAG(o) && ++prot_opt > 1) {
    911             BIO_printf(bio_err, "Cannot supply multiple protocol flags\n");
    912             goto end;
    913         }
    914         if (IS_NO_PROT_FLAG(o))
    915             no_prot_opt++;
    916         if (prot_opt == 1 && no_prot_opt) {
    917             BIO_printf(bio_err,
    918                        "Cannot supply both a protocol flag and '-no_<prot>'\n");
    919             goto end;
    920         }
    921 
    922         switch (o) {
    923         case OPT_EOF:
    924         case OPT_ERR:
    925  opthelp:
    926             BIO_printf(bio_err, "%s: Use -help for summary.\n", prog);
    927             goto end;
    928         case OPT_HELP:
    929             opt_help(s_client_options);
    930             ret = 0;
    931             goto end;
    932         case OPT_4:
    933             connect_type = use_inet;
    934             socket_family = AF_INET;
    935             count4or6++;
    936             break;
    937 #ifdef AF_INET6
    938         case OPT_6:
    939             connect_type = use_inet;
    940             socket_family = AF_INET6;
    941             count4or6++;
    942             break;
    943 #endif
    944         case OPT_HOST:
    945             connect_type = use_inet;
    946             freeandcopy(&host, opt_arg());
    947             break;
    948         case OPT_PORT:
    949             connect_type = use_inet;
    950             freeandcopy(&port, opt_arg());
    951             break;
    952         case OPT_CONNECT:
    953             connect_type = use_inet;
    954             freeandcopy(&connectstr, opt_arg());
    955             break;
    956         case OPT_PROXY:
    957             proxystr = opt_arg();
    958             starttls_proto = PROTO_CONNECT;
    959             break;
    960 #ifdef AF_UNIX
    961         case OPT_UNIX:
    962             connect_type = use_unix;
    963             socket_family = AF_UNIX;
    964             freeandcopy(&host, opt_arg());
    965             break;
    966 #endif
    967         case OPT_XMPPHOST:
    968             xmpphost = opt_arg();
    969             break;
    970         case OPT_SMTPHOST:
    971             ehlo = opt_arg();
    972             break;
    973         case OPT_VERIFY:
    974             verify = SSL_VERIFY_PEER;
    975             verify_args.depth = atoi(opt_arg());
    976             if (!c_quiet)
    977                 BIO_printf(bio_err, "verify depth is %d\n", verify_args.depth);
    978             break;
    979         case OPT_CERT:
    980             cert_file = opt_arg();
    981             break;
    982         case OPT_CRL:
    983             crl_file = opt_arg();
    984             break;
    985         case OPT_CRL_DOWNLOAD:
    986             crl_download = 1;
    987             break;
    988         case OPT_SESS_OUT:
    989             sess_out = opt_arg();
    990             break;
    991         case OPT_SESS_IN:
    992             sess_in = opt_arg();
    993             break;
    994         case OPT_CERTFORM:
    995             if (!opt_format(opt_arg(), OPT_FMT_PEMDER, &cert_format))
    996                 goto opthelp;
    997             break;
    998         case OPT_CRLFORM:
    999             if (!opt_format(opt_arg(), OPT_FMT_PEMDER, &crl_format))
   1000                 goto opthelp;
   1001             break;
   1002         case OPT_VERIFY_RET_ERROR:
   1003             verify_args.return_error = 1;
   1004             break;
   1005         case OPT_VERIFY_QUIET:
   1006             verify_args.quiet = 1;
   1007             break;
   1008         case OPT_BRIEF:
   1009             c_brief = verify_args.quiet = c_quiet = 1;
   1010             break;
   1011         case OPT_S_CASES:
   1012             if (ssl_args == NULL)
   1013                 ssl_args = sk_OPENSSL_STRING_new_null();
   1014             if (ssl_args == NULL
   1015                 || !sk_OPENSSL_STRING_push(ssl_args, opt_flag())
   1016                 || !sk_OPENSSL_STRING_push(ssl_args, opt_arg())) {
   1017                 BIO_printf(bio_err, "%s: Memory allocation failure\n", prog);
   1018                 goto end;
   1019             }
   1020             break;
   1021         case OPT_V_CASES:
   1022             if (!opt_verify(o, vpm))
   1023                 goto end;
   1024             vpmtouched++;
   1025             break;
   1026         case OPT_X_CASES:
   1027             if (!args_excert(o, &exc))
   1028                 goto end;
   1029             break;
   1030         case OPT_PREXIT:
   1031             prexit = 1;
   1032             break;
   1033         case OPT_CRLF:
   1034             crlf = 1;
   1035             break;
   1036         case OPT_QUIET:
   1037             c_quiet = c_ign_eof = 1;
   1038             break;
   1039         case OPT_NBIO:
   1040             c_nbio = 1;
   1041             break;
   1042         case OPT_NOCMDS:
   1043             cmdletters = 0;
   1044             break;
   1045         case OPT_ENGINE:
   1046             e = setup_engine(opt_arg(), 1);
   1047             break;
   1048         case OPT_SSL_CLIENT_ENGINE:
   1049 #ifndef OPENSSL_NO_ENGINE
   1050             ssl_client_engine = ENGINE_by_id(opt_arg());
   1051             if (ssl_client_engine == NULL) {
   1052                 BIO_printf(bio_err, "Error getting client auth engine\n");
   1053                 goto opthelp;
   1054             }
   1055 #endif
   1056             break;
   1057         case OPT_RAND:
   1058             inrand = opt_arg();
   1059             break;
   1060         case OPT_IGN_EOF:
   1061             c_ign_eof = 1;
   1062             break;
   1063         case OPT_NO_IGN_EOF:
   1064             c_ign_eof = 0;
   1065             break;
   1066         case OPT_DEBUG:
   1067             c_debug = 1;
   1068             break;
   1069         case OPT_TLSEXTDEBUG:
   1070             c_tlsextdebug = 1;
   1071             break;
   1072         case OPT_STATUS:
   1073 #ifndef OPENSSL_NO_OCSP
   1074             c_status_req = 1;
   1075 #endif
   1076             break;
   1077         case OPT_WDEBUG:
   1078 #ifdef WATT32
   1079             dbug_init();
   1080 #endif
   1081             break;
   1082         case OPT_MSG:
   1083             c_msg = 1;
   1084             break;
   1085         case OPT_MSGFILE:
   1086             bio_c_msg = BIO_new_file(opt_arg(), "w");
   1087             break;
   1088         case OPT_TRACE:
   1089 #ifndef OPENSSL_NO_SSL_TRACE
   1090             c_msg = 2;
   1091 #endif
   1092             break;
   1093         case OPT_SECURITY_DEBUG:
   1094             sdebug = 1;
   1095             break;
   1096         case OPT_SECURITY_DEBUG_VERBOSE:
   1097             sdebug = 2;
   1098             break;
   1099         case OPT_SHOWCERTS:
   1100             c_showcerts = 1;
   1101             break;
   1102         case OPT_NBIO_TEST:
   1103             nbio_test = 1;
   1104             break;
   1105         case OPT_STATE:
   1106             state = 1;
   1107             break;
   1108 #ifndef OPENSSL_NO_PSK
   1109         case OPT_PSK_IDENTITY:
   1110             psk_identity = opt_arg();
   1111             break;
   1112         case OPT_PSK:
   1113             for (p = psk_key = opt_arg(); *p; p++) {
   1114                 if (isxdigit(_UC(*p)))
   1115                     continue;
   1116                 BIO_printf(bio_err, "Not a hex number '%s'\n", psk_key);
   1117                 goto end;
   1118             }
   1119             break;
   1120 #endif
   1121 #ifndef OPENSSL_NO_SRP
   1122         case OPT_SRPUSER:
   1123             srp_arg.srplogin = opt_arg();
   1124             if (min_version < TLS1_VERSION)
   1125                 min_version = TLS1_VERSION;
   1126             break;
   1127         case OPT_SRPPASS:
   1128             srppass = opt_arg();
   1129             if (min_version < TLS1_VERSION)
   1130                 min_version = TLS1_VERSION;
   1131             break;
   1132         case OPT_SRP_STRENGTH:
   1133             srp_arg.strength = atoi(opt_arg());
   1134             BIO_printf(bio_err, "SRP minimal length for N is %d\n",
   1135                        srp_arg.strength);
   1136             if (min_version < TLS1_VERSION)
   1137                 min_version = TLS1_VERSION;
   1138             break;
   1139         case OPT_SRP_LATEUSER:
   1140             srp_lateuser = 1;
   1141             if (min_version < TLS1_VERSION)
   1142                 min_version = TLS1_VERSION;
   1143             break;
   1144         case OPT_SRP_MOREGROUPS:
   1145             srp_arg.amp = 1;
   1146             if (min_version < TLS1_VERSION)
   1147                 min_version = TLS1_VERSION;
   1148             break;
   1149 #endif
   1150         case OPT_SSL_CONFIG:
   1151             ssl_config = opt_arg();
   1152             break;
   1153         case OPT_SSL3:
   1154             min_version = SSL3_VERSION;
   1155             max_version = SSL3_VERSION;
   1156             break;
   1157         case OPT_TLS1_2:
   1158             min_version = TLS1_2_VERSION;
   1159             max_version = TLS1_2_VERSION;
   1160             break;
   1161         case OPT_TLS1_1:
   1162             min_version = TLS1_1_VERSION;
   1163             max_version = TLS1_1_VERSION;
   1164             break;
   1165         case OPT_TLS1:
   1166             min_version = TLS1_VERSION;
   1167             max_version = TLS1_VERSION;
   1168             break;
   1169         case OPT_DTLS:
   1170 #ifndef OPENSSL_NO_DTLS
   1171             meth = DTLS_client_method();
   1172             socket_type = SOCK_DGRAM;
   1173 #endif
   1174             break;
   1175         case OPT_DTLS1:
   1176 #ifndef OPENSSL_NO_DTLS1
   1177             meth = DTLS_client_method();
   1178             min_version = DTLS1_VERSION;
   1179             max_version = DTLS1_VERSION;
   1180             socket_type = SOCK_DGRAM;
   1181 #endif
   1182             break;
   1183         case OPT_DTLS1_2:
   1184 #ifndef OPENSSL_NO_DTLS1_2
   1185             meth = DTLS_client_method();
   1186             min_version = DTLS1_2_VERSION;
   1187             max_version = DTLS1_2_VERSION;
   1188             socket_type = SOCK_DGRAM;
   1189 #endif
   1190             break;
   1191         case OPT_TIMEOUT:
   1192 #ifndef OPENSSL_NO_DTLS
   1193             enable_timeouts = 1;
   1194 #endif
   1195             break;
   1196         case OPT_MTU:
   1197 #ifndef OPENSSL_NO_DTLS
   1198             socket_mtu = atol(opt_arg());
   1199 #endif
   1200             break;
   1201         case OPT_FALLBACKSCSV:
   1202             fallback_scsv = 1;
   1203             break;
   1204         case OPT_KEYFORM:
   1205             if (!opt_format(opt_arg(), OPT_FMT_PDE, &key_format))
   1206                 goto opthelp;
   1207             break;
   1208         case OPT_PASS:
   1209             passarg = opt_arg();
   1210             break;
   1211         case OPT_CERT_CHAIN:
   1212             chain_file = opt_arg();
   1213             break;
   1214         case OPT_KEY:
   1215             key_file = opt_arg();
   1216             break;
   1217         case OPT_RECONNECT:
   1218             reconnect = 5;
   1219             break;
   1220         case OPT_CAPATH:
   1221             CApath = opt_arg();
   1222             break;
   1223         case OPT_NOCAPATH:
   1224             noCApath = 1;
   1225             break;
   1226         case OPT_CHAINCAPATH:
   1227             chCApath = opt_arg();
   1228             break;
   1229         case OPT_VERIFYCAPATH:
   1230             vfyCApath = opt_arg();
   1231             break;
   1232         case OPT_BUILD_CHAIN:
   1233             build_chain = 1;
   1234             break;
   1235         case OPT_CAFILE:
   1236             CAfile = opt_arg();
   1237             break;
   1238         case OPT_NOCAFILE:
   1239             noCAfile = 1;
   1240             break;
   1241 #ifndef OPENSSL_NO_CT
   1242         case OPT_NOCT:
   1243             ct_validation = 0;
   1244             break;
   1245         case OPT_CT:
   1246             ct_validation = 1;
   1247             break;
   1248         case OPT_CTLOG_FILE:
   1249             ctlog_file = opt_arg();
   1250             break;
   1251 #endif
   1252         case OPT_CHAINCAFILE:
   1253             chCAfile = opt_arg();
   1254             break;
   1255         case OPT_VERIFYCAFILE:
   1256             vfyCAfile = opt_arg();
   1257             break;
   1258         case OPT_DANE_TLSA_DOMAIN:
   1259             dane_tlsa_domain = opt_arg();
   1260             break;
   1261         case OPT_DANE_TLSA_RRDATA:
   1262             if (dane_tlsa_rrset == NULL)
   1263                 dane_tlsa_rrset = sk_OPENSSL_STRING_new_null();
   1264             if (dane_tlsa_rrset == NULL ||
   1265                 !sk_OPENSSL_STRING_push(dane_tlsa_rrset, opt_arg())) {
   1266                 BIO_printf(bio_err, "%s: Memory allocation failure\n", prog);
   1267                 goto end;
   1268             }
   1269             break;
   1270         case OPT_DANE_EE_NO_NAME:
   1271             dane_ee_no_name = 1;
   1272             break;
   1273         case OPT_NEXTPROTONEG:
   1274 #ifndef OPENSSL_NO_NEXTPROTONEG
   1275             next_proto_neg_in = opt_arg();
   1276 #endif
   1277             break;
   1278         case OPT_ALPN:
   1279             alpn_in = opt_arg();
   1280             break;
   1281         case OPT_SERVERINFO:
   1282             p = opt_arg();
   1283             len = strlen(p);
   1284             for (start = 0, i = 0; i <= len; ++i) {
   1285                 if (i == len || p[i] == ',') {
   1286                     serverinfo_types[serverinfo_count] = atoi(p + start);
   1287                     if (++serverinfo_count == MAX_SI_TYPES)
   1288                         break;
   1289                     start = i + 1;
   1290                 }
   1291             }
   1292             break;
   1293         case OPT_STARTTLS:
   1294             if (!opt_pair(opt_arg(), services, &starttls_proto))
   1295                 goto end;
   1296             break;
   1297         case OPT_SERVERNAME:
   1298             servername = opt_arg();
   1299             break;
   1300         case OPT_USE_SRTP:
   1301             srtp_profiles = opt_arg();
   1302             break;
   1303         case OPT_KEYMATEXPORT:
   1304             keymatexportlabel = opt_arg();
   1305             break;
   1306         case OPT_KEYMATEXPORTLEN:
   1307             keymatexportlen = atoi(opt_arg());
   1308             break;
   1309         case OPT_ASYNC:
   1310             async = 1;
   1311             break;
   1312         case OPT_SPLIT_SEND_FRAG:
   1313             split_send_fragment = atoi(opt_arg());
   1314             if (split_send_fragment == 0) {
   1315                 /*
   1316                  * Not allowed - set to a deliberately bad value so we get an
   1317                  * error message below
   1318                  */
   1319                 split_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH + 1;
   1320             }
   1321             break;
   1322         case OPT_MAX_PIPELINES:
   1323             max_pipelines = atoi(opt_arg());
   1324             break;
   1325         case OPT_READ_BUF:
   1326             read_buf_len = atoi(opt_arg());
   1327             break;
   1328         }
   1329     }
   1330     if (count4or6 >= 2) {
   1331         BIO_printf(bio_err, "%s: Can't use both -4 and -6\n", prog);
   1332         goto opthelp;
   1333     }
   1334     argc = opt_num_rest();
   1335     if (argc != 0)
   1336         goto opthelp;
   1337 
   1338     if (proxystr) {
   1339         int res;
   1340         char *tmp_host = host, *tmp_port = port;
   1341         if (connectstr == NULL) {
   1342             BIO_printf(bio_err, "%s: -proxy requires use of -connect\n", prog);
   1343             goto opthelp;
   1344         }
   1345         res = BIO_parse_hostserv(proxystr, &host, &port, BIO_PARSE_PRIO_HOST);
   1346         if (tmp_host != host)
   1347             OPENSSL_free(tmp_host);
   1348         if (tmp_port != port)
   1349             OPENSSL_free(tmp_port);
   1350         if (!res) {
   1351             BIO_printf(bio_err,
   1352                        "%s: -proxy argument malformed or ambiguous\n", prog);
   1353             goto end;
   1354         }
   1355     } else {
   1356         int res = 1;
   1357         char *tmp_host = host, *tmp_port = port;
   1358         if (connectstr != NULL)
   1359             res = BIO_parse_hostserv(connectstr, &host, &port,
   1360                                      BIO_PARSE_PRIO_HOST);
   1361         if (tmp_host != host)
   1362             OPENSSL_free(tmp_host);
   1363         if (tmp_port != port)
   1364             OPENSSL_free(tmp_port);
   1365         if (!res) {
   1366             BIO_printf(bio_err,
   1367                        "%s: -connect argument malformed or ambiguous\n",
   1368                        prog);
   1369             goto end;
   1370         }
   1371     }
   1372 
   1373 #ifdef AF_UNIX
   1374     if (socket_family == AF_UNIX && socket_type != SOCK_STREAM) {
   1375         BIO_printf(bio_err,
   1376                    "Can't use unix sockets and datagrams together\n");
   1377         goto end;
   1378     }
   1379 #endif
   1380 
   1381     if (split_send_fragment > SSL3_RT_MAX_PLAIN_LENGTH) {
   1382         BIO_printf(bio_err, "Bad split send fragment size\n");
   1383         goto end;
   1384     }
   1385 
   1386     if (max_pipelines > SSL_MAX_PIPELINES) {
   1387         BIO_printf(bio_err, "Bad max pipelines value\n");
   1388         goto end;
   1389     }
   1390 
   1391 #if !defined(OPENSSL_NO_NEXTPROTONEG)
   1392     next_proto.status = -1;
   1393     if (next_proto_neg_in) {
   1394         next_proto.data =
   1395             next_protos_parse(&next_proto.len, next_proto_neg_in);
   1396         if (next_proto.data == NULL) {
   1397             BIO_printf(bio_err, "Error parsing -nextprotoneg argument\n");
   1398             goto end;
   1399         }
   1400     } else
   1401         next_proto.data = NULL;
   1402 #endif
   1403 
   1404     if (!app_passwd(passarg, NULL, &pass, NULL)) {
   1405         BIO_printf(bio_err, "Error getting password\n");
   1406         goto end;
   1407     }
   1408 
   1409     if (key_file == NULL)
   1410         key_file = cert_file;
   1411 
   1412     if (key_file) {
   1413         key = load_key(key_file, key_format, 0, pass, e,
   1414                        "client certificate private key file");
   1415         if (key == NULL) {
   1416             ERR_print_errors(bio_err);
   1417             goto end;
   1418         }
   1419     }
   1420 
   1421     if (cert_file) {
   1422         cert = load_cert(cert_file, cert_format, "client certificate file");
   1423         if (cert == NULL) {
   1424             ERR_print_errors(bio_err);
   1425             goto end;
   1426         }
   1427     }
   1428 
   1429     if (chain_file) {
   1430         if (!load_certs(chain_file, &chain, FORMAT_PEM, NULL,
   1431                         "client certificate chain"))
   1432             goto end;
   1433     }
   1434 
   1435     if (crl_file) {
   1436         X509_CRL *crl;
   1437         crl = load_crl(crl_file, crl_format);
   1438         if (crl == NULL) {
   1439             BIO_puts(bio_err, "Error loading CRL\n");
   1440             ERR_print_errors(bio_err);
   1441             goto end;
   1442         }
   1443         crls = sk_X509_CRL_new_null();
   1444         if (crls == NULL || !sk_X509_CRL_push(crls, crl)) {
   1445             BIO_puts(bio_err, "Error adding CRL\n");
   1446             ERR_print_errors(bio_err);
   1447             X509_CRL_free(crl);
   1448             goto end;
   1449         }
   1450     }
   1451 
   1452     if (!load_excert(&exc))
   1453         goto end;
   1454 
   1455     if (!app_RAND_load_file(NULL, 1) && inrand == NULL
   1456         && !RAND_status()) {
   1457         BIO_printf(bio_err,
   1458                    "warning, not much extra random data, consider using the -rand option\n");
   1459     }
   1460     if (inrand != NULL) {
   1461         randamt = app_RAND_load_files(inrand);
   1462         BIO_printf(bio_err, "%ld semi-random bytes loaded\n", randamt);
   1463     }
   1464 
   1465     if (bio_c_out == NULL) {
   1466         if (c_quiet && !c_debug) {
   1467             bio_c_out = BIO_new(BIO_s_null());
   1468             if (c_msg && !bio_c_msg)
   1469                 bio_c_msg = dup_bio_out(FORMAT_TEXT);
   1470         } else if (bio_c_out == NULL)
   1471             bio_c_out = dup_bio_out(FORMAT_TEXT);
   1472     }
   1473 #ifndef OPENSSL_NO_SRP
   1474     if (!app_passwd(srppass, NULL, &srp_arg.srppassin, NULL)) {
   1475         BIO_printf(bio_err, "Error getting password\n");
   1476         goto end;
   1477     }
   1478 #endif
   1479 
   1480     ctx = SSL_CTX_new(meth);
   1481     if (ctx == NULL) {
   1482         ERR_print_errors(bio_err);
   1483         goto end;
   1484     }
   1485 
   1486     if (sdebug)
   1487         ssl_ctx_security_debug(ctx, sdebug);
   1488 
   1489     if (!config_ctx(cctx, ssl_args, ctx))
   1490         goto end;
   1491 
   1492     if (ssl_config) {
   1493         if (SSL_CTX_config(ctx, ssl_config) == 0) {
   1494             BIO_printf(bio_err, "Error using configuration \"%s\"\n",
   1495                        ssl_config);
   1496             ERR_print_errors(bio_err);
   1497             goto end;
   1498         }
   1499     }
   1500 
   1501     if (min_version != 0
   1502         && SSL_CTX_set_min_proto_version(ctx, min_version) == 0)
   1503         goto end;
   1504     if (max_version != 0
   1505         && SSL_CTX_set_max_proto_version(ctx, max_version) == 0)
   1506         goto end;
   1507 
   1508     if (vpmtouched && !SSL_CTX_set1_param(ctx, vpm)) {
   1509         BIO_printf(bio_err, "Error setting verify params\n");
   1510         ERR_print_errors(bio_err);
   1511         goto end;
   1512     }
   1513 
   1514     if (async) {
   1515         SSL_CTX_set_mode(ctx, SSL_MODE_ASYNC);
   1516     }
   1517     if (split_send_fragment > 0) {
   1518         SSL_CTX_set_split_send_fragment(ctx, split_send_fragment);
   1519     }
   1520     if (max_pipelines > 0) {
   1521         SSL_CTX_set_max_pipelines(ctx, max_pipelines);
   1522     }
   1523 
   1524     if (read_buf_len > 0) {
   1525         SSL_CTX_set_default_read_buffer_len(ctx, read_buf_len);
   1526     }
   1527 
   1528     if (!ssl_load_stores(ctx, vfyCApath, vfyCAfile, chCApath, chCAfile,
   1529                          crls, crl_download)) {
   1530         BIO_printf(bio_err, "Error loading store locations\n");
   1531         ERR_print_errors(bio_err);
   1532         goto end;
   1533     }
   1534 #ifndef OPENSSL_NO_ENGINE
   1535     if (ssl_client_engine) {
   1536         if (!SSL_CTX_set_client_cert_engine(ctx, ssl_client_engine)) {
   1537             BIO_puts(bio_err, "Error setting client auth engine\n");
   1538             ERR_print_errors(bio_err);
   1539             ENGINE_free(ssl_client_engine);
   1540             goto end;
   1541         }
   1542         ENGINE_free(ssl_client_engine);
   1543     }
   1544 #endif
   1545 
   1546 #ifndef OPENSSL_NO_PSK
   1547     if (psk_key != NULL) {
   1548         if (c_debug)
   1549             BIO_printf(bio_c_out, "PSK key given, setting client callback\n");
   1550         SSL_CTX_set_psk_client_callback(ctx, psk_client_cb);
   1551     }
   1552 #endif
   1553 #ifndef OPENSSL_NO_SRTP
   1554     if (srtp_profiles != NULL) {
   1555         /* Returns 0 on success! */
   1556         if (SSL_CTX_set_tlsext_use_srtp(ctx, srtp_profiles) != 0) {
   1557             BIO_printf(bio_err, "Error setting SRTP profile\n");
   1558             ERR_print_errors(bio_err);
   1559             goto end;
   1560         }
   1561     }
   1562 #endif
   1563 
   1564     if (exc)
   1565         ssl_ctx_set_excert(ctx, exc);
   1566 
   1567 #if !defined(OPENSSL_NO_NEXTPROTONEG)
   1568     if (next_proto.data)
   1569         SSL_CTX_set_next_proto_select_cb(ctx, next_proto_cb, &next_proto);
   1570 #endif
   1571     if (alpn_in) {
   1572         size_t alpn_len;
   1573         unsigned char *alpn = next_protos_parse(&alpn_len, alpn_in);
   1574 
   1575         if (alpn == NULL) {
   1576             BIO_printf(bio_err, "Error parsing -alpn argument\n");
   1577             goto end;
   1578         }
   1579         /* Returns 0 on success! */
   1580         if (SSL_CTX_set_alpn_protos(ctx, alpn, alpn_len) != 0) {
   1581             BIO_printf(bio_err, "Error setting ALPN\n");
   1582             goto end;
   1583         }
   1584         OPENSSL_free(alpn);
   1585     }
   1586 
   1587     for (i = 0; i < serverinfo_count; i++) {
   1588         if (!SSL_CTX_add_client_custom_ext(ctx,
   1589                                            serverinfo_types[i],
   1590                                            NULL, NULL, NULL,
   1591                                            serverinfo_cli_parse_cb, NULL)) {
   1592             BIO_printf(bio_err,
   1593                        "Warning: Unable to add custom extension %u, skipping\n",
   1594                        serverinfo_types[i]);
   1595         }
   1596     }
   1597 
   1598     if (state)
   1599         SSL_CTX_set_info_callback(ctx, apps_ssl_info_callback);
   1600 
   1601 #ifndef OPENSSL_NO_CT
   1602     /* Enable SCT processing, without early connection termination */
   1603     if (ct_validation &&
   1604         !SSL_CTX_enable_ct(ctx, SSL_CT_VALIDATION_PERMISSIVE)) {
   1605         ERR_print_errors(bio_err);
   1606         goto end;
   1607     }
   1608 
   1609     if (!ctx_set_ctlog_list_file(ctx, ctlog_file)) {
   1610         if (ct_validation) {
   1611             ERR_print_errors(bio_err);
   1612             goto end;
   1613         }
   1614 
   1615         /*
   1616          * If CT validation is not enabled, the log list isn't needed so don't
   1617          * show errors or abort. We try to load it regardless because then we
   1618          * can show the names of the logs any SCTs came from (SCTs may be seen
   1619          * even with validation disabled).
   1620          */
   1621         ERR_clear_error();
   1622     }
   1623 #endif
   1624 
   1625     SSL_CTX_set_verify(ctx, verify, verify_callback);
   1626 
   1627     if (!ctx_set_verify_locations(ctx, CAfile, CApath, noCAfile, noCApath)) {
   1628         ERR_print_errors(bio_err);
   1629         goto end;
   1630     }
   1631 
   1632     ssl_ctx_add_crls(ctx, crls, crl_download);
   1633 
   1634     if (!set_cert_key_stuff(ctx, cert, key, chain, build_chain))
   1635         goto end;
   1636 
   1637     if (servername != NULL) {
   1638         tlsextcbp.biodebug = bio_err;
   1639         SSL_CTX_set_tlsext_servername_callback(ctx, ssl_servername_cb);
   1640         SSL_CTX_set_tlsext_servername_arg(ctx, &tlsextcbp);
   1641     }
   1642 # ifndef OPENSSL_NO_SRP
   1643     if (srp_arg.srplogin) {
   1644         if (!srp_lateuser && !SSL_CTX_set_srp_username(ctx, srp_arg.srplogin)) {
   1645             BIO_printf(bio_err, "Unable to set SRP username\n");
   1646             goto end;
   1647         }
   1648         srp_arg.msg = c_msg;
   1649         srp_arg.debug = c_debug;
   1650         SSL_CTX_set_srp_cb_arg(ctx, &srp_arg);
   1651         SSL_CTX_set_srp_client_pwd_callback(ctx, ssl_give_srp_client_pwd_cb);
   1652         SSL_CTX_set_srp_strength(ctx, srp_arg.strength);
   1653         if (c_msg || c_debug || srp_arg.amp == 0)
   1654             SSL_CTX_set_srp_verify_param_callback(ctx,
   1655                                                   ssl_srp_verify_param_cb);
   1656     }
   1657 # endif
   1658 
   1659     if (dane_tlsa_domain != NULL) {
   1660         if (SSL_CTX_dane_enable(ctx) <= 0) {
   1661             BIO_printf(bio_err,
   1662                        "%s: Error enabling DANE TLSA authentication.\n",
   1663                        prog);
   1664             ERR_print_errors(bio_err);
   1665             goto end;
   1666         }
   1667     }
   1668 
   1669     con = SSL_new(ctx);
   1670     if (sess_in) {
   1671         SSL_SESSION *sess;
   1672         BIO *stmp = BIO_new_file(sess_in, "r");
   1673         if (!stmp) {
   1674             BIO_printf(bio_err, "Can't open session file %s\n", sess_in);
   1675             ERR_print_errors(bio_err);
   1676             goto end;
   1677         }
   1678         sess = PEM_read_bio_SSL_SESSION(stmp, NULL, 0, NULL);
   1679         BIO_free(stmp);
   1680         if (!sess) {
   1681             BIO_printf(bio_err, "Can't open session file %s\n", sess_in);
   1682             ERR_print_errors(bio_err);
   1683             goto end;
   1684         }
   1685         if (!SSL_set_session(con, sess)) {
   1686             BIO_printf(bio_err, "Can't set session\n");
   1687             ERR_print_errors(bio_err);
   1688             goto end;
   1689         }
   1690         SSL_SESSION_free(sess);
   1691     }
   1692 
   1693     if (fallback_scsv)
   1694         SSL_set_mode(con, SSL_MODE_SEND_FALLBACK_SCSV);
   1695 
   1696     if (servername != NULL) {
   1697         if (!SSL_set_tlsext_host_name(con, servername)) {
   1698             BIO_printf(bio_err, "Unable to set TLS servername extension.\n");
   1699             ERR_print_errors(bio_err);
   1700             goto end;
   1701         }
   1702     }
   1703 
   1704     if (dane_tlsa_domain != NULL) {
   1705         if (SSL_dane_enable(con, dane_tlsa_domain) <= 0) {
   1706             BIO_printf(bio_err, "%s: Error enabling DANE TLSA "
   1707                        "authentication.\n", prog);
   1708             ERR_print_errors(bio_err);
   1709             goto end;
   1710         }
   1711         if (dane_tlsa_rrset == NULL) {
   1712             BIO_printf(bio_err, "%s: DANE TLSA authentication requires at "
   1713                        "least one -dane_tlsa_rrdata option.\n", prog);
   1714             goto end;
   1715         }
   1716         if (tlsa_import_rrset(con, dane_tlsa_rrset) <= 0) {
   1717             BIO_printf(bio_err, "%s: Failed to import any TLSA "
   1718                        "records.\n", prog);
   1719             goto end;
   1720         }
   1721         if (dane_ee_no_name)
   1722             SSL_dane_set_flags(con, DANE_FLAG_NO_DANE_EE_NAMECHECKS);
   1723     } else if (dane_tlsa_rrset != NULL) {
   1724         BIO_printf(bio_err, "%s: DANE TLSA authentication requires the "
   1725                    "-dane_tlsa_domain option.\n", prog);
   1726         goto end;
   1727     }
   1728 
   1729  re_start:
   1730     if (init_client(&s, host, port, socket_family, socket_type) == 0) {
   1731         BIO_printf(bio_err, "connect:errno=%d\n", get_last_socket_error());
   1732         BIO_closesocket(s);
   1733         goto end;
   1734     }
   1735     BIO_printf(bio_c_out, "CONNECTED(%08X)\n", s);
   1736 
   1737     if (c_nbio) {
   1738         if (!BIO_socket_nbio(s, 1)) {
   1739             ERR_print_errors(bio_err);
   1740             goto end;
   1741         }
   1742         BIO_printf(bio_c_out, "Turned on non blocking io\n");
   1743     }
   1744 #ifndef OPENSSL_NO_DTLS
   1745     if (socket_type == SOCK_DGRAM) {
   1746         union BIO_sock_info_u peer_info;
   1747 
   1748         sbio = BIO_new_dgram(s, BIO_NOCLOSE);
   1749         if ((peer_info.addr = BIO_ADDR_new()) == NULL) {
   1750             BIO_printf(bio_err, "memory allocation failure\n");
   1751             BIO_closesocket(s);
   1752             goto end;
   1753         }
   1754         if (!BIO_sock_info(s, BIO_SOCK_INFO_ADDRESS, &peer_info)) {
   1755             BIO_printf(bio_err, "getsockname:errno=%d\n",
   1756                        get_last_socket_error());
   1757             BIO_ADDR_free(peer_info.addr);
   1758             BIO_closesocket(s);
   1759             goto end;
   1760         }
   1761 
   1762         (void)BIO_ctrl_set_connected(sbio, peer_info.addr);
   1763         BIO_ADDR_free(peer_info.addr);
   1764         peer_info.addr = NULL;
   1765 
   1766         if (enable_timeouts) {
   1767             timeout.tv_sec = 0;
   1768             timeout.tv_usec = DGRAM_RCV_TIMEOUT;
   1769             BIO_ctrl(sbio, BIO_CTRL_DGRAM_SET_RECV_TIMEOUT, 0, &timeout);
   1770 
   1771             timeout.tv_sec = 0;
   1772             timeout.tv_usec = DGRAM_SND_TIMEOUT;
   1773             BIO_ctrl(sbio, BIO_CTRL_DGRAM_SET_SEND_TIMEOUT, 0, &timeout);
   1774         }
   1775 
   1776         if (socket_mtu) {
   1777             if (socket_mtu < DTLS_get_link_min_mtu(con)) {
   1778                 BIO_printf(bio_err, "MTU too small. Must be at least %ld\n",
   1779                            DTLS_get_link_min_mtu(con));
   1780                 BIO_free(sbio);
   1781                 goto shut;
   1782             }
   1783             SSL_set_options(con, SSL_OP_NO_QUERY_MTU);
   1784             if (!DTLS_set_link_mtu(con, socket_mtu)) {
   1785                 BIO_printf(bio_err, "Failed to set MTU\n");
   1786                 BIO_free(sbio);
   1787                 goto shut;
   1788             }
   1789         } else
   1790             /* want to do MTU discovery */
   1791             BIO_ctrl(sbio, BIO_CTRL_DGRAM_MTU_DISCOVER, 0, NULL);
   1792     } else
   1793 #endif /* OPENSSL_NO_DTLS */
   1794         sbio = BIO_new_socket(s, BIO_NOCLOSE);
   1795 
   1796     if (nbio_test) {
   1797         BIO *test;
   1798 
   1799         test = BIO_new(BIO_f_nbio_test());
   1800         sbio = BIO_push(test, sbio);
   1801     }
   1802 
   1803     if (c_debug) {
   1804         BIO_set_callback(sbio, bio_dump_callback);
   1805         BIO_set_callback_arg(sbio, (char *)bio_c_out);
   1806     }
   1807     if (c_msg) {
   1808 #ifndef OPENSSL_NO_SSL_TRACE
   1809         if (c_msg == 2)
   1810             SSL_set_msg_callback(con, SSL_trace);
   1811         else
   1812 #endif
   1813             SSL_set_msg_callback(con, msg_cb);
   1814         SSL_set_msg_callback_arg(con, bio_c_msg ? bio_c_msg : bio_c_out);
   1815     }
   1816 
   1817     if (c_tlsextdebug) {
   1818         SSL_set_tlsext_debug_callback(con, tlsext_cb);
   1819         SSL_set_tlsext_debug_arg(con, bio_c_out);
   1820     }
   1821 #ifndef OPENSSL_NO_OCSP
   1822     if (c_status_req) {
   1823         SSL_set_tlsext_status_type(con, TLSEXT_STATUSTYPE_ocsp);
   1824         SSL_CTX_set_tlsext_status_cb(ctx, ocsp_resp_cb);
   1825         SSL_CTX_set_tlsext_status_arg(ctx, bio_c_out);
   1826     }
   1827 #endif
   1828 
   1829     SSL_set_bio(con, sbio, sbio);
   1830     SSL_set_connect_state(con);
   1831 
   1832     /* ok, lets connect */
   1833     if (fileno_stdin() > SSL_get_fd(con))
   1834         width = fileno_stdin() + 1;
   1835     else
   1836         width = SSL_get_fd(con) + 1;
   1837 
   1838     read_tty = 1;
   1839     write_tty = 0;
   1840     tty_on = 0;
   1841     read_ssl = 1;
   1842     write_ssl = 1;
   1843 
   1844     cbuf_len = 0;
   1845     cbuf_off = 0;
   1846     sbuf_len = 0;
   1847     sbuf_off = 0;
   1848 
   1849     switch ((PROTOCOL_CHOICE) starttls_proto) {
   1850     case PROTO_OFF:
   1851         break;
   1852     case PROTO_SMTP:
   1853         {
   1854             /*
   1855              * This is an ugly hack that does a lot of assumptions. We do
   1856              * have to handle multi-line responses which may come in a single
   1857              * packet or not. We therefore have to use BIO_gets() which does
   1858              * need a buffering BIO. So during the initial chitchat we do
   1859              * push a buffering BIO into the chain that is removed again
   1860              * later on to not disturb the rest of the s_client operation.
   1861              */
   1862             int foundit = 0;
   1863             BIO *fbio = BIO_new(BIO_f_buffer());
   1864             BIO_push(fbio, sbio);
   1865             /* wait for multi-line response to end from SMTP */
   1866             do {
   1867                 mbuf_len = BIO_gets(fbio, mbuf, BUFSIZZ);
   1868             }
   1869             while (mbuf_len > 3 && mbuf[3] == '-');
   1870             BIO_printf(fbio, "EHLO %s\r\n", ehlo);
   1871             (void)BIO_flush(fbio);
   1872             /* wait for multi-line response to end EHLO SMTP response */
   1873             do {
   1874                 mbuf_len = BIO_gets(fbio, mbuf, BUFSIZZ);
   1875                 if (strstr(mbuf, "STARTTLS"))
   1876                     foundit = 1;
   1877             }
   1878             while (mbuf_len > 3 && mbuf[3] == '-');
   1879             (void)BIO_flush(fbio);
   1880             BIO_pop(fbio);
   1881             BIO_free(fbio);
   1882             if (!foundit)
   1883                 BIO_printf(bio_err,
   1884                            "didn't find starttls in server response,"
   1885                            " trying anyway...\n");
   1886             BIO_printf(sbio, "STARTTLS\r\n");
   1887             BIO_read(sbio, sbuf, BUFSIZZ);
   1888         }
   1889         break;
   1890     case PROTO_POP3:
   1891         {
   1892             BIO_read(sbio, mbuf, BUFSIZZ);
   1893             BIO_printf(sbio, "STLS\r\n");
   1894             mbuf_len = BIO_read(sbio, sbuf, BUFSIZZ);
   1895             if (mbuf_len < 0) {
   1896                 BIO_printf(bio_err, "BIO_read failed\n");
   1897                 goto end;
   1898             }
   1899         }
   1900         break;
   1901     case PROTO_IMAP:
   1902         {
   1903             int foundit = 0;
   1904             BIO *fbio = BIO_new(BIO_f_buffer());
   1905             BIO_push(fbio, sbio);
   1906             BIO_gets(fbio, mbuf, BUFSIZZ);
   1907             /* STARTTLS command requires CAPABILITY... */
   1908             BIO_printf(fbio, ". CAPABILITY\r\n");
   1909             (void)BIO_flush(fbio);
   1910             /* wait for multi-line CAPABILITY response */
   1911             do {
   1912                 mbuf_len = BIO_gets(fbio, mbuf, BUFSIZZ);
   1913                 if (strstr(mbuf, "STARTTLS"))
   1914                     foundit = 1;
   1915             }
   1916             while (mbuf_len > 3 && mbuf[0] != '.');
   1917             (void)BIO_flush(fbio);
   1918             BIO_pop(fbio);
   1919             BIO_free(fbio);
   1920             if (!foundit)
   1921                 BIO_printf(bio_err,
   1922                            "didn't find STARTTLS in server response,"
   1923                            " trying anyway...\n");
   1924             BIO_printf(sbio, ". STARTTLS\r\n");
   1925             BIO_read(sbio, sbuf, BUFSIZZ);
   1926         }
   1927         break;
   1928     case PROTO_FTP:
   1929         {
   1930             BIO *fbio = BIO_new(BIO_f_buffer());
   1931             BIO_push(fbio, sbio);
   1932             /* wait for multi-line response to end from FTP */
   1933             do {
   1934                 mbuf_len = BIO_gets(fbio, mbuf, BUFSIZZ);
   1935             }
   1936             while (mbuf_len > 3 && mbuf[3] == '-');
   1937             (void)BIO_flush(fbio);
   1938             BIO_pop(fbio);
   1939             BIO_free(fbio);
   1940             BIO_printf(sbio, "AUTH TLS\r\n");
   1941             BIO_read(sbio, sbuf, BUFSIZZ);
   1942         }
   1943         break;
   1944     case PROTO_XMPP:
   1945     case PROTO_XMPP_SERVER:
   1946         {
   1947             int seen = 0;
   1948             BIO_printf(sbio, "<stream:stream "
   1949                        "xmlns:stream='http://etherx.jabber.org/streams' "
   1950                        "xmlns='jabber:%s' to='%s' version='1.0'>",
   1951                        starttls_proto == PROTO_XMPP ? "client" : "server",
   1952                        xmpphost ? xmpphost : host);
   1953             seen = BIO_read(sbio, mbuf, BUFSIZZ);
   1954             mbuf[seen] = 0;
   1955             while (!strstr
   1956                    (mbuf, "<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'")
   1957                    && !strstr(mbuf,
   1958                               "<starttls xmlns=\"urn:ietf:params:xml:ns:xmpp-tls\""))
   1959             {
   1960                 seen = BIO_read(sbio, mbuf, BUFSIZZ);
   1961 
   1962                 if (seen <= 0)
   1963                     goto shut;
   1964 
   1965                 mbuf[seen] = 0;
   1966             }
   1967             BIO_printf(sbio,
   1968                        "<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>");
   1969             seen = BIO_read(sbio, sbuf, BUFSIZZ);
   1970             sbuf[seen] = 0;
   1971             if (!strstr(sbuf, "<proceed"))
   1972                 goto shut;
   1973             mbuf[0] = 0;
   1974         }
   1975         break;
   1976     case PROTO_TELNET:
   1977         {
   1978             static const unsigned char tls_do[] = {
   1979                 /* IAC    DO   START_TLS */
   1980                    255,   253, 46
   1981             };
   1982             static const unsigned char tls_will[] = {
   1983                 /* IAC  WILL START_TLS */
   1984                    255, 251, 46
   1985             };
   1986             static const unsigned char tls_follows[] = {
   1987                 /* IAC  SB   START_TLS FOLLOWS IAC  SE */
   1988                    255, 250, 46,       1,      255, 240
   1989             };
   1990             int bytes;
   1991 
   1992             /* Telnet server should demand we issue START_TLS */
   1993             bytes = BIO_read(sbio, mbuf, BUFSIZZ);
   1994             if (bytes != 3 || memcmp(mbuf, tls_do, 3) != 0)
   1995                 goto shut;
   1996             /* Agree to issue START_TLS and send the FOLLOWS sub-command */
   1997             BIO_write(sbio, tls_will, 3);
   1998             BIO_write(sbio, tls_follows, 6);
   1999             (void)BIO_flush(sbio);
   2000             /* Telnet server also sent the FOLLOWS sub-command */
   2001             bytes = BIO_read(sbio, mbuf, BUFSIZZ);
   2002             if (bytes != 6 || memcmp(mbuf, tls_follows, 6) != 0)
   2003                 goto shut;
   2004         }
   2005         break;
   2006     case PROTO_CONNECT:
   2007         {
   2008             enum {
   2009                 error_proto,     /* Wrong protocol, not even HTTP */
   2010                 error_connect,   /* CONNECT failed */
   2011                 success
   2012             } foundit = error_connect;
   2013             BIO *fbio = BIO_new(BIO_f_buffer());
   2014 
   2015             BIO_push(fbio, sbio);
   2016             BIO_printf(fbio, "CONNECT %s HTTP/1.0\r\n\r\n", connectstr);
   2017             (void)BIO_flush(fbio);
   2018             /*
   2019              * The first line is the HTTP response.  According to RFC 7230,
   2020              * it's formated exactly like this:
   2021              *
   2022              * HTTP/d.d ddd Reason text\r\n
   2023              */
   2024             mbuf_len = BIO_gets(fbio, mbuf, BUFSIZZ);
   2025             if (mbuf[8] != ' ') {
   2026                 BIO_printf(bio_err,
   2027                            "%s: HTTP CONNECT failed, incorrect response "
   2028                            "from proxy\n", prog);
   2029                 foundit = error_proto;
   2030             } else if (mbuf[9] != '2') {
   2031                 BIO_printf(bio_err, "%s: HTTP CONNECT failed: %s ", prog,
   2032                            &mbuf[9]);
   2033             } else {
   2034                 foundit = success;
   2035             }
   2036             if (foundit != error_proto) {
   2037                 /* Read past all following headers */
   2038                 do {
   2039                     mbuf_len = BIO_gets(fbio, mbuf, BUFSIZZ);
   2040                 } while (mbuf_len > 2);
   2041             }
   2042             (void)BIO_flush(fbio);
   2043             BIO_pop(fbio);
   2044             BIO_free(fbio);
   2045             if (foundit != success) {
   2046                 goto shut;
   2047             }
   2048         }
   2049         break;
   2050     case PROTO_IRC:
   2051         {
   2052             int numeric;
   2053             BIO *fbio = BIO_new(BIO_f_buffer());
   2054 
   2055             BIO_push(fbio, sbio);
   2056             BIO_printf(fbio, "STARTTLS\r\n");
   2057             (void)BIO_flush(fbio);
   2058             width = SSL_get_fd(con) + 1;
   2059 
   2060             do {
   2061                 numeric = 0;
   2062 
   2063                 FD_ZERO(&readfds);
   2064                 openssl_fdset(SSL_get_fd(con), &readfds);
   2065                 timeout.tv_sec = S_CLIENT_IRC_READ_TIMEOUT;
   2066                 timeout.tv_usec = 0;
   2067                 /*
   2068                  * If the IRCd doesn't respond within
   2069                  * S_CLIENT_IRC_READ_TIMEOUT seconds, assume
   2070                  * it doesn't support STARTTLS. Many IRCds
   2071                  * will not give _any_ sort of response to a
   2072                  * STARTTLS command when it's not supported.
   2073                  */
   2074                 if (!BIO_get_buffer_num_lines(fbio)
   2075                     && !BIO_pending(fbio)
   2076                     && !BIO_pending(sbio)
   2077                     && select(width, (void *)&readfds, NULL, NULL,
   2078                               &timeout) < 1) {
   2079                     BIO_printf(bio_err,
   2080                                "Timeout waiting for response (%d seconds).\n",
   2081                                S_CLIENT_IRC_READ_TIMEOUT);
   2082                     break;
   2083                 }
   2084 
   2085                 mbuf_len = BIO_gets(fbio, mbuf, BUFSIZZ);
   2086                 if (mbuf_len < 1 || sscanf(mbuf, "%*s %d", &numeric) != 1)
   2087                     break;
   2088                 /* :example.net 451 STARTTLS :You have not registered */
   2089                 /* :example.net 421 STARTTLS :Unknown command */
   2090                 if ((numeric == 451 || numeric == 421)
   2091                     && strstr(mbuf, "STARTTLS") != NULL) {
   2092                     BIO_printf(bio_err, "STARTTLS not supported: %s", mbuf);
   2093                     break;
   2094                 }
   2095                 if (numeric == 691) {
   2096                     BIO_printf(bio_err, "STARTTLS negotiation failed: ");
   2097                     ERR_print_errors(bio_err);
   2098                     break;
   2099                 }
   2100             } while (numeric != 670);
   2101 
   2102             (void)BIO_flush(fbio);
   2103             BIO_pop(fbio);
   2104             BIO_free(fbio);
   2105             if (numeric != 670) {
   2106                 BIO_printf(bio_err, "Server does not support STARTTLS.\n");
   2107                 ret = 1;
   2108                 goto shut;
   2109             }
   2110         }
   2111     }
   2112 
   2113     for (;;) {
   2114         FD_ZERO(&readfds);
   2115         FD_ZERO(&writefds);
   2116         int fdin = fileno_stdin();
   2117         if (fdin < 0) {
   2118             BIO_printf(bio_err,"bad fileno for stdin\n");
   2119             goto shut;
   2120         }
   2121         int fdout = fileno_stdout();
   2122         if (fdout < 0) {
   2123             BIO_printf(bio_err,"bad fileno for stdout\n");
   2124             goto shut;
   2125         }
   2126 
   2127         if ((SSL_version(con) == DTLS1_VERSION) &&
   2128             DTLSv1_get_timeout(con, &timeout))
   2129             timeoutp = &timeout;
   2130         else
   2131             timeoutp = NULL;
   2132 
   2133         if (SSL_in_init(con) && !SSL_total_renegotiations(con)) {
   2134             in_init = 1;
   2135             tty_on = 0;
   2136         } else {
   2137             tty_on = 1;
   2138             if (in_init) {
   2139                 in_init = 0;
   2140 
   2141                 if (sess_out) {
   2142                     BIO *stmp = BIO_new_file(sess_out, "w");
   2143                     if (stmp) {
   2144                         PEM_write_bio_SSL_SESSION(stmp, SSL_get_session(con));
   2145                         BIO_free(stmp);
   2146                     } else
   2147                         BIO_printf(bio_err, "Error writing session file %s\n",
   2148                                    sess_out);
   2149                 }
   2150                 if (c_brief) {
   2151                     BIO_puts(bio_err, "CONNECTION ESTABLISHED\n");
   2152                     print_ssl_summary(con);
   2153                 }
   2154 
   2155                 print_stuff(bio_c_out, con, full_log);
   2156                 if (full_log > 0)
   2157                     full_log--;
   2158 
   2159                 if (starttls_proto) {
   2160                     BIO_write(bio_err, mbuf, mbuf_len);
   2161                     /* We don't need to know any more */
   2162                     if (!reconnect)
   2163                         starttls_proto = PROTO_OFF;
   2164                 }
   2165 
   2166                 if (reconnect) {
   2167                     reconnect--;
   2168                     BIO_printf(bio_c_out,
   2169                                "drop connection and then reconnect\n");
   2170                     do_ssl_shutdown(con);
   2171                     SSL_set_connect_state(con);
   2172                     BIO_closesocket(SSL_get_fd(con));
   2173                     goto re_start;
   2174                 }
   2175             }
   2176         }
   2177 
   2178         ssl_pending = read_ssl && SSL_has_pending(con);
   2179 
   2180         if (!ssl_pending) {
   2181 #if !defined(OPENSSL_SYS_WINDOWS) && !defined(OPENSSL_SYS_MSDOS)
   2182             if (tty_on) {
   2183                 /*
   2184                  * Note that select() returns when read _would not block_,
   2185                  * and EOF satisfies that.  To avoid a CPU-hogging loop,
   2186                  * set the flag so we exit.
   2187                  */
   2188                 if (read_tty && !at_eof)
   2189                     openssl_fdset(fileno_stdin(), &readfds);
   2190 #if !defined(OPENSSL_SYS_VMS)
   2191                 if (write_tty)
   2192                     openssl_fdset(fdout, &writefds);
   2193 #endif
   2194             }
   2195             if (read_ssl)
   2196                 openssl_fdset(SSL_get_fd(con), &readfds);
   2197             if (write_ssl)
   2198                 openssl_fdset(SSL_get_fd(con), &writefds);
   2199 #else
   2200             if (!tty_on || !write_tty) {
   2201                 if (read_ssl)
   2202                     openssl_fdset(SSL_get_fd(con), &readfds);
   2203                 if (write_ssl)
   2204                     openssl_fdset(SSL_get_fd(con), &writefds);
   2205             }
   2206 #endif
   2207 
   2208             /*
   2209              * Note: under VMS with SOCKETSHR the second parameter is
   2210              * currently of type (int *) whereas under other systems it is
   2211              * (void *) if you don't have a cast it will choke the compiler:
   2212              * if you do have a cast then you can either go for (int *) or
   2213              * (void *).
   2214              */
   2215 #if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS)
   2216             /*
   2217              * Under Windows/DOS we make the assumption that we can always
   2218              * write to the tty: therefore if we need to write to the tty we
   2219              * just fall through. Otherwise we timeout the select every
   2220              * second and see if there are any keypresses. Note: this is a
   2221              * hack, in a proper Windows application we wouldn't do this.
   2222              */
   2223             i = 0;
   2224             if (!write_tty) {
   2225                 if (read_tty) {
   2226                     tv.tv_sec = 1;
   2227                     tv.tv_usec = 0;
   2228                     i = select(width, (void *)&readfds, (void *)&writefds,
   2229                                NULL, &tv);
   2230                     if (!i && (!has_stdin_waiting() || !read_tty))
   2231                         continue;
   2232                 } else
   2233                     i = select(width, (void *)&readfds, (void *)&writefds,
   2234                                NULL, timeoutp);
   2235             }
   2236 #else
   2237             i = select(width, (void *)&readfds, (void *)&writefds,
   2238                        NULL, timeoutp);
   2239 #endif
   2240             if (i < 0) {
   2241                 BIO_printf(bio_err, "bad select %d\n",
   2242                            get_last_socket_error());
   2243                 goto shut;
   2244                 /* goto end; */
   2245             }
   2246         }
   2247 
   2248         if ((SSL_version(con) == DTLS1_VERSION)
   2249             && DTLSv1_handle_timeout(con) > 0) {
   2250             BIO_printf(bio_err, "TIMEOUT occurred\n");
   2251         }
   2252 
   2253         if (!ssl_pending && FD_ISSET(SSL_get_fd(con), &writefds)) {
   2254             k = SSL_write(con, &(cbuf[cbuf_off]), (unsigned int)cbuf_len);
   2255             switch (SSL_get_error(con, k)) {
   2256             case SSL_ERROR_NONE:
   2257                 cbuf_off += k;
   2258                 cbuf_len -= k;
   2259                 if (k <= 0)
   2260                     goto end;
   2261                 /* we have done a  write(con,NULL,0); */
   2262                 if (cbuf_len <= 0) {
   2263                     read_tty = 1;
   2264                     write_ssl = 0;
   2265                 } else {        /* if (cbuf_len > 0) */
   2266 
   2267                     read_tty = 0;
   2268                     write_ssl = 1;
   2269                 }
   2270                 break;
   2271             case SSL_ERROR_WANT_WRITE:
   2272                 BIO_printf(bio_c_out, "write W BLOCK\n");
   2273                 write_ssl = 1;
   2274                 read_tty = 0;
   2275                 break;
   2276             case SSL_ERROR_WANT_ASYNC:
   2277                 BIO_printf(bio_c_out, "write A BLOCK\n");
   2278                 wait_for_async(con);
   2279                 write_ssl = 1;
   2280                 read_tty = 0;
   2281                 break;
   2282             case SSL_ERROR_WANT_READ:
   2283                 BIO_printf(bio_c_out, "write R BLOCK\n");
   2284                 write_tty = 0;
   2285                 read_ssl = 1;
   2286                 write_ssl = 0;
   2287                 break;
   2288             case SSL_ERROR_WANT_X509_LOOKUP:
   2289                 BIO_printf(bio_c_out, "write X BLOCK\n");
   2290                 break;
   2291             case SSL_ERROR_ZERO_RETURN:
   2292                 if (cbuf_len != 0) {
   2293                     BIO_printf(bio_c_out, "shutdown\n");
   2294                     ret = 0;
   2295                     goto shut;
   2296                 } else {
   2297                     read_tty = 1;
   2298                     write_ssl = 0;
   2299                     break;
   2300                 }
   2301 
   2302             case SSL_ERROR_SYSCALL:
   2303                 if ((k != 0) || (cbuf_len != 0)) {
   2304                     BIO_printf(bio_err, "write:errno=%d\n",
   2305                                get_last_socket_error());
   2306                     goto shut;
   2307                 } else {
   2308                     read_tty = 1;
   2309                     write_ssl = 0;
   2310                 }
   2311                 break;
   2312             case SSL_ERROR_WANT_ASYNC_JOB:
   2313                 /* This shouldn't ever happen in s_client - treat as an error */
   2314             case SSL_ERROR_SSL:
   2315                 ERR_print_errors(bio_err);
   2316                 goto shut;
   2317             }
   2318         }
   2319 #if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_VMS)
   2320         /* Assume Windows/DOS/BeOS can always write */
   2321         else if (!ssl_pending && write_tty)
   2322 #else
   2323         else if (!ssl_pending && FD_ISSET(fdout, &writefds))
   2324 #endif
   2325         {
   2326 #ifdef CHARSET_EBCDIC
   2327             ascii2ebcdic(&(sbuf[sbuf_off]), &(sbuf[sbuf_off]), sbuf_len);
   2328 #endif
   2329             i = raw_write_stdout(&(sbuf[sbuf_off]), sbuf_len);
   2330 
   2331             if (i <= 0) {
   2332                 BIO_printf(bio_c_out, "DONE\n");
   2333                 ret = 0;
   2334                 goto shut;
   2335                 /* goto end; */
   2336             }
   2337 
   2338             sbuf_len -= i;;
   2339             sbuf_off += i;
   2340             if (sbuf_len <= 0) {
   2341                 read_ssl = 1;
   2342                 write_tty = 0;
   2343             }
   2344         } else if (ssl_pending || FD_ISSET(SSL_get_fd(con), &readfds)) {
   2345 #ifdef RENEG
   2346             {
   2347                 static int iiii;
   2348                 if (++iiii == 52) {
   2349                     SSL_renegotiate(con);
   2350                     iiii = 0;
   2351                 }
   2352             }
   2353 #endif
   2354             k = SSL_read(con, sbuf, 1024 /* BUFSIZZ */ );
   2355 
   2356             switch (SSL_get_error(con, k)) {
   2357             case SSL_ERROR_NONE:
   2358                 if (k <= 0)
   2359                     goto end;
   2360                 sbuf_off = 0;
   2361                 sbuf_len = k;
   2362 
   2363                 read_ssl = 0;
   2364                 write_tty = 1;
   2365                 break;
   2366             case SSL_ERROR_WANT_ASYNC:
   2367                 BIO_printf(bio_c_out, "read A BLOCK\n");
   2368                 wait_for_async(con);
   2369                 write_tty = 0;
   2370                 read_ssl = 1;
   2371                 if ((read_tty == 0) && (write_ssl == 0))
   2372                     write_ssl = 1;
   2373                 break;
   2374             case SSL_ERROR_WANT_WRITE:
   2375                 BIO_printf(bio_c_out, "read W BLOCK\n");
   2376                 write_ssl = 1;
   2377                 read_tty = 0;
   2378                 break;
   2379             case SSL_ERROR_WANT_READ:
   2380                 BIO_printf(bio_c_out, "read R BLOCK\n");
   2381                 write_tty = 0;
   2382                 read_ssl = 1;
   2383                 if ((read_tty == 0) && (write_ssl == 0))
   2384                     write_ssl = 1;
   2385                 break;
   2386             case SSL_ERROR_WANT_X509_LOOKUP:
   2387                 BIO_printf(bio_c_out, "read X BLOCK\n");
   2388                 break;
   2389             case SSL_ERROR_SYSCALL:
   2390                 ret = get_last_socket_error();
   2391                 if (c_brief)
   2392                     BIO_puts(bio_err, "CONNECTION CLOSED BY SERVER\n");
   2393                 else
   2394                     BIO_printf(bio_err, "read:errno=%d\n", ret);
   2395                 goto shut;
   2396             case SSL_ERROR_ZERO_RETURN:
   2397                 BIO_printf(bio_c_out, "closed\n");
   2398                 ret = 0;
   2399                 goto shut;
   2400             case SSL_ERROR_WANT_ASYNC_JOB:
   2401                 /* This shouldn't ever happen in s_client. Treat as an error */
   2402             case SSL_ERROR_SSL:
   2403                 ERR_print_errors(bio_err);
   2404                 goto shut;
   2405                 /* break; */
   2406             }
   2407         }
   2408 /* OPENSSL_SYS_MSDOS includes OPENSSL_SYS_WINDOWS */
   2409 #if defined(OPENSSL_SYS_MSDOS)
   2410         else if (has_stdin_waiting())
   2411 #else
   2412         else if (FD_ISSET(fdin, &readfds))
   2413 #endif
   2414         {
   2415             if (crlf) {
   2416                 int j, lf_num;
   2417 
   2418                 i = raw_read_stdin(cbuf, BUFSIZZ / 2);
   2419                 lf_num = 0;
   2420                 /* both loops are skipped when i <= 0 */
   2421                 for (j = 0; j < i; j++)
   2422                     if (cbuf[j] == '\n')
   2423                         lf_num++;
   2424                 for (j = i - 1; j >= 0; j--) {
   2425                     cbuf[j + lf_num] = cbuf[j];
   2426                     if (cbuf[j] == '\n') {
   2427                         lf_num--;
   2428                         i++;
   2429                         cbuf[j + lf_num] = '\r';
   2430                     }
   2431                 }
   2432                 assert(lf_num == 0);
   2433             } else
   2434                 i = raw_read_stdin(cbuf, BUFSIZZ);
   2435 #if !defined(OPENSSL_SYS_WINDOWS) && !defined(OPENSSL_SYS_MSDOS)
   2436             if (i == 0)
   2437                 at_eof = 1;
   2438 #endif
   2439 
   2440             if ((!c_ign_eof) && ((i <= 0) || (cbuf[0] == 'Q' && cmdletters))) {
   2441                 BIO_printf(bio_err, "DONE\n");
   2442                 ret = 0;
   2443                 goto shut;
   2444             }
   2445 
   2446             if ((!c_ign_eof) && (cbuf[0] == 'R' && cmdletters)) {
   2447                 BIO_printf(bio_err, "RENEGOTIATING\n");
   2448                 SSL_renegotiate(con);
   2449                 cbuf_len = 0;
   2450             }
   2451 #ifndef OPENSSL_NO_HEARTBEATS
   2452             else if ((!c_ign_eof) && (cbuf[0] == 'B' && cmdletters)) {
   2453                 BIO_printf(bio_err, "HEARTBEATING\n");
   2454                 SSL_heartbeat(con);
   2455                 cbuf_len = 0;
   2456             }
   2457 #endif
   2458             else {
   2459                 cbuf_len = i;
   2460                 cbuf_off = 0;
   2461 #ifdef CHARSET_EBCDIC
   2462                 ebcdic2ascii(cbuf, cbuf, i);
   2463 #endif
   2464             }
   2465 
   2466             write_ssl = 1;
   2467             read_tty = 0;
   2468         }
   2469     }
   2470 
   2471     ret = 0;
   2472  shut:
   2473     if (in_init)
   2474         print_stuff(bio_c_out, con, full_log);
   2475     do_ssl_shutdown(con);
   2476 
   2477     /*
   2478      * Give the socket time to send its last data before we close it.
   2479      * No amount of setting SO_LINGER etc on the socket seems to persuade
   2480      * Windows to send the data before closing the socket...but sleeping
   2481      * for a short time seems to do it (units in ms)
   2482      * TODO: Find a better way to do this
   2483      */
   2484 #if defined(OPENSSL_SYS_WINDOWS)
   2485     Sleep(50);
   2486 #elif defined(OPENSSL_SYS_CYGWIN)
   2487     usleep(50000);
   2488 #endif
   2489 
   2490     /*
   2491      * If we ended with an alert being sent, but still with data in the
   2492      * network buffer to be read, then calling BIO_closesocket() will
   2493      * result in a TCP-RST being sent. On some platforms (notably
   2494      * Windows) then this will result in the peer immediately abandoning
   2495      * the connection including any buffered alert data before it has
   2496      * had a chance to be read. Shutting down the sending side first,
   2497      * and then closing the socket sends TCP-FIN first followed by
   2498      * TCP-RST. This seems to allow the peer to read the alert data.
   2499      */
   2500     shutdown(SSL_get_fd(con), 1); /* SHUT_WR */
   2501     BIO_closesocket(SSL_get_fd(con));
   2502  end:
   2503     if (con != NULL) {
   2504         if (prexit != 0)
   2505             print_stuff(bio_c_out, con, 1);
   2506         SSL_free(con);
   2507     }
   2508 #if !defined(OPENSSL_NO_NEXTPROTONEG)
   2509     OPENSSL_free(next_proto.data);
   2510 #endif
   2511     SSL_CTX_free(ctx);
   2512     X509_free(cert);
   2513     sk_X509_CRL_pop_free(crls, X509_CRL_free);
   2514     EVP_PKEY_free(key);
   2515     sk_X509_pop_free(chain, X509_free);
   2516     OPENSSL_free(pass);
   2517 #ifndef OPENSSL_NO_SRP
   2518     OPENSSL_free(srp_arg.srppassin);
   2519 #endif
   2520     OPENSSL_free(connectstr);
   2521     OPENSSL_free(host);
   2522     OPENSSL_free(port);
   2523     X509_VERIFY_PARAM_free(vpm);
   2524     ssl_excert_free(exc);
   2525     sk_OPENSSL_STRING_free(ssl_args);
   2526     sk_OPENSSL_STRING_free(dane_tlsa_rrset);
   2527     SSL_CONF_CTX_free(cctx);
   2528     OPENSSL_clear_free(cbuf, BUFSIZZ);
   2529     OPENSSL_clear_free(sbuf, BUFSIZZ);
   2530     OPENSSL_clear_free(mbuf, BUFSIZZ);
   2531     release_engine(e);
   2532     BIO_free(bio_c_out);
   2533     bio_c_out = NULL;
   2534     BIO_free(bio_c_msg);
   2535     bio_c_msg = NULL;
   2536     return (ret);
   2537 }
   2538 
   2539 static void print_stuff(BIO *bio, SSL *s, int full)
   2540 {
   2541     X509 *peer = NULL;
   2542     char buf[BUFSIZ];
   2543     STACK_OF(X509) *sk;
   2544     STACK_OF(X509_NAME) *sk2;
   2545     const SSL_CIPHER *c;
   2546     X509_NAME *xn;
   2547     int i;
   2548 #ifndef OPENSSL_NO_COMP
   2549     const COMP_METHOD *comp, *expansion;
   2550 #endif
   2551     unsigned char *exportedkeymat;
   2552 #ifndef OPENSSL_NO_CT
   2553     const SSL_CTX *ctx = SSL_get_SSL_CTX(s);
   2554 #endif
   2555 
   2556     if (full) {
   2557         int got_a_chain = 0;
   2558 
   2559         sk = SSL_get_peer_cert_chain(s);
   2560         if (sk != NULL) {
   2561             got_a_chain = 1;
   2562 
   2563             BIO_printf(bio, "---\nCertificate chain\n");
   2564             for (i = 0; i < sk_X509_num(sk); i++) {
   2565                 X509_NAME_oneline(X509_get_subject_name(sk_X509_value(sk, i)),
   2566                                   buf, sizeof(buf));
   2567                 BIO_printf(bio, "%2d s:%s\n", i, buf);
   2568                 X509_NAME_oneline(X509_get_issuer_name(sk_X509_value(sk, i)),
   2569                                   buf, sizeof(buf));
   2570                 BIO_printf(bio, "   i:%s\n", buf);
   2571                 if (c_showcerts)
   2572                     PEM_write_bio_X509(bio, sk_X509_value(sk, i));
   2573             }
   2574         }
   2575 
   2576         BIO_printf(bio, "---\n");
   2577         peer = SSL_get_peer_certificate(s);
   2578         if (peer != NULL) {
   2579             BIO_printf(bio, "Server certificate\n");
   2580 
   2581             /* Redundant if we showed the whole chain */
   2582             if (!(c_showcerts && got_a_chain))
   2583                 PEM_write_bio_X509(bio, peer);
   2584             X509_NAME_oneline(X509_get_subject_name(peer), buf, sizeof(buf));
   2585             BIO_printf(bio, "subject=%s\n", buf);
   2586             X509_NAME_oneline(X509_get_issuer_name(peer), buf, sizeof(buf));
   2587             BIO_printf(bio, "issuer=%s\n", buf);
   2588         } else
   2589             BIO_printf(bio, "no peer certificate available\n");
   2590 
   2591         sk2 = SSL_get_client_CA_list(s);
   2592         if ((sk2 != NULL) && (sk_X509_NAME_num(sk2) > 0)) {
   2593             BIO_printf(bio, "---\nAcceptable client certificate CA names\n");
   2594             for (i = 0; i < sk_X509_NAME_num(sk2); i++) {
   2595                 xn = sk_X509_NAME_value(sk2, i);
   2596                 X509_NAME_oneline(xn, buf, sizeof(buf));
   2597                 BIO_write(bio, buf, strlen(buf));
   2598                 BIO_write(bio, "\n", 1);
   2599             }
   2600         } else {
   2601             BIO_printf(bio, "---\nNo client certificate CA names sent\n");
   2602         }
   2603 
   2604         ssl_print_sigalgs(bio, s);
   2605         ssl_print_tmp_key(bio, s);
   2606 
   2607 #ifndef OPENSSL_NO_CT
   2608         /*
   2609          * When the SSL session is anonymous, or resumed via an abbreviated
   2610          * handshake, no SCTs are provided as part of the handshake.  While in
   2611          * a resumed session SCTs may be present in the session's certificate,
   2612          * no callbacks are invoked to revalidate these, and in any case that
   2613          * set of SCTs may be incomplete.  Thus it makes little sense to
   2614          * attempt to display SCTs from a resumed session's certificate, and of
   2615          * course none are associated with an anonymous peer.
   2616          */
   2617         if (peer != NULL && !SSL_session_reused(s) && SSL_ct_is_enabled(s)) {
   2618             const STACK_OF(SCT) *scts = SSL_get0_peer_scts(s);
   2619             int sct_count = scts != NULL ? sk_SCT_num(scts) : 0;
   2620 
   2621             BIO_printf(bio, "---\nSCTs present (%i)\n", sct_count);
   2622             if (sct_count > 0) {
   2623                 const CTLOG_STORE *log_store = SSL_CTX_get0_ctlog_store(ctx);
   2624 
   2625                 BIO_printf(bio, "---\n");
   2626                 for (i = 0; i < sct_count; ++i) {
   2627                     SCT *sct = sk_SCT_value(scts, i);
   2628 
   2629                     BIO_printf(bio, "SCT validation status: %s\n",
   2630                                SCT_validation_status_string(sct));
   2631                     SCT_print(sct, bio, 0, log_store);
   2632                     if (i < sct_count - 1)
   2633                         BIO_printf(bio, "\n---\n");
   2634                 }
   2635                 BIO_printf(bio, "\n");
   2636             }
   2637         }
   2638 #endif
   2639 
   2640         BIO_printf(bio,
   2641                    "---\nSSL handshake has read %"BIO_PRI64"u"
   2642                    " bytes and written %"BIO_PRI64"u bytes\n",
   2643                    BIO_number_read(SSL_get_rbio(s)),
   2644                    BIO_number_written(SSL_get_wbio(s)));
   2645     }
   2646     print_verify_detail(s, bio);
   2647     BIO_printf(bio, (SSL_session_reused(s) ? "---\nReused, " : "---\nNew, "));
   2648     c = SSL_get_current_cipher(s);
   2649     BIO_printf(bio, "%s, Cipher is %s\n",
   2650                SSL_CIPHER_get_version(c), SSL_CIPHER_get_name(c));
   2651     if (peer != NULL) {
   2652         EVP_PKEY *pktmp;
   2653 
   2654         pktmp = X509_get0_pubkey(peer);
   2655         BIO_printf(bio, "Server public key is %d bit\n",
   2656                    EVP_PKEY_bits(pktmp));
   2657     }
   2658     BIO_printf(bio, "Secure Renegotiation IS%s supported\n",
   2659                SSL_get_secure_renegotiation_support(s) ? "" : " NOT");
   2660 #ifndef OPENSSL_NO_COMP
   2661     comp = SSL_get_current_compression(s);
   2662     expansion = SSL_get_current_expansion(s);
   2663     BIO_printf(bio, "Compression: %s\n",
   2664                comp ? SSL_COMP_get_name(comp) : "NONE");
   2665     BIO_printf(bio, "Expansion: %s\n",
   2666                expansion ? SSL_COMP_get_name(expansion) : "NONE");
   2667 #endif
   2668 
   2669 #ifdef SSL_DEBUG
   2670     {
   2671         /* Print out local port of connection: useful for debugging */
   2672         int sock;
   2673         union BIO_sock_info_u info;
   2674 
   2675         sock = SSL_get_fd(s);
   2676         if ((info.addr = BIO_ADDR_new()) != NULL
   2677             && BIO_sock_info(sock, BIO_SOCK_INFO_ADDRESS, &info)) {
   2678             BIO_printf(bio_c_out, "LOCAL PORT is %u\n",
   2679                        ntohs(BIO_ADDR_rawport(info.addr)));
   2680         }
   2681         BIO_ADDR_free(info.addr);
   2682     }
   2683 #endif
   2684 
   2685 #if !defined(OPENSSL_NO_NEXTPROTONEG)
   2686     if (next_proto.status != -1) {
   2687         const unsigned char *proto;
   2688         unsigned int proto_len;
   2689         SSL_get0_next_proto_negotiated(s, &proto, &proto_len);
   2690         BIO_printf(bio, "Next protocol: (%d) ", next_proto.status);
   2691         BIO_write(bio, proto, proto_len);
   2692         BIO_write(bio, "\n", 1);
   2693     }
   2694 #endif
   2695     {
   2696         const unsigned char *proto;
   2697         unsigned int proto_len;
   2698         SSL_get0_alpn_selected(s, &proto, &proto_len);
   2699         if (proto_len > 0) {
   2700             BIO_printf(bio, "ALPN protocol: ");
   2701             BIO_write(bio, proto, proto_len);
   2702             BIO_write(bio, "\n", 1);
   2703         } else
   2704             BIO_printf(bio, "No ALPN negotiated\n");
   2705     }
   2706 
   2707 #ifndef OPENSSL_NO_SRTP
   2708     {
   2709         SRTP_PROTECTION_PROFILE *srtp_profile =
   2710             SSL_get_selected_srtp_profile(s);
   2711 
   2712         if (srtp_profile)
   2713             BIO_printf(bio, "SRTP Extension negotiated, profile=%s\n",
   2714                        srtp_profile->name);
   2715     }
   2716 #endif
   2717 
   2718     SSL_SESSION_print(bio, SSL_get_session(s));
   2719     if (SSL_get_session(s) != NULL && keymatexportlabel != NULL) {
   2720         BIO_printf(bio, "Keying material exporter:\n");
   2721         BIO_printf(bio, "    Label: '%s'\n", keymatexportlabel);
   2722         BIO_printf(bio, "    Length: %i bytes\n", keymatexportlen);
   2723         exportedkeymat = app_malloc(keymatexportlen, "export key");
   2724         if (!SSL_export_keying_material(s, exportedkeymat,
   2725                                         keymatexportlen,
   2726                                         keymatexportlabel,
   2727                                         strlen(keymatexportlabel),
   2728                                         NULL, 0, 0)) {
   2729             BIO_printf(bio, "    Error\n");
   2730         } else {
   2731             BIO_printf(bio, "    Keying material: ");
   2732             for (i = 0; i < keymatexportlen; i++)
   2733                 BIO_printf(bio, "%02X", exportedkeymat[i]);
   2734             BIO_printf(bio, "\n");
   2735         }
   2736         OPENSSL_free(exportedkeymat);
   2737     }
   2738     BIO_printf(bio, "---\n");
   2739     X509_free(peer);
   2740     /* flush, or debugging output gets mixed with http response */
   2741     (void)BIO_flush(bio);
   2742 }
   2743 
   2744 # ifndef OPENSSL_NO_OCSP
   2745 static int ocsp_resp_cb(SSL *s, void *arg)
   2746 {
   2747     const unsigned char *p;
   2748     int len;
   2749     OCSP_RESPONSE *rsp;
   2750     len = SSL_get_tlsext_status_ocsp_resp(s, &p);
   2751     BIO_puts(arg, "OCSP response: ");
   2752     if (!p) {
   2753         BIO_puts(arg, "no response sent\n");
   2754         return 1;
   2755     }
   2756     rsp = d2i_OCSP_RESPONSE(NULL, &p, len);
   2757     if (!rsp) {
   2758         BIO_puts(arg, "response parse error\n");
   2759         BIO_dump_indent(arg, (char *)p, len, 4);
   2760         return 0;
   2761     }
   2762     BIO_puts(arg, "\n======================================\n");
   2763     OCSP_RESPONSE_print(arg, rsp, 0);
   2764     BIO_puts(arg, "======================================\n");
   2765     OCSP_RESPONSE_free(rsp);
   2766     return 1;
   2767 }
   2768 # endif
   2769 
   2770 #endif                          /* OPENSSL_NO_SOCK */
   2771