Fix security hole.
[openssl.git] / ssl / s3_srvr.c
index 233de6ca906af7f12cd2defe8598415589252c66..21b93c1ba4a6c5f3dc5394a1b14e366978fa4fd4 100644 (file)
@@ -945,7 +945,8 @@ SSL *s;
                        if ((rsa == NULL) && (s->ctx->default_cert->rsa_tmp_cb != NULL))
                                {
                                rsa=s->ctx->default_cert->rsa_tmp_cb(s,
-                                       !SSL_C_IS_EXPORT(s->s3->tmp.new_cipher));
+                                     SSL_C_IS_EXPORT(s->s3->tmp.new_cipher),
+                                     SSL_C_EXPORT_PKEYLENGTH(s->s3->tmp.new_cipher));
                                CRYPTO_add(&rsa->references,1,CRYPTO_LOCK_RSA);
                                cert->rsa_tmp=rsa;
                                }
@@ -967,7 +968,8 @@ SSL *s;
                        dhp=cert->dh_tmp;
                        if ((dhp == NULL) && (cert->dh_tmp_cb != NULL))
                                dhp=cert->dh_tmp_cb(s,
-                                       !SSL_C_IS_EXPORT(s->s3->tmp.new_cipher));
+                                     !SSL_C_IS_EXPORT(s->s3->tmp.new_cipher),
+                                     SSL_C_EXPORT_PKEYLENGTH(s->s3->tmp.new_cipher));
                        if (dhp == NULL)
                                {
                                al=SSL_AD_HANDSHAKE_FAILURE;
@@ -1681,6 +1683,8 @@ SSL *s;
        if (s->session->peer != NULL)
                X509_free(s->session->peer);
        s->session->peer=(X509 *)sk_shift(sk);
+       s->session->cert->cert_chain=sk;
+       sk=NULL;
 
        ret=1;
        if (0)