Disable SSL_peek until it is fixed.
[openssl.git] / ssl / s3_lib.c
index c4b49aaedf4f35cdd72b182f6a959da868bf6e44..184d4f47ff3eb0c36a5184d12786963a31b97fd1 100644 (file)
@@ -648,7 +648,7 @@ int ssl3_new(SSL *s)
        {
        SSL3_STATE *s3;
 
-       if ((s3=Malloc(sizeof *s3)) == NULL) goto err;
+       if ((s3=OPENSSL_malloc(sizeof *s3)) == NULL) goto err;
        memset(s3,0,sizeof *s3);
 
        s->s3=s3;
@@ -666,11 +666,11 @@ void ssl3_free(SSL *s)
 
        ssl3_cleanup_key_block(s);
        if (s->s3->rbuf.buf != NULL)
-               Free(s->s3->rbuf.buf);
+               OPENSSL_free(s->s3->rbuf.buf);
        if (s->s3->wbuf.buf != NULL)
-               Free(s->s3->wbuf.buf);
+               OPENSSL_free(s->s3->wbuf.buf);
        if (s->s3->rrec.comp != NULL)
-               Free(s->s3->rrec.comp);
+               OPENSSL_free(s->s3->rrec.comp);
 #ifndef NO_DH
        if (s->s3->tmp.dh != NULL)
                DH_free(s->s3->tmp.dh);
@@ -678,7 +678,7 @@ void ssl3_free(SSL *s)
        if (s->s3->tmp.ca_names != NULL)
                sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free);
        memset(s->s3,0,sizeof *s->s3);
-       Free(s->s3);
+       OPENSSL_free(s->s3);
        s->s3=NULL;
        }
 
@@ -692,7 +692,7 @@ void ssl3_clear(SSL *s)
 
        if (s->s3->rrec.comp != NULL)
                {
-               Free(s->s3->rrec.comp);
+               OPENSSL_free(s->s3->rrec.comp);
                s->s3->rrec.comp=NULL;
                }
 #ifndef NO_DH
@@ -771,14 +771,16 @@ long ssl3_ctrl(SSL *s, int cmd, long larg, char *parg)
        case SSL_CTRL_SET_TMP_RSA:
                {
                        RSA *rsa = (RSA *)parg;
-                       if (rsa == NULL) {
+                       if (rsa == NULL)
+                               {
                                SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER);
                                return(ret);
-                       }
-                       if ((rsa = RSAPrivateKey_dup(rsa)) == NULL) {
+                               }
+                       if ((rsa = RSAPrivateKey_dup(rsa)) == NULL)
+                               {
                                SSLerr(SSL_F_SSL3_CTRL, ERR_R_RSA_LIB);
                                return(ret);
-                       }
+                               }
                        if (s->cert->rsa_tmp != NULL)
                                RSA_free(s->cert->rsa_tmp);
                        s->cert->rsa_tmp = rsa;
@@ -796,19 +798,25 @@ long ssl3_ctrl(SSL *s, int cmd, long larg, char *parg)
        case SSL_CTRL_SET_TMP_DH:
                {
                        DH *dh = (DH *)parg;
-                       if (dh == NULL) {
+                       if (dh == NULL)
+                               {
                                SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER);
                                return(ret);
-                       }
-                       if ((dh = DHparams_dup(dh)) == NULL) {
+                               }
+                       if ((dh = DHparams_dup(dh)) == NULL)
+                               {
                                SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB);
                                return(ret);
-                       }
-                       if (!DH_generate_key(dh)) {
-                               DH_free(dh);
-                               SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB);
-                               return(ret);
-                       }
+                               }
+                       if (!(s->options & SSL_OP_SINGLE_DH_USE))
+                               {
+                               if (!DH_generate_key(dh))
+                                       {
+                                       DH_free(dh);
+                                       SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB);
+                                       return(ret);
+                                       }
+                               }
                        if (s->cert->dh_tmp != NULL)
                                DH_free(s->cert->dh_tmp);
                        s->cert->dh_tmp = dh;
@@ -843,8 +851,8 @@ long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)())
                0)
                {
                if (!ssl_cert_inst(&s->cert))
-                       {
-                       SSLerr(SSL_F_SSL3_CTRL, ERR_R_MALLOC_FAILURE);
+                       {
+                       SSLerr(SSL_F_SSL3_CALLBACK_CTRL, ERR_R_MALLOC_FAILURE);
                        return(0);
                        }
                }
@@ -929,23 +937,26 @@ long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, char *parg)
        case SSL_CTRL_SET_TMP_DH:
                {
                DH *new=NULL,*dh;
-               int rret=0;
 
                dh=(DH *)parg;
-               if (    ((new=DHparams_dup(dh)) == NULL) ||
-                       (!DH_generate_key(new)))
+               if ((new=DHparams_dup(dh)) == NULL)
                        {
                        SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_DH_LIB);
-                       if (new != NULL) DH_free(new);
+                       return 0;
                        }
-               else
+               if (!(ctx->options & SSL_OP_SINGLE_DH_USE))
                        {
-                       if (cert->dh_tmp != NULL)
-                               DH_free(cert->dh_tmp);
-                       cert->dh_tmp=new;
-                       rret=1;
+                       if (!DH_generate_key(new))
+                               {
+                               SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_DH_LIB);
+                               DH_free(new);
+                               return 0;
+                               }
                        }
-               return(rret);
+               if (cert->dh_tmp != NULL)
+                       DH_free(cert->dh_tmp);
+               cert->dh_tmp=new;
+               return 1;
                }
                /*break; */
        case SSL_CTRL_SET_TMP_DH_CB:
@@ -1030,7 +1041,7 @@ SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p)
        cpp=(SSL_CIPHER **)OBJ_bsearch((char *)&cp,
                (char *)sorted,
                SSL3_NUM_CIPHERS,sizeof(SSL_CIPHER *),
-               (int (*)())ssl_cipher_ptr_id_cmp);
+               FP_ICC ssl_cipher_ptr_id_cmp);
        if ((cpp == NULL) || !(*cpp)->valid)
                return(NULL);
        else
@@ -1269,6 +1280,10 @@ int ssl3_read(SSL *s, void *buf, int len)
 
 int ssl3_peek(SSL *s, char *buf, int len)
        {
+#if 1
+       SSLerr(SSL_F_SSL3_PEEK, SSL_R_FIXME); /* function is totally broken */
+       return -1;
+#else  
        SSL3_RECORD *rr;
        int n;
 
@@ -1287,6 +1302,7 @@ int ssl3_peek(SSL *s, char *buf, int len)
                n=len;
        memcpy(buf,&(rr->data[rr->off]),(unsigned int)n);
        return(n);
+#endif
        }
 
 int ssl3_renegotiate(SSL *s)