Fix inconsistent behaviour with respect to verify_callback handling.
authorLutz Jänicke <jaenicke@openssl.org>
Mon, 30 Jul 2001 11:48:20 +0000 (11:48 +0000)
committerLutz Jänicke <jaenicke@openssl.org>
Mon, 30 Jul 2001 11:48:20 +0000 (11:48 +0000)
CHANGES
crypto/x509/x509_vfy.h
ssl/ssl_cert.c
ssl/ssl_lib.c

diff --git a/CHANGES b/CHANGES
index cd09953212fed355bd1806caf637643794c834e6..7da81adc203c802cde43b7320108222ff3cff344 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -4,6 +4,14 @@
 
  Changes between 0.9.6b and 0.9.6c  [XX xxx XXXX]
 
+  *) Modified SSL library such that the verify_callback that has been set
+     specificly for an SSL object with SSL_set_verify() is actually being
+     used. Before the change, a verify_callback set with this function was
+     ignored and the verify_callback() set in the SSL_CTX at the time of
+     the call was used. New function X509_STORE_CTX_set_verify_cb() introduced
+     to allow the necessary settings.
+     [Lutz Jaenicke]
+
   *) Initialize static variable in crypto/dsa/dsa_lib.c and crypto/dh/dh_lib.c
      explicitely to NULL, as at least on Solaris 8 this seems not always to be
      done automatically (in contradiction to the requirements of the C
index e289d5309a47b8fa8addf6b2567994c8be13df6c..42151028a39a386211afc129cb7f04852dc05223 100644 (file)
@@ -382,6 +382,8 @@ int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose,
                                int purpose, int trust);
 void X509_STORE_CTX_set_flags(X509_STORE_CTX *ctx, long flags);
 void X509_STORE_CTX_set_time(X509_STORE_CTX *ctx, long flags, time_t t);
+void X509_STORE_CTX_set_verify_cb(X509_STORE_CTX *ctx,
+                                 int (*verify_cb)(int, X509_STORE_CTX *));
 
 #ifdef  __cplusplus
 }
index 27e7fcc60ae74b57ffa55d6ed44f09b856c8fe7f..38c76a9d13567c8c8115aa1ba5592763eb0e7318 100644 (file)
@@ -461,6 +461,8 @@ int ssl_verify_cert_chain(SSL *s,STACK_OF(X509) *sk)
 
        X509_STORE_CTX_purpose_inherit(&ctx, i, s->purpose, s->trust);
 
+       X509_STORE_CTX_set_verify_cb(&ctx, s->verify_callback);
+
        if (s->ctx->app_verify_callback != NULL)
                i=s->ctx->app_verify_callback(&ctx); /* should pass app_verify_arg */
        else
index 11d8e4eac3578525c74a05889f5581f2bc19f644..362b68984c508d39f0071fc76bb11b824e26f731 100644 (file)
@@ -1293,8 +1293,6 @@ void SSL_CTX_set_verify(SSL_CTX *ctx,int mode,int (*cb)(int, X509_STORE_CTX *))
        {
        ctx->verify_mode=mode;
        ctx->default_verify_callback=cb;
-       /* This needs cleaning up EAY EAY EAY */
-       X509_STORE_set_verify_cb_func(ctx->cert_store,cb);
        }
 
 void SSL_CTX_set_verify_depth(SSL_CTX *ctx,int depth)