> Please test the 0.9.7-dev snapshots and report any problems that you > found, even if they have been reported before (it's a good reminder > for us), or even better, send us patches!
It used to be possible to call X509_STORE_CTX_init() with a NULL X509_STORE pointer, in order to use the verifier without using the builtin certificate store. (I am using X509_STORE_CTX_trusted_stack() instead). There was a small problem with X509_STORE_CTX_init() that dereferenced the store pointer without checking it for NULL, and I had patched this. I started porting forward my old patch, but found a whole bunch of new stuff that is copied from the X509_STORE structure. The only one that I have trouble with is get_issuer, which is initialized by default to X509_STORE_CTX_get1_issuer(), which in turn assumes the existence of a cert store :-) I have attached a patch that assumes that I can initialize get_issuer to get_issuer_sk if the store pointer is NULL... -- Harald Koch <[EMAIL PROTECTED]>
==== //depot/ThirdParty/Distributions/openssl-snapshot/crypto/x509/x509_vfy.c#3 - /home/chk/work/openssl-snapshot/crypto/x509/x509_vfy.c ==== @@ -1055,6 +1055,4 @@ ctx->untrusted=chain; ctx->last_untrusted=0; - ctx->purpose=store->purpose; - ctx->trust=store->trust; ctx->check_time=0; ctx->flags=0; @@ -1072,17 +1070,35 @@ */ - ctx->flags = store->flags; + if (store) + ctx->purpose=store->purpose; + else + ctx->purpose=0; + + if (store) + ctx->trust=store->trust; + else + ctx->trust = 0; + + if (store) + ctx->flags = store->flags; + else + ctx->flags = 0; - if (store->check_issued) + if (store && store->check_issued) ctx->check_issued = store->check_issued; else ctx->check_issued = check_issued; - if (store->get_issuer) - ctx->get_issuer = store->get_issuer; + if (store) + { + if (store->get_issuer) + ctx->get_issuer = store->get_issuer; + else + ctx->get_issuer = X509_STORE_CTX_get1_issuer; + } else - ctx->get_issuer = X509_STORE_CTX_get1_issuer; + ctx->get_issuer = get_issuer_sk; - if (store->verify_cb) + if (store && store->verify_cb) ctx->verify_cb = store->verify_cb; else @@ -1094,25 +1110,25 @@ ctx->verify = internal_verify; - if (store->check_revocation) + if (store && store->check_revocation) ctx->check_revocation = store->check_revocation; else ctx->check_revocation = check_revocation; - if (store->get_crl) + if (store && store->get_crl) ctx->get_crl = store->get_crl; else ctx->get_crl = get_crl; - if (store->check_crl) + if (store && store->check_crl) ctx->check_crl = store->check_crl; else ctx->check_crl = check_crl; - if (store->cert_crl) + if (store && store->cert_crl) ctx->cert_crl = store->cert_crl; else ctx->cert_crl = cert_crl; - ctx->cleanup = store->cleanup; + if (store) ctx->cleanup = store->cleanup; /* This memset() can't make any sense anyway, so it's removed. As