CRYPTO_new_ex_data(ssl_meth,s,&s->ex_data);
CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL, s, &s->ex_data);
SSL *SSL_new(SSL_CTX *ctx)	{	SSL *s;	if (ctx == NULL)		{		SSLerr(SSL_F_SSL_NEW,SSL_R_NULL_SSL_CTX);		return(NULL);		}	if (ctx->method == NULL)		{		SSLerr(SSL_F_SSL_NEW,SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION);		return(NULL);		}	s=(SSL *)OPENSSL_malloc(sizeof(SSL));	if (s == NULL) goto err;	memset(s,0,sizeof(SSL));#ifndef	OPENSSL_NO_KRB5	s->kssl_ctx = kssl_ctx_new();#endif	/* OPENSSL_NO_KRB5 */	if (ctx->cert != NULL)		{		/* Earlier library versions used to copy the pointer to		 * the CERT, not its contents; only when setting new		 * parameters for the per-SSL copy, ssl_cert_new would be		 * called (and the direct reference to the per-SSL_CTX		 * settings would be lost, but those still were indirectly		 * accessed for various purposes, and for that reason they		 * used to be known as s->ctx->default_cert).		 * Now we don't look at the SSL_CTX's CERT after having		 * duplicated it once. */		s->cert = ssl_cert_dup(ctx->cert);		if (s->cert == NULL)			goto err;		}	else		s->cert=NULL; /* Cannot really happen (see SSL_CTX_new) */	s->sid_ctx_length=ctx->sid_ctx_length;	memcpy(&s->sid_ctx,&ctx->sid_ctx,sizeof(s->sid_ctx));	s->verify_mode=ctx->verify_mode;	s->verify_depth=ctx->verify_depth;	s->verify_callback=ctx->default_verify_callback;	s->generate_session_id=ctx->generate_session_id;	s->purpose = ctx->purpose;	s->trust = ctx->trust;	CRYPTO_add(&ctx->references,1,CRYPTO_LOCK_SSL_CTX);	s->ctx=ctx;	s->verify_result=X509_V_OK;	s->method=ctx->method;	if (!s->method->ssl_new(s))		goto err;	s->quiet_shutdown=ctx->quiet_shutdown;	s->references=1;	s->server=(ctx->method->ssl_accept == ssl_undefined_function)?0:1;	s->options=ctx->options;	s->mode=ctx->mode;	s->read_ahead=ctx->read_ahead; /* used to happen in SSL_clear */	SSL_clear(s);	CRYPTO_new_ex_data(ssl_meth,s,&s->ex_data);	return(s);err:	if (s != NULL)		{		if (s->cert != NULL)			ssl_cert_free(s->cert);		if (s->ctx != NULL)			SSL_CTX_free(s->ctx); /* decrement reference count */		OPENSSL_free(s);		}	SSLerr(SSL_F_SSL_NEW,ERR_R_MALLOC_FAILURE);	return(NULL);	}