diff options
Diffstat (limited to 'src/lib/libcrypto/x509v3/pcy_map.c')
-rw-r--r-- | src/lib/libcrypto/x509v3/pcy_map.c | 56 |
1 files changed, 1 insertions, 55 deletions
diff --git a/src/lib/libcrypto/x509v3/pcy_map.c b/src/lib/libcrypto/x509v3/pcy_map.c index f28796e6d4..21163b529d 100644 --- a/src/lib/libcrypto/x509v3/pcy_map.c +++ b/src/lib/libcrypto/x509v3/pcy_map.c | |||
@@ -62,31 +62,6 @@ | |||
62 | 62 | ||
63 | #include "pcy_int.h" | 63 | #include "pcy_int.h" |
64 | 64 | ||
65 | static int ref_cmp(const X509_POLICY_REF * const *a, | ||
66 | const X509_POLICY_REF * const *b) | ||
67 | { | ||
68 | return OBJ_cmp((*a)->subjectDomainPolicy, (*b)->subjectDomainPolicy); | ||
69 | } | ||
70 | |||
71 | static void policy_map_free(X509_POLICY_REF *map) | ||
72 | { | ||
73 | if (map->subjectDomainPolicy) | ||
74 | ASN1_OBJECT_free(map->subjectDomainPolicy); | ||
75 | OPENSSL_free(map); | ||
76 | } | ||
77 | |||
78 | static X509_POLICY_REF *policy_map_find(X509_POLICY_CACHE *cache, ASN1_OBJECT *id) | ||
79 | { | ||
80 | X509_POLICY_REF tmp; | ||
81 | int idx; | ||
82 | tmp.subjectDomainPolicy = id; | ||
83 | |||
84 | idx = sk_X509_POLICY_REF_find(cache->maps, &tmp); | ||
85 | if (idx == -1) | ||
86 | return NULL; | ||
87 | return sk_X509_POLICY_REF_value(cache->maps, idx); | ||
88 | } | ||
89 | |||
90 | /* Set policy mapping entries in cache. | 65 | /* Set policy mapping entries in cache. |
91 | * Note: this modifies the passed POLICY_MAPPINGS structure | 66 | * Note: this modifies the passed POLICY_MAPPINGS structure |
92 | */ | 67 | */ |
@@ -94,7 +69,6 @@ static X509_POLICY_REF *policy_map_find(X509_POLICY_CACHE *cache, ASN1_OBJECT *i | |||
94 | int policy_cache_set_mapping(X509 *x, POLICY_MAPPINGS *maps) | 69 | int policy_cache_set_mapping(X509 *x, POLICY_MAPPINGS *maps) |
95 | { | 70 | { |
96 | POLICY_MAPPING *map; | 71 | POLICY_MAPPING *map; |
97 | X509_POLICY_REF *ref = NULL; | ||
98 | X509_POLICY_DATA *data; | 72 | X509_POLICY_DATA *data; |
99 | X509_POLICY_CACHE *cache = x->policy_cache; | 73 | X509_POLICY_CACHE *cache = x->policy_cache; |
100 | int i; | 74 | int i; |
@@ -104,7 +78,6 @@ int policy_cache_set_mapping(X509 *x, POLICY_MAPPINGS *maps) | |||
104 | ret = -1; | 78 | ret = -1; |
105 | goto bad_mapping; | 79 | goto bad_mapping; |
106 | } | 80 | } |
107 | cache->maps = sk_X509_POLICY_REF_new(ref_cmp); | ||
108 | for (i = 0; i < sk_POLICY_MAPPING_num(maps); i++) | 81 | for (i = 0; i < sk_POLICY_MAPPING_num(maps); i++) |
109 | { | 82 | { |
110 | map = sk_POLICY_MAPPING_value(maps, i); | 83 | map = sk_POLICY_MAPPING_value(maps, i); |
@@ -116,13 +89,6 @@ int policy_cache_set_mapping(X509 *x, POLICY_MAPPINGS *maps) | |||
116 | goto bad_mapping; | 89 | goto bad_mapping; |
117 | } | 90 | } |
118 | 91 | ||
119 | /* If we've already mapped from this OID bad mapping */ | ||
120 | if (policy_map_find(cache, map->subjectDomainPolicy) != NULL) | ||
121 | { | ||
122 | ret = -1; | ||
123 | goto bad_mapping; | ||
124 | } | ||
125 | |||
126 | /* Attempt to find matching policy data */ | 92 | /* Attempt to find matching policy data */ |
127 | data = policy_cache_find_data(cache, map->issuerDomainPolicy); | 93 | data = policy_cache_find_data(cache, map->issuerDomainPolicy); |
128 | /* If we don't have anyPolicy can't map */ | 94 | /* If we don't have anyPolicy can't map */ |
@@ -138,7 +104,7 @@ int policy_cache_set_mapping(X509 *x, POLICY_MAPPINGS *maps) | |||
138 | if (!data) | 104 | if (!data) |
139 | goto bad_mapping; | 105 | goto bad_mapping; |
140 | data->qualifier_set = cache->anyPolicy->qualifier_set; | 106 | data->qualifier_set = cache->anyPolicy->qualifier_set; |
141 | map->issuerDomainPolicy = NULL; | 107 | /*map->issuerDomainPolicy = NULL;*/ |
142 | data->flags |= POLICY_DATA_FLAG_MAPPED_ANY; | 108 | data->flags |= POLICY_DATA_FLAG_MAPPED_ANY; |
143 | data->flags |= POLICY_DATA_FLAG_SHARED_QUALIFIERS; | 109 | data->flags |= POLICY_DATA_FLAG_SHARED_QUALIFIERS; |
144 | if (!sk_X509_POLICY_DATA_push(cache->data, data)) | 110 | if (!sk_X509_POLICY_DATA_push(cache->data, data)) |
@@ -149,23 +115,10 @@ int policy_cache_set_mapping(X509 *x, POLICY_MAPPINGS *maps) | |||
149 | } | 115 | } |
150 | else | 116 | else |
151 | data->flags |= POLICY_DATA_FLAG_MAPPED; | 117 | data->flags |= POLICY_DATA_FLAG_MAPPED; |
152 | |||
153 | if (!sk_ASN1_OBJECT_push(data->expected_policy_set, | 118 | if (!sk_ASN1_OBJECT_push(data->expected_policy_set, |
154 | map->subjectDomainPolicy)) | 119 | map->subjectDomainPolicy)) |
155 | goto bad_mapping; | 120 | goto bad_mapping; |
156 | |||
157 | ref = OPENSSL_malloc(sizeof(X509_POLICY_REF)); | ||
158 | if (!ref) | ||
159 | goto bad_mapping; | ||
160 | |||
161 | ref->subjectDomainPolicy = map->subjectDomainPolicy; | ||
162 | map->subjectDomainPolicy = NULL; | 121 | map->subjectDomainPolicy = NULL; |
163 | ref->data = data; | ||
164 | |||
165 | if (!sk_X509_POLICY_REF_push(cache->maps, ref)) | ||
166 | goto bad_mapping; | ||
167 | |||
168 | ref = NULL; | ||
169 | 122 | ||
170 | } | 123 | } |
171 | 124 | ||
@@ -173,13 +126,6 @@ int policy_cache_set_mapping(X509 *x, POLICY_MAPPINGS *maps) | |||
173 | bad_mapping: | 126 | bad_mapping: |
174 | if (ret == -1) | 127 | if (ret == -1) |
175 | x->ex_flags |= EXFLAG_INVALID_POLICY; | 128 | x->ex_flags |= EXFLAG_INVALID_POLICY; |
176 | if (ref) | ||
177 | policy_map_free(ref); | ||
178 | if (ret <= 0) | ||
179 | { | ||
180 | sk_X509_POLICY_REF_pop_free(cache->maps, policy_map_free); | ||
181 | cache->maps = NULL; | ||
182 | } | ||
183 | sk_POLICY_MAPPING_pop_free(maps, POLICY_MAPPING_free); | 129 | sk_POLICY_MAPPING_pop_free(maps, POLICY_MAPPING_free); |
184 | return ret; | 130 | return ret; |
185 | 131 | ||