static void tree_print(char *str, X509_POLICY_TREE *tree, X509_POLICY_LEVEL *curr) { X509_POLICY_LEVEL *plev; X509_POLICY_NODE *node; int i; BIO *err; err = BIO_new_fp(stderr, BIO_NOCLOSE); if (!curr) curr = tree->levels + tree->nlevel; else curr++; BIO_printf(err, "Level print after %s\n", str); BIO_printf(err, "Printing Up to Level %ld\n", curr - tree->levels); for (plev = tree->levels; plev != curr; plev++) { BIO_printf(err, "Level %ld, flags = %x\n", plev - tree->levels, plev->flags); for (i = 0; i < sk_X509_POLICY_NODE_num(plev->nodes); i++) { node = sk_X509_POLICY_NODE_value(plev->nodes, i); X509_POLICY_NODE_print(err, node, 2); expected_print(err, plev, node, 2); BIO_printf(err, " Flags: %x\n", node->data->flags); } if (plev->anyPolicy) X509_POLICY_NODE_print(err, plev->anyPolicy, 2); } BIO_free(err); }
X509_POLICY_NODE *X509_policy_level_get0_node(X509_POLICY_LEVEL *level, int i) { if (!level) return NULL; if (level->anyPolicy) { if (i == 0) return level->anyPolicy; i--; } return sk_X509_POLICY_NODE_value(level->nodes, i); }