Lines Matching defs:tree

65 /* Enable this to print out the complete policy tree at various point during
96 static void tree_print(char *str, X509_POLICY_TREE *tree,
105 curr = tree->levels + tree->nlevel;
109 BIO_printf(err, "Printing Up to Level %ld\n", curr - tree->levels);
110 for (plev = tree->levels; plev != curr; plev++)
113 plev - tree->levels, plev->flags);
134 /* Initialize policy tree. Return values:
138 * 2 Policy tree is empty.
146 X509_POLICY_TREE *tree;
220 /* If we get this far initialize the tree */
222 tree = OPENSSL_malloc(sizeof(X509_POLICY_TREE));
224 if (!tree)
227 tree->flags = 0;
228 tree->levels = OPENSSL_malloc(sizeof(X509_POLICY_LEVEL) * n);
229 tree->nlevel = 0;
230 tree->extra_data = NULL;
231 tree->auth_policies = NULL;
232 tree->user_policies = NULL;
234 if (!tree->levels)
236 OPENSSL_free(tree);
240 memset(tree->levels, 0, n * sizeof(X509_POLICY_LEVEL));
242 tree->nlevel = n;
244 level = tree->levels;
250 if (!data || !level_add_node(level, data, NULL, tree))
295 *ptree = tree;
304 X509_policy_tree_free(tree);
378 X509_POLICY_TREE *tree)
393 if (!level_add_node(curr, data, node, tree))
405 X509_POLICY_TREE *tree)
416 if (!tree_add_unmatched(curr, cache, NULL, node, tree))
432 if (!tree_add_unmatched(curr, cache, oid, node, tree))
444 X509_POLICY_TREE *tree)
455 if (!tree_link_unmatched(curr, cache, node, tree))
480 if (!level_add_node(curr, data, node, tree))
499 /* Prune the tree: delete any child mapped child data on the current level
500 * then proceed up the tree deleting any data with no children. If we ever
501 * have no data on a level we can halt because the tree will be empty.
504 static int tree_prune(X509_POLICY_TREE *tree, X509_POLICY_LEVEL *curr)
545 if (curr == tree->levels)
547 /* If we zapped anyPolicy at top then tree is empty */
577 /* Calculate the authority set based on policy tree.
586 static int tree_calculate_authority_set(X509_POLICY_TREE *tree,
593 curr = tree->levels + tree->nlevel - 1;
598 if (!tree_add_auth_node(&tree->auth_policies, curr->anyPolicy))
604 addnodes = &tree->auth_policies;
606 curr = tree->levels;
607 for (i = 1; i < tree->nlevel; i++)
627 *pnodes = tree->auth_policies;
632 static int tree_calculate_user_set(X509_POLICY_TREE *tree,
650 anyPolicy = tree->levels[tree->nlevel - 1].anyPolicy;
657 tree->flags |= POLICY_FLAG_ANY_POLICY;
681 tree);
683 if (!tree->user_policies)
685 tree->user_policies = sk_X509_POLICY_NODE_new_null();
686 if (!tree->user_policies)
689 if (!sk_X509_POLICY_NODE_push(tree->user_policies, node))
696 static int tree_evaluate(X509_POLICY_TREE *tree)
699 X509_POLICY_LEVEL *curr = tree->levels + 1;
702 for(i = 1; i < tree->nlevel; i++, curr++)
709 && !tree_link_any(curr, cache, tree))
711 tree_print("before tree_prune()", tree, curr);
712 ret = tree_prune(tree, curr);
728 void X509_policy_tree_free(X509_POLICY_TREE *tree)
733 if (!tree)
736 sk_X509_POLICY_NODE_free(tree->auth_policies);
737 sk_X509_POLICY_NODE_pop_free(tree->user_policies, exnode_free);
739 for(i = 0, curr = tree->levels; i < tree->nlevel; i++, curr++)
750 if (tree->extra_data)
751 sk_X509_POLICY_DATA_pop_free(tree->extra_data,
754 OPENSSL_free(tree->levels);
755 OPENSSL_free(tree);
773 X509_POLICY_TREE *tree = NULL;
778 ret = tree_init(&tree, certs, flags);
809 if (!tree)
811 * tree_init() returns success and a null tree
822 if (!tree) goto error;
823 ret = tree_evaluate(tree);
825 tree_print("tree_evaluate()", tree, NULL);
830 /* Return value 2 means tree empty */
833 X509_policy_tree_free(tree);
842 ret = tree_calculate_authority_set(tree, &auth_nodes);
847 if (!tree_calculate_user_set(tree, policy_oids, auth_nodes))
853 if (tree)
854 *ptree = tree;
858 nodes = X509_policy_tree_get0_user_policies(tree);
867 X509_policy_tree_free(tree);