Non-copying interface to BIO pairs.
[openssl.git] / ssl / ssl_lib.c
index aa181ab8c1f9ca8865ea8bba2e0d2a55700f85d0..e192fc4cac3a2f29d503f30d23bc7a8d1f264f8e 100644 (file)
@@ -215,6 +215,7 @@ SSL *SSL_new(SSL_CTX *ctx)
        s->references=1;
        s->server=(ctx->method->ssl_accept == ssl_undefined_function)?0:1;
        s->options=ctx->options;
+       s->mode=ctx->mode;
        SSL_clear(s);
 
        CRYPTO_new_ex_data(ssl_meth,(char *)s,&s->ex_data);
@@ -575,7 +576,10 @@ int SSL_check_private_key(SSL *ssl)
                return(0);
                }
        if (ssl->cert == NULL)
-               return(SSL_CTX_check_private_key(ssl->ctx));
+               {
+                SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY,SSL_R_NO_CERTIFICATE_ASSIGNED);
+               return 0;
+               }
        if (ssl->cert->key->x509 == NULL)
                {
                SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY,SSL_R_NO_CERTIFICATE_ASSIGNED);
@@ -695,6 +699,8 @@ long SSL_ctrl(SSL *s,int cmd,long larg,char *parg)
                return(l);
        case SSL_CTRL_OPTIONS:
                return(s->options|=larg);
+       case SSL_CTRL_MODE:
+               return(s->mode|=larg);
        default:
                return(s->method->ssl_ctrl(s,cmd,larg,parg));
                }
@@ -752,6 +758,8 @@ long SSL_CTX_ctrl(SSL_CTX *ctx,int cmd,long larg,char *parg)
                return(ctx->stats.sess_cache_full);
        case SSL_CTRL_OPTIONS:
                return(ctx->options|=larg);
+       case SSL_CTRL_MODE:
+               return(ctx->mode|=larg);
        default:
                return(ctx->method->ssl_ctx_ctrl(ctx,cmd,larg,parg));
                }
@@ -1027,6 +1035,7 @@ SSL_CTX *SSL_CTX_new(SSL_METHOD *meth)
                goto err;
 
        ret->default_passwd_callback=NULL;
+       ret->default_passwd_callback_userdata=NULL;
        ret->client_cert_cb=NULL;
 
        ret->sessions=lh_new(SSL_SESSION_hash,SSL_SESSION_cmp);
@@ -1126,10 +1135,20 @@ void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb)
        ctx->default_passwd_callback=cb;
        }
 
+void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx,void *u)
+       {
+       ctx->default_passwd_callback_userdata=u;
+       }
+
 void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx,int (*cb)(),char *arg)
        {
+       /* now
+        *     int (*cb)(X509_STORE_CTX *),
+        * but should be
+        *     int (*cb)(X509_STORE_CTX *, void *arg)
+        */
        ctx->app_verify_callback=cb;
-       ctx->app_verify_arg=arg;
+       ctx->app_verify_arg=arg; /* never used */
        }
 
 void SSL_CTX_set_verify(SSL_CTX *ctx,int mode,int (*cb)(int, X509_STORE_CTX *))
@@ -1695,7 +1714,7 @@ int ssl_init_wbio_buffer(SSL *s,int push)
                if (s->bbio == s->wbio)
                        s->wbio=BIO_pop(s->wbio);
                }
-       BIO_reset(bbio);
+       (void)BIO_reset(bbio);
 /*     if (!BIO_set_write_buffer_size(bbio,16*1024)) */
        if (!BIO_set_read_buffer_size(bbio,1))
                {