summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib/libcrypto/x509v3/pcy_int.h6
-rw-r--r--src/lib/libcrypto/x509v3/pcy_node.c36
-rw-r--r--src/lib/libcrypto/x509v3/pcy_tree.c16
-rw-r--r--src/lib/libssl/src/crypto/x509v3/pcy_int.h6
-rw-r--r--src/lib/libssl/src/crypto/x509v3/pcy_node.c36
-rw-r--r--src/lib/libssl/src/crypto/x509v3/pcy_tree.c16
6 files changed, 66 insertions, 50 deletions
diff --git a/src/lib/libcrypto/x509v3/pcy_int.h b/src/lib/libcrypto/x509v3/pcy_int.h
index 3f8a8316e2..50ed7cbfcf 100644
--- a/src/lib/libcrypto/x509v3/pcy_int.h
+++ b/src/lib/libcrypto/x509v3/pcy_int.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: pcy_int.h,v 1.3 2014/06/12 15:49:31 deraadt Exp $ */ 1/* $OpenBSD: pcy_int.h,v 1.4 2015/07/18 00:01:05 beck Exp $ */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 2004. 3 * project 2004.
4 */ 4 */
@@ -196,9 +196,9 @@ X509_POLICY_NODE *level_find_node(const X509_POLICY_LEVEL *level,
196X509_POLICY_NODE *tree_find_sk(STACK_OF(X509_POLICY_NODE) *sk, 196X509_POLICY_NODE *tree_find_sk(STACK_OF(X509_POLICY_NODE) *sk,
197 const ASN1_OBJECT *id); 197 const ASN1_OBJECT *id);
198 198
199X509_POLICY_NODE *level_add_node(X509_POLICY_LEVEL *level, 199int level_add_node(X509_POLICY_LEVEL *level,
200 const X509_POLICY_DATA *data, X509_POLICY_NODE *parent, 200 const X509_POLICY_DATA *data, X509_POLICY_NODE *parent,
201 X509_POLICY_TREE *tree); 201 X509_POLICY_TREE *tree, X509_POLICY_NODE **nodep);
202void policy_node_free(X509_POLICY_NODE *node); 202void policy_node_free(X509_POLICY_NODE *node);
203int policy_node_match(const X509_POLICY_LEVEL *lvl, 203int policy_node_match(const X509_POLICY_LEVEL *lvl,
204 const X509_POLICY_NODE *node, const ASN1_OBJECT *oid); 204 const X509_POLICY_NODE *node, const ASN1_OBJECT *oid);
diff --git a/src/lib/libcrypto/x509v3/pcy_node.c b/src/lib/libcrypto/x509v3/pcy_node.c
index 839113ea2f..ba22b267bf 100644
--- a/src/lib/libcrypto/x509v3/pcy_node.c
+++ b/src/lib/libcrypto/x509v3/pcy_node.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: pcy_node.c,v 1.5 2014/07/23 20:49:52 miod Exp $ */ 1/* $OpenBSD: pcy_node.c,v 1.6 2015/07/18 00:01:05 beck Exp $ */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 2004. 3 * project 2004.
4 */ 4 */
@@ -107,23 +107,26 @@ level_find_node(const X509_POLICY_LEVEL *level, const X509_POLICY_NODE *parent,
107 return NULL; 107 return NULL;
108} 108}
109 109
110X509_POLICY_NODE * 110
111int
111level_add_node(X509_POLICY_LEVEL *level, const X509_POLICY_DATA *data, 112level_add_node(X509_POLICY_LEVEL *level, const X509_POLICY_DATA *data,
112 X509_POLICY_NODE *parent, X509_POLICY_TREE *tree) 113 X509_POLICY_NODE *parent, X509_POLICY_TREE *tree, X509_POLICY_NODE **nodep)
113{ 114{
114 X509_POLICY_NODE *node; 115 X509_POLICY_NODE *node = NULL;
115 116
116 node = malloc(sizeof(X509_POLICY_NODE));
117 if (!node)
118 return NULL;
119 node->data = data;
120 node->parent = parent;
121 node->nchild = 0;
122 if (level) { 117 if (level) {
118 node = malloc(sizeof(X509_POLICY_NODE));
119 if (!node)
120 goto node_error;
121 node->data = data;
122 node->parent = parent;
123 node->nchild = 0;
123 if (OBJ_obj2nid(data->valid_policy) == NID_any_policy) { 124 if (OBJ_obj2nid(data->valid_policy) == NID_any_policy) {
124 if (level->anyPolicy) 125 if (level->anyPolicy)
125 goto node_error; 126 goto node_error;
126 level->anyPolicy = node; 127 level->anyPolicy = node;
128 if (parent)
129 parent->nchild++;
127 } else { 130 } else {
128 131
129 if (!level->nodes) 132 if (!level->nodes)
@@ -132,6 +135,8 @@ level_add_node(X509_POLICY_LEVEL *level, const X509_POLICY_DATA *data,
132 goto node_error; 135 goto node_error;
133 if (!sk_X509_POLICY_NODE_push(level->nodes, node)) 136 if (!sk_X509_POLICY_NODE_push(level->nodes, node))
134 goto node_error; 137 goto node_error;
138 if (parent)
139 parent->nchild++;
135 } 140 }
136 } 141 }
137 142
@@ -144,17 +149,20 @@ level_add_node(X509_POLICY_LEVEL *level, const X509_POLICY_DATA *data,
144 goto node_error_cond; 149 goto node_error_cond;
145 } 150 }
146 151
147 if (parent) 152 if (nodep)
148 parent->nchild++; 153 *nodep = node;
149 154
150 return node; 155 return 1;
151 156
152node_error_cond: 157node_error_cond:
153 if (level) 158 if (level)
154 node = NULL; 159 node = NULL;
155node_error: 160node_error:
156 policy_node_free(node); 161 policy_node_free(node);
157 return NULL; 162 node = NULL;
163 if (nodep)
164 *nodep = node;
165 return 0;
158} 166}
159 167
160void 168void
diff --git a/src/lib/libcrypto/x509v3/pcy_tree.c b/src/lib/libcrypto/x509v3/pcy_tree.c
index 9e54f233ad..af9bf00c66 100644
--- a/src/lib/libcrypto/x509v3/pcy_tree.c
+++ b/src/lib/libcrypto/x509v3/pcy_tree.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: pcy_tree.c,v 1.14 2015/07/15 17:02:03 miod Exp $ */ 1/* $OpenBSD: pcy_tree.c,v 1.15 2015/07/18 00:01:05 beck Exp $ */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 2004. 3 * project 2004.
4 */ 4 */
@@ -233,7 +233,7 @@ tree_init(X509_POLICY_TREE **ptree, STACK_OF(X509) *certs, unsigned int flags)
233 233
234 data = policy_data_new(NULL, OBJ_nid2obj(NID_any_policy), 0); 234 data = policy_data_new(NULL, OBJ_nid2obj(NID_any_policy), 0);
235 235
236 if (!data || !level_add_node(level, data, NULL, tree)) 236 if (!data || !level_add_node(level, data, NULL, tree, NULL))
237 goto bad_tree; 237 goto bad_tree;
238 238
239 for (i = n - 2; i >= 0; i--) { 239 for (i = n - 2; i >= 0; i--) {
@@ -297,13 +297,13 @@ tree_link_matching_nodes(X509_POLICY_LEVEL *curr, const X509_POLICY_DATA *data)
297 for (i = 0; i < sk_X509_POLICY_NODE_num(last->nodes); i++) { 297 for (i = 0; i < sk_X509_POLICY_NODE_num(last->nodes); i++) {
298 node = sk_X509_POLICY_NODE_value(last->nodes, i); 298 node = sk_X509_POLICY_NODE_value(last->nodes, i);
299 if (policy_node_match(last, node, data->valid_policy)) { 299 if (policy_node_match(last, node, data->valid_policy)) {
300 if (!level_add_node(curr, data, node, NULL)) 300 if (!level_add_node(curr, data, node, NULL, NULL))
301 return 0; 301 return 0;
302 matched = 1; 302 matched = 1;
303 } 303 }
304 } 304 }
305 if (!matched && last->anyPolicy) { 305 if (!matched && last->anyPolicy) {
306 if (!level_add_node(curr, data, last->anyPolicy, NULL)) 306 if (!level_add_node(curr, data, last->anyPolicy, NULL, NULL))
307 return 0; 307 return 0;
308 } 308 }
309 return 1; 309 return 1;
@@ -352,7 +352,7 @@ tree_add_unmatched(X509_POLICY_LEVEL *curr, const X509_POLICY_CACHE *cache,
352 /* Curr may not have anyPolicy */ 352 /* Curr may not have anyPolicy */
353 data->qualifier_set = cache->anyPolicy->qualifier_set; 353 data->qualifier_set = cache->anyPolicy->qualifier_set;
354 data->flags |= POLICY_DATA_FLAG_SHARED_QUALIFIERS; 354 data->flags |= POLICY_DATA_FLAG_SHARED_QUALIFIERS;
355 if (!level_add_node(curr, data, node, tree)) { 355 if (!level_add_node(curr, data, node, tree, NULL)) {
356 policy_data_free(data); 356 policy_data_free(data);
357 return 0; 357 return 0;
358 } 358 }
@@ -410,7 +410,7 @@ tree_link_any(X509_POLICY_LEVEL *curr, const X509_POLICY_CACHE *cache,
410 /* Finally add link to anyPolicy */ 410 /* Finally add link to anyPolicy */
411 if (last->anyPolicy) { 411 if (last->anyPolicy) {
412 if (!level_add_node(curr, cache->anyPolicy, 412 if (!level_add_node(curr, cache->anyPolicy,
413 last->anyPolicy, NULL)) 413 last->anyPolicy, NULL, NULL))
414 return 0; 414 return 0;
415 } 415 }
416 return 1; 416 return 1;
@@ -581,8 +581,8 @@ tree_calculate_user_set(X509_POLICY_TREE *tree,
581 extra->qualifier_set = anyPolicy->data->qualifier_set; 581 extra->qualifier_set = anyPolicy->data->qualifier_set;
582 extra->flags = POLICY_DATA_FLAG_SHARED_QUALIFIERS | 582 extra->flags = POLICY_DATA_FLAG_SHARED_QUALIFIERS |
583 POLICY_DATA_FLAG_EXTRA_NODE; 583 POLICY_DATA_FLAG_EXTRA_NODE;
584 node = level_add_node(NULL, extra, anyPolicy->parent, 584 (void) level_add_node(NULL, extra, anyPolicy->parent,
585 tree); 585 tree, &node);
586 } 586 }
587 if (!tree->user_policies) { 587 if (!tree->user_policies) {
588 tree->user_policies = sk_X509_POLICY_NODE_new_null(); 588 tree->user_policies = sk_X509_POLICY_NODE_new_null();
diff --git a/src/lib/libssl/src/crypto/x509v3/pcy_int.h b/src/lib/libssl/src/crypto/x509v3/pcy_int.h
index 3f8a8316e2..50ed7cbfcf 100644
--- a/src/lib/libssl/src/crypto/x509v3/pcy_int.h
+++ b/src/lib/libssl/src/crypto/x509v3/pcy_int.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: pcy_int.h,v 1.3 2014/06/12 15:49:31 deraadt Exp $ */ 1/* $OpenBSD: pcy_int.h,v 1.4 2015/07/18 00:01:05 beck Exp $ */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 2004. 3 * project 2004.
4 */ 4 */
@@ -196,9 +196,9 @@ X509_POLICY_NODE *level_find_node(const X509_POLICY_LEVEL *level,
196X509_POLICY_NODE *tree_find_sk(STACK_OF(X509_POLICY_NODE) *sk, 196X509_POLICY_NODE *tree_find_sk(STACK_OF(X509_POLICY_NODE) *sk,
197 const ASN1_OBJECT *id); 197 const ASN1_OBJECT *id);
198 198
199X509_POLICY_NODE *level_add_node(X509_POLICY_LEVEL *level, 199int level_add_node(X509_POLICY_LEVEL *level,
200 const X509_POLICY_DATA *data, X509_POLICY_NODE *parent, 200 const X509_POLICY_DATA *data, X509_POLICY_NODE *parent,
201 X509_POLICY_TREE *tree); 201 X509_POLICY_TREE *tree, X509_POLICY_NODE **nodep);
202void policy_node_free(X509_POLICY_NODE *node); 202void policy_node_free(X509_POLICY_NODE *node);
203int policy_node_match(const X509_POLICY_LEVEL *lvl, 203int policy_node_match(const X509_POLICY_LEVEL *lvl,
204 const X509_POLICY_NODE *node, const ASN1_OBJECT *oid); 204 const X509_POLICY_NODE *node, const ASN1_OBJECT *oid);
diff --git a/src/lib/libssl/src/crypto/x509v3/pcy_node.c b/src/lib/libssl/src/crypto/x509v3/pcy_node.c
index 839113ea2f..ba22b267bf 100644
--- a/src/lib/libssl/src/crypto/x509v3/pcy_node.c
+++ b/src/lib/libssl/src/crypto/x509v3/pcy_node.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: pcy_node.c,v 1.5 2014/07/23 20:49:52 miod Exp $ */ 1/* $OpenBSD: pcy_node.c,v 1.6 2015/07/18 00:01:05 beck Exp $ */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 2004. 3 * project 2004.
4 */ 4 */
@@ -107,23 +107,26 @@ level_find_node(const X509_POLICY_LEVEL *level, const X509_POLICY_NODE *parent,
107 return NULL; 107 return NULL;
108} 108}
109 109
110X509_POLICY_NODE * 110
111int
111level_add_node(X509_POLICY_LEVEL *level, const X509_POLICY_DATA *data, 112level_add_node(X509_POLICY_LEVEL *level, const X509_POLICY_DATA *data,
112 X509_POLICY_NODE *parent, X509_POLICY_TREE *tree) 113 X509_POLICY_NODE *parent, X509_POLICY_TREE *tree, X509_POLICY_NODE **nodep)
113{ 114{
114 X509_POLICY_NODE *node; 115 X509_POLICY_NODE *node = NULL;
115 116
116 node = malloc(sizeof(X509_POLICY_NODE));
117 if (!node)
118 return NULL;
119 node->data = data;
120 node->parent = parent;
121 node->nchild = 0;
122 if (level) { 117 if (level) {
118 node = malloc(sizeof(X509_POLICY_NODE));
119 if (!node)
120 goto node_error;
121 node->data = data;
122 node->parent = parent;
123 node->nchild = 0;
123 if (OBJ_obj2nid(data->valid_policy) == NID_any_policy) { 124 if (OBJ_obj2nid(data->valid_policy) == NID_any_policy) {
124 if (level->anyPolicy) 125 if (level->anyPolicy)
125 goto node_error; 126 goto node_error;
126 level->anyPolicy = node; 127 level->anyPolicy = node;
128 if (parent)
129 parent->nchild++;
127 } else { 130 } else {
128 131
129 if (!level->nodes) 132 if (!level->nodes)
@@ -132,6 +135,8 @@ level_add_node(X509_POLICY_LEVEL *level, const X509_POLICY_DATA *data,
132 goto node_error; 135 goto node_error;
133 if (!sk_X509_POLICY_NODE_push(level->nodes, node)) 136 if (!sk_X509_POLICY_NODE_push(level->nodes, node))
134 goto node_error; 137 goto node_error;
138 if (parent)
139 parent->nchild++;
135 } 140 }
136 } 141 }
137 142
@@ -144,17 +149,20 @@ level_add_node(X509_POLICY_LEVEL *level, const X509_POLICY_DATA *data,
144 goto node_error_cond; 149 goto node_error_cond;
145 } 150 }
146 151
147 if (parent) 152 if (nodep)
148 parent->nchild++; 153 *nodep = node;
149 154
150 return node; 155 return 1;
151 156
152node_error_cond: 157node_error_cond:
153 if (level) 158 if (level)
154 node = NULL; 159 node = NULL;
155node_error: 160node_error:
156 policy_node_free(node); 161 policy_node_free(node);
157 return NULL; 162 node = NULL;
163 if (nodep)
164 *nodep = node;
165 return 0;
158} 166}
159 167
160void 168void
diff --git a/src/lib/libssl/src/crypto/x509v3/pcy_tree.c b/src/lib/libssl/src/crypto/x509v3/pcy_tree.c
index 9e54f233ad..af9bf00c66 100644
--- a/src/lib/libssl/src/crypto/x509v3/pcy_tree.c
+++ b/src/lib/libssl/src/crypto/x509v3/pcy_tree.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: pcy_tree.c,v 1.14 2015/07/15 17:02:03 miod Exp $ */ 1/* $OpenBSD: pcy_tree.c,v 1.15 2015/07/18 00:01:05 beck Exp $ */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 2004. 3 * project 2004.
4 */ 4 */
@@ -233,7 +233,7 @@ tree_init(X509_POLICY_TREE **ptree, STACK_OF(X509) *certs, unsigned int flags)
233 233
234 data = policy_data_new(NULL, OBJ_nid2obj(NID_any_policy), 0); 234 data = policy_data_new(NULL, OBJ_nid2obj(NID_any_policy), 0);
235 235
236 if (!data || !level_add_node(level, data, NULL, tree)) 236 if (!data || !level_add_node(level, data, NULL, tree, NULL))
237 goto bad_tree; 237 goto bad_tree;
238 238
239 for (i = n - 2; i >= 0; i--) { 239 for (i = n - 2; i >= 0; i--) {
@@ -297,13 +297,13 @@ tree_link_matching_nodes(X509_POLICY_LEVEL *curr, const X509_POLICY_DATA *data)
297 for (i = 0; i < sk_X509_POLICY_NODE_num(last->nodes); i++) { 297 for (i = 0; i < sk_X509_POLICY_NODE_num(last->nodes); i++) {
298 node = sk_X509_POLICY_NODE_value(last->nodes, i); 298 node = sk_X509_POLICY_NODE_value(last->nodes, i);
299 if (policy_node_match(last, node, data->valid_policy)) { 299 if (policy_node_match(last, node, data->valid_policy)) {
300 if (!level_add_node(curr, data, node, NULL)) 300 if (!level_add_node(curr, data, node, NULL, NULL))
301 return 0; 301 return 0;
302 matched = 1; 302 matched = 1;
303 } 303 }
304 } 304 }
305 if (!matched && last->anyPolicy) { 305 if (!matched && last->anyPolicy) {
306 if (!level_add_node(curr, data, last->anyPolicy, NULL)) 306 if (!level_add_node(curr, data, last->anyPolicy, NULL, NULL))
307 return 0; 307 return 0;
308 } 308 }
309 return 1; 309 return 1;
@@ -352,7 +352,7 @@ tree_add_unmatched(X509_POLICY_LEVEL *curr, const X509_POLICY_CACHE *cache,
352 /* Curr may not have anyPolicy */ 352 /* Curr may not have anyPolicy */
353 data->qualifier_set = cache->anyPolicy->qualifier_set; 353 data->qualifier_set = cache->anyPolicy->qualifier_set;
354 data->flags |= POLICY_DATA_FLAG_SHARED_QUALIFIERS; 354 data->flags |= POLICY_DATA_FLAG_SHARED_QUALIFIERS;
355 if (!level_add_node(curr, data, node, tree)) { 355 if (!level_add_node(curr, data, node, tree, NULL)) {
356 policy_data_free(data); 356 policy_data_free(data);
357 return 0; 357 return 0;
358 } 358 }
@@ -410,7 +410,7 @@ tree_link_any(X509_POLICY_LEVEL *curr, const X509_POLICY_CACHE *cache,
410 /* Finally add link to anyPolicy */ 410 /* Finally add link to anyPolicy */
411 if (last->anyPolicy) { 411 if (last->anyPolicy) {
412 if (!level_add_node(curr, cache->anyPolicy, 412 if (!level_add_node(curr, cache->anyPolicy,
413 last->anyPolicy, NULL)) 413 last->anyPolicy, NULL, NULL))
414 return 0; 414 return 0;
415 } 415 }
416 return 1; 416 return 1;
@@ -581,8 +581,8 @@ tree_calculate_user_set(X509_POLICY_TREE *tree,
581 extra->qualifier_set = anyPolicy->data->qualifier_set; 581 extra->qualifier_set = anyPolicy->data->qualifier_set;
582 extra->flags = POLICY_DATA_FLAG_SHARED_QUALIFIERS | 582 extra->flags = POLICY_DATA_FLAG_SHARED_QUALIFIERS |
583 POLICY_DATA_FLAG_EXTRA_NODE; 583 POLICY_DATA_FLAG_EXTRA_NODE;
584 node = level_add_node(NULL, extra, anyPolicy->parent, 584 (void) level_add_node(NULL, extra, anyPolicy->parent,
585 tree); 585 tree, &node);
586 } 586 }
587 if (!tree->user_policies) { 587 if (!tree->user_policies) {
588 tree->user_policies = sk_X509_POLICY_NODE_new_null(); 588 tree->user_policies = sk_X509_POLICY_NODE_new_null();