Unverified Commit 69039fd1 authored by Johannes Schindelin's avatar Johannes Schindelin Committed by Daniel Stenberg
Browse files

getinfo: access SSL internals via Curl_ssl



In the ongoing endeavor to abstract out all SSL backend-specific
functionality, this is the next step: Instead of hard-coding how the
different SSL backends access their internal data in getinfo.c, let's
implement backend-specific functions to do that task.

This will also allow for switching SSL backends as a runtime option.

Signed-off-by: default avatarJohannes Schindelin <johannes.schindelin@gmx.de>
parent 118b074f
Loading
Loading
Loading
Loading
+5 −26
Original line number Diff line number Diff line
@@ -360,46 +360,25 @@ static CURLcode getinfo_slist(struct Curl_easy *data, CURLINFO info,
      struct curl_tlssessioninfo **tsip = (struct curl_tlssessioninfo **)
                                          param_slistp;
      struct curl_tlssessioninfo *tsi = &data->tsi;
#ifdef USE_SSL
      struct connectdata *conn = data->easy_conn;
#endif

      *tsip = tsi;
      tsi->backend = Curl_ssl_backend();
      tsi->internals = NULL;

#ifdef USE_SSL
      if(conn && tsi->backend != CURLSSLBACKEND_NONE) {
        unsigned int i;
        for(i = 0; i < (sizeof(conn->ssl) / sizeof(conn->ssl[0])); ++i) {
          if(conn->ssl[i].use) {
#if defined(USE_AXTLS)
            tsi->internals = (void *)conn->ssl[i].ssl;
#elif defined(USE_CYASSL)
            tsi->internals = (void *)conn->ssl[i].handle;
#elif defined(USE_DARWINSSL)
            tsi->internals = (void *)conn->ssl[i].ssl_ctx;
#elif defined(USE_GNUTLS)
            tsi->internals = (void *)conn->ssl[i].session;
#elif defined(USE_GSKIT)
            tsi->internals = (void *)conn->ssl[i].handle;
#elif defined(USE_MBEDTLS)
            tsi->internals = (void *)&conn->ssl[i].ssl;
#elif defined(USE_NSS)
            tsi->internals = (void *)conn->ssl[i].handle;
#elif defined(USE_OPENSSL)
            /* Legacy: CURLINFO_TLS_SESSION must return an SSL_CTX pointer. */
            tsi->internals = ((info == CURLINFO_TLS_SESSION) ?
                              (void *)conn->ssl[i].ctx :
                              (void *)conn->ssl[i].handle);
#elif defined(USE_POLARSSL)
            tsi->internals = (void *)&conn->ssl[i].ssl;
#elif defined(USE_SCHANNEL)
            tsi->internals = (void *)&conn->ssl[i].ctxt->ctxt_handle;
#elif defined(USE_SSL)
#error "SSL backend specific information missing for CURLINFO_TLS_SSL_PTR"
#endif
            tsi->internals = Curl_ssl->get_internals(&conn->ssl[i], info);
            break;
          }
        }
      }
#endif
    }
    break;
  default:
+8 −0
Original line number Diff line number Diff line
@@ -681,6 +681,13 @@ static CURLcode Curl_axtls_random(struct Curl_easy *data,
  return CURLE_OK;
}

static void *Curl_axtls_get_internals(struct ssl_connect_data *connssl,
                                      CURLINFO info UNUSED_PARAM)
{
  (void)info;
  return connssl->ssl;
}

const struct Curl_ssl Curl_ssl_axtls = {
  "axtls",                        /* name */

@@ -705,6 +712,7 @@ const struct Curl_ssl Curl_ssl_axtls = {
  Curl_none_cert_status_request,  /* cert_status_request */
  Curl_axtls_connect,             /* connect */
  Curl_axtls_connect_nonblocking, /* connect_nonblocking */
  Curl_axtls_get_internals,       /* get_internals */
  Curl_axtls_close,               /* close */
  Curl_none_close_all,            /* close_all */
  Curl_axtls_session_free,        /* session_free */
+8 −0
Original line number Diff line number Diff line
@@ -959,6 +959,13 @@ static void Curl_cyassl_sha256sum(const unsigned char *tmp, /* input */
  Sha256Final(&SHA256pw, sha256sum);
}

static void *Curl_cyassl_get_internals(struct ssl_connect_data *connssl,
                                       CURLINFO info UNUSED_PARAM)
{
  (void)info;
  return connssl->handle;
}

const struct Curl_ssl Curl_ssl_cyassl = {
  "cyassl",                        /* name */

@@ -982,6 +989,7 @@ const struct Curl_ssl Curl_ssl_cyassl = {
  Curl_none_cert_status_request,   /* cert_status_request */
  Curl_cyassl_connect,             /* connect */
  Curl_cyassl_connect_nonblocking, /* connect_nonblocking */
  Curl_cyassl_get_internals,       /* get_internals */
  Curl_cyassl_close,               /* close */
  Curl_none_close_all,             /* close_all */
  Curl_cyassl_session_free,        /* session_free */
+8 −0
Original line number Diff line number Diff line
@@ -2871,6 +2871,13 @@ static ssize_t darwinssl_recv(struct connectdata *conn,
  return (ssize_t)processed;
}

static void *Curl_darwinssl_get_internals(struct ssl_connect_data *connssl,
                                          CURLINFO info UNUSED_PARAM)
{
  (void)info;
  return connssl->ssl_ctx;
}

const struct Curl_ssl Curl_ssl_darwinssl = {
  "darwinssl",                        /* name */

@@ -2894,6 +2901,7 @@ const struct Curl_ssl Curl_ssl_darwinssl = {
  Curl_none_cert_status_request,      /* cert_status_request */
  Curl_darwinssl_connect,             /* connect */
  Curl_darwinssl_connect_nonblocking, /* connect_nonblocking */
  Curl_darwinssl_get_internals,       /* get_internals */
  Curl_darwinssl_close,               /* close */
  Curl_none_close_all,                /* close_all */
  Curl_darwinssl_session_free,        /* session_free */
+8 −0
Original line number Diff line number Diff line
@@ -1333,6 +1333,13 @@ static int Curl_gskit_check_cxn(struct connectdata *cxn)
  return -1;  /* connection status unknown */
}

static void *Curl_gskit_get_internals(struct ssl_connect_data *connssl,
                                      CURLINFO info UNUSED_PARAM)
{
  (void)info;
  return connssl->handle;
}

const struct Curl_ssl Curl_ssl_gskit = {
  "gskit",                        /* name */

@@ -1354,6 +1361,7 @@ const struct Curl_ssl Curl_ssl_gskit = {
  Curl_none_cert_status_request,  /* cert_status_request */
  Curl_gskit_connect,             /* connect */
  Curl_gskit_connect_nonblocking, /* connect_nonblocking */
  Curl_gskit_get_internals,       /* get_internals */
  Curl_gskit_close,               /* close */
  Curl_none_close_all,            /* close_all */
  /* No session handling for GSKit */
Loading