typedef struct _php_openssl_netstream_data_t {
php_netstream_data_t s;
SSL *ssl_handle;
+ SSL_CTX *ctx;
struct timeval connect_timeout;
int enable_on_connect;
int is_client;
SSL_free(sslsock->ssl_handle);
sslsock->ssl_handle = NULL;
}
+ if (sslsock->ctx) {
+ SSL_CTX_free(sslsock->ctx);
+ sslsock->ctx = NULL;
+ }
if (sslsock->s.socket != SOCK_ERR) {
#ifdef PHP_WIN32
/* prevent more data from coming in */
php_stream_xport_crypto_param *cparam
TSRMLS_DC)
{
- SSL_CTX *ctx;
SSL_METHOD *method;
if (sslsock->ssl_handle) {
}
- ctx = SSL_CTX_new(method);
- if (ctx == NULL) {
+ sslsock->ctx = SSL_CTX_new(method);
+ if (sslsock->ctx == NULL) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "failed to create an SSL context");
return -1;
}
- SSL_CTX_set_options(ctx, SSL_OP_ALL);
+ SSL_CTX_set_options(sslsock->ctx, SSL_OP_ALL);
- sslsock->ssl_handle = php_SSL_new_from_context(ctx, stream TSRMLS_CC);
+ sslsock->ssl_handle = php_SSL_new_from_context(sslsock->ctx, stream TSRMLS_CC);
if (sslsock->ssl_handle == NULL) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "failed to create an SSL handle");
- SSL_CTX_free(ctx);
+ SSL_CTX_free(sslsock->ctx);
+ sslsock->ctx = NULL;
return -1;
}
* connecting */
sslsock->s.socket = -1;
+ /* Initialize context as NULL */
+ sslsock->ctx = NULL;
+
stream = php_stream_alloc_rel(&php_openssl_socket_ops, sslsock, persistent_id, "r+");
if (stream == NULL) {