Changeset 564f33f in mod_gnutls for src/gnutls_io.c


Ignore:
Timestamp:
Dec 17, 2018, 4:39:50 PM (22 months ago)
Author:
Fiona Klute <fiona.klute@…>
Branches:
debian/master, master, proxy-ticket
Children:
c7710cf
Parents:
0378c22
Message:

Move SNI and ALPN setup for proxy connections to gnutls_proxy.c

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/gnutls_io.c

    r0378c22 r564f33f  
    2020#include "mod_gnutls.h"
    2121#include "gnutls_proxy.h"
    22 #include <apr_strings.h>
    2322
    2423#ifdef APLOG_USE_MODULE
     
    385384    }
    386385
    387     /* Enable SNI for proxy connections */
     386    /* Enable SNI and ALPN for proxy connections */
    388387    if (ctxt->is_proxy == GNUTLS_ENABLED_TRUE)
    389     {
    390         /* Get peer hostname from note left by mod_proxy */
    391         const char *peer_hostname =
    392             apr_table_get(ctxt->c->notes, PROXY_SNI_NOTE);
    393         /* Used only as target for apr_ipsubnet_create() */
    394         apr_ipsubnet_t *probe;
    395         /* Check if the note is present (!= NULL) and NOT an IP
    396          * address */
    397         if ((peer_hostname) != NULL
    398             && (apr_ipsubnet_create(&probe, peer_hostname, NULL, ctxt->c->pool)
    399                 != APR_SUCCESS))
    400         {
    401             ret = gnutls_server_name_set(ctxt->session, GNUTLS_NAME_DNS,
    402                                          peer_hostname, strlen(peer_hostname));
    403             if (ret != GNUTLS_E_SUCCESS)
    404                 ap_log_cerror(APLOG_MARK, APLOG_ERR, ret, ctxt->c,
    405                               "Could not set SNI '%s' for proxy connection: "
    406                               "%s (%d)",
    407                               peer_hostname, gnutls_strerror(ret), ret);
    408         }
    409 
    410         const char *proxy_alpn =
    411             apr_table_get(ctxt->c->notes, PROXY_ALPN_NOTE);
    412         if (proxy_alpn != NULL)
    413         {
    414             // TODO: mod_ssl ssl_engine_io.c does some tokenization of
    415             // the input string, so it looks like the API allows
    416             // multiple protocols.
    417             gnutls_datum_t alpn_proto = {
    418                 .data = (unsigned char *) apr_pstrdup(ctxt->c->pool, proxy_alpn),
    419                 .size = strlen(proxy_alpn)
    420             };
    421             ap_log_cerror(APLOG_MARK, APLOG_DEBUG, APR_SUCCESS, ctxt->c,
    422                           "%s: proxy module requests ALPN proto '%s', "
    423                           "length %" APR_SIZE_T_FMT ".",
    424                           __func__, proxy_alpn, strlen(proxy_alpn));
    425             ret = gnutls_alpn_set_protocols(ctxt->session,
    426                                             &alpn_proto,
    427                                             1 /* number of proposals */,
    428                                             0 /* flags */);
    429             if (ret != GNUTLS_E_SUCCESS)
    430                 ap_log_cerror(APLOG_MARK, APLOG_ERR, ret, ctxt->c,
    431                               "Could not set ALPN proposal '%s' for proxy "
    432                               "connection: %s (%d)",
    433                               proxy_alpn, gnutls_strerror(ret), ret);
    434         }
    435     }
     388        mgs_set_proxy_handshake_ext(ctxt);
    436389
    437390tryagain:
Note: See TracChangeset for help on using the changeset viewer.