Initial support for delta CRLs. If "use deltas" flag is set attempt to find
[openssl.git] / crypto / x509v3 / v3_purp.c
index 7bb6658b9053bf652e446f30de49715203c33dc2..1ca370dc0b86caacf76af44c5c3e74a4eba4433b 100644 (file)
@@ -296,6 +296,7 @@ int X509_supported_extension(X509_EXTENSION *ex)
                NID_policy_constraints, /* 401 */
                NID_proxyCertInfo,      /* 663 */
                NID_name_constraints,   /* 666 */
+               NID_policy_mappings,    /* 747 */
                NID_inhibit_any_policy  /* 748 */
        };
 
@@ -317,6 +318,16 @@ static void setup_dp(X509 *x, DIST_POINT *dp)
        {
        X509_NAME *iname = NULL;
        int i;
+       if (dp->reasons)
+               {
+               if (dp->reasons->length > 0)
+                       dp->dp_reasons = dp->reasons->data[0];
+               if (dp->reasons->length > 1)
+                       dp->dp_reasons |= (dp->reasons->data[1] << 8);
+               dp->dp_reasons &= CRLDP_ALL_REASONS;
+               }
+       else
+               dp->dp_reasons = CRLDP_ALL_REASONS;
        if (!dp->distpoint || (dp->distpoint->type != 1))
                return;
        for (i = 0; i < sk_GENERAL_NAME_num(dp->CRLissuer); i++)
@@ -454,8 +465,7 @@ static void x509v3_cache_extensions(X509 *x)
        if (!x->nc && (i != -1))
                x->ex_flags |= EXFLAG_INVALID;
        setup_crldp(x);
-                       
-                       
+
 #ifndef OPENSSL_NO_RFC3779
        x->rfc3779_addr =X509_get_ext_d2i(x, NID_sbgp_ipAddrBlock, NULL, NULL);
        x->rfc3779_asid =X509_get_ext_d2i(x, NID_sbgp_autonomousSysNum,
@@ -466,6 +476,9 @@ static void x509v3_cache_extensions(X509 *x)
                ex = X509_get_ext(x, i);
                if (!X509_EXTENSION_get_critical(ex))
                        continue;
+               if (OBJ_obj2nid(X509_EXTENSION_get_object(ex))
+                                       == NID_freshest_crl)
+                       x->ex_flags |= EXFLAG_FRESHEST;
                if (!X509_supported_extension(ex))
                        {
                        x->ex_flags |= EXFLAG_CRITICAL;