Storing it in SSL_CTX is incorrect as it may go away and get destructed
earlier, also it'll yield invalid results in SelectSNIContextCallback.
Use `SSL_get_app_data()` instead.
fix #7484
Signed-off-by: Timothy J Fontaine <tjfontaine@gmail.com>
#ifdef SSL_CTRL_SET_TLSEXT_SERVERNAME_CB
if (is_server()) {
SSL_CTX_set_tlsext_servername_callback(sc_->ctx_, SelectSNIContextCallback);
- SSL_CTX_set_tlsext_servername_arg(sc_->ctx_, this);
}
#endif // SSL_CTRL_SET_TLSEXT_SERVERNAME_CB
int TLSCallbacks::SelectSNIContextCallback(SSL* s, int* ad, void* arg) {
- TLSCallbacks* p = static_cast<TLSCallbacks*>(arg);
+ TLSCallbacks* p = static_cast<TLSCallbacks*>(SSL_get_app_data(s));
Environment* env = p->env();
const char* servername = SSL_get_servername(s, TLSEXT_NAMETYPE_host_name);