Hi,

I have a piece of code doing CRL revocation check which worked fine with 0.9.8 
but now failing in 1.0.1.
The code does something like:
            X509_STORE_add_crl(store,crl);
            X509_STORE_CTX_init(ctx, store, cert, NULL);
            Ctx->check_revocation(ctx);

In openssl lib (x509_vfy.c), check_cert() does the following:
        while (ctx->current_reasons != CRLDP_ALL_REASONS)
                {
                /* Try to retrieve relevant CRL */
                if (ctx->get_crl)                           <== this is NULL
                        ok = ctx->get_crl(ctx, &crl, x);
                else
                        ok = get_crl_delta(ctx, &crl, &dcrl, x); <== this line 
gets called and returns the CRL in 'crl', 'dcrl' returns null.
                /* If error looking up CRL, nothing we can do except
                 * notify callback
                 */
                if(!ok)
                        {
                        ctx->error = X509_V_ERR_UNABLE_TO_GET_CRL;
                        ok = ctx->verify_cb(0, ctx);
                        goto err;
                        }
                ctx->current_crl = crl;
                ok = ctx->check_crl(ctx, crl);    <== here it only checks the 
validity of the crl, but does not do CRL checking against the cert
                if (!ok)
                        goto err;

                if (dcrl)
                        {
                        ok = ctx->check_crl(ctx, dcrl);
                        if (!ok)
                                goto err;
                        ok = ctx->cert_crl(ctx, dcrl, x);  <== this does not 
run since dcrl is NULL
                        if (!ok)
                                goto err;
                        }
                else
                        ok = 1;          <== so always return success

Is this something wrong, or am I missing something?

Thanks,
-binlu

Reply via email to