GH787: Fix ALPN

* Perform ALPN after the SNI callback; the SSL_CTX may change due to
  that processing
* Add flags to indicate that we actually sent ALPN, to properly error
  out if unexpectedly received.
* clean up ssl3_free() no need to explicitly clear when doing memset
* document ALPN functions

Signed-off-by: Rich Salz <rsalz@openssl.org>
Reviewed-by: Emilia Käsper <emilia@openssl.org>
This commit is contained in:
Todd Short
2016-03-05 08:47:55 -05:00
committed by Rich Salz
parent f18ce93488
commit 817cd0d52f
13 changed files with 432 additions and 151 deletions

View File

@@ -445,7 +445,7 @@ static char *srtp_profiles = NULL;
/* This the context that we pass to next_proto_cb */
typedef struct tlsextnextprotoctx_st {
unsigned char *data;
unsigned short len;
size_t len;
int status;
} tlsextnextprotoctx;
@@ -1634,7 +1634,7 @@ int s_client_main(int argc, char **argv)
SSL_CTX_set_next_proto_select_cb(ctx, next_proto_cb, &next_proto);
#endif
if (alpn_in) {
unsigned short alpn_len;
size_t alpn_len;
unsigned char *alpn = next_protos_parse(&alpn_len, alpn_in);
if (alpn == NULL) {