Index: mozilla/security/nss/lib/libpkix/pkix/results/pkix_policynode.c |
=================================================================== |
--- mozilla/security/nss/lib/libpkix/pkix/results/pkix_policynode.c (revision 191424) |
+++ mozilla/security/nss/lib/libpkix/pkix/results/pkix_policynode.c (working copy) |
@@ -1,1377 +0,0 @@ |
-/* This Source Code Form is subject to the terms of the Mozilla Public |
- * License, v. 2.0. If a copy of the MPL was not distributed with this |
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
-/* |
- * pkix_policynode.c |
- * |
- * Policy Node Object Type Definition |
- * |
- */ |
- |
-#include "pkix_policynode.h" |
- |
-/* --Private-PolicyNode-Functions---------------------------------- */ |
- |
-/* |
- * FUNCTION: pkix_PolicyNode_GetChildrenMutable |
- * DESCRIPTION: |
- * |
- * Retrieves the List of PolicyNodes representing the child nodes of the |
- * Policy Node pointed to by "node" and stores it at "pChildren". If "node" |
- * has no List of child nodes, this function stores NULL at "pChildren". |
- * |
- * Note that the List returned by this function may be mutable. This function |
- * differs from the public function PKIX_PolicyNode_GetChildren in that |
- * respect. (It also differs in that the public function creates an empty |
- * List, if necessary, rather than storing NULL.) |
- * |
- * During certificate processing, children Lists are created and modified. |
- * Once the list is accessed using the public call, the List is set immutable. |
- * |
- * PARAMETERS: |
- * "node" |
- * Address of PolicyNode whose child nodes are to be stored. |
- * Must be non-NULL. |
- * "pChildren" |
- * Address where object pointer will be stored. Must be non-NULL. |
- * "plContext" |
- * Platform-specific context pointer. |
- * THREAD SAFETY: |
- * Conditionally Thread Safe |
- * (see Thread Safety Definitions in Programmer's Guide) |
- * RETURNS: |
- * Returns NULL if the function succeeds. |
- * Returns a PolicyNode Error if the function fails in a non-fatal way. |
- * Returns a Fatal Error if the function fails in an unrecoverable way. |
- */ |
-PKIX_Error * |
-pkix_PolicyNode_GetChildrenMutable( |
- PKIX_PolicyNode *node, |
- PKIX_List **pChildren, /* list of PKIX_PolicyNode */ |
- void *plContext) |
-{ |
- |
- PKIX_ENTER(CERTPOLICYNODE, "pkix_PolicyNode_GetChildrenMutable"); |
- |
- PKIX_NULLCHECK_TWO(node, pChildren); |
- |
- PKIX_INCREF(node->children); |
- |
- *pChildren = node->children; |
- |
-cleanup: |
- PKIX_RETURN(CERTPOLICYNODE); |
-} |
- |
-/* |
- * FUNCTION: pkix_PolicyNode_Create |
- * DESCRIPTION: |
- * |
- * Creates a new PolicyNode using the OID pointed to by "validPolicy", the List |
- * of CertPolicyQualifiers pointed to by "qualifierSet", the criticality |
- * indicated by the Boolean value of "criticality", and the List of OIDs |
- * pointed to by "expectedPolicySet", and stores the result at "pObject". The |
- * criticality should be derived from whether the certificate policy extension |
- * was marked as critical in the certificate that led to creation of this |
- * PolicyNode. The "qualifierSet" and "expectedPolicySet" Lists are made |
- * immutable. The PolicyNode pointers to parent and to children are initialized |
- * to NULL, and the depth is set to zero; those values should be set by using |
- * the pkix_PolicyNode_AddToParent function. |
- * |
- * PARAMETERS |
- * "validPolicy" |
- * Address of OID of the valid policy for the path. Must be non-NULL |
- * "qualifierSet" |
- * Address of List of CertPolicyQualifiers associated with the validpolicy. |
- * May be NULL |
- * "criticality" |
- * Boolean indicator of whether the criticality should be set in this |
- * PolicyNode |
- * "expectedPolicySet" |
- * Address of List of OIDs that would satisfy this policy in the next |
- * certificate. Must be non-NULL |
- * "pObject" |
- * Address where the PolicyNode pointer will be stored. Must be non-NULL. |
- * "plContext" |
- * Platform-specific context pointer. |
- * THREAD SAFETY: |
- * Thread Safe (see Thread Safety Definitions in Programmer's Guide) |
- * RETURNS: |
- * Returns NULL if the function succeeds. |
- * Returns a PolicyNode Error if the function fails in a non-fatal way. |
- * Returns a Fatal Error if the function fails in an unrecoverable way. |
- */ |
-PKIX_Error * |
-pkix_PolicyNode_Create( |
- PKIX_PL_OID *validPolicy, |
- PKIX_List *qualifierSet, |
- PKIX_Boolean criticality, |
- PKIX_List *expectedPolicySet, |
- PKIX_PolicyNode **pObject, |
- void *plContext) |
-{ |
- PKIX_PolicyNode *node = NULL; |
- |
- PKIX_ENTER(CERTPOLICYNODE, "pkix_PolicyNode_Create"); |
- |
- PKIX_NULLCHECK_THREE(validPolicy, expectedPolicySet, pObject); |
- |
- PKIX_CHECK(PKIX_PL_Object_Alloc |
- (PKIX_CERTPOLICYNODE_TYPE, |
- sizeof (PKIX_PolicyNode), |
- (PKIX_PL_Object **)&node, |
- plContext), |
- PKIX_COULDNOTCREATEPOLICYNODEOBJECT); |
- |
- PKIX_INCREF(validPolicy); |
- node->validPolicy = validPolicy; |
- |
- PKIX_INCREF(qualifierSet); |
- node->qualifierSet = qualifierSet; |
- if (qualifierSet) { |
- PKIX_CHECK(PKIX_List_SetImmutable(qualifierSet, plContext), |
- PKIX_LISTSETIMMUTABLEFAILED); |
- } |
- |
- node->criticality = criticality; |
- |
- PKIX_INCREF(expectedPolicySet); |
- node->expectedPolicySet = expectedPolicySet; |
- PKIX_CHECK(PKIX_List_SetImmutable(expectedPolicySet, plContext), |
- PKIX_LISTSETIMMUTABLEFAILED); |
- |
- node->parent = NULL; |
- node->children = NULL; |
- node->depth = 0; |
- |
- *pObject = node; |
- node = NULL; |
- |
-cleanup: |
- |
- PKIX_DECREF(node); |
- |
- PKIX_RETURN(CERTPOLICYNODE); |
-} |
- |
-/* |
- * FUNCTION: pkix_PolicyNode_AddToParent |
- * DESCRIPTION: |
- * |
- * Adds the PolicyNode pointed to by "child" to the List of children of |
- * the PolicyNode pointed to by "parentNode". If "parentNode" had a |
- * NULL pointer for the List of children, a new List is created containing |
- * "child". Otherwise "child" is appended to the existing List. The |
- * parent field in "child" is set to "parent", and the depth field is |
- * set to one more than the corresponding value in "parent". |
- * |
- * Depth, in this context, means distance from the root node, which |
- * is at depth zero. |
- * |
- * PARAMETERS: |
- * "parentNode" |
- * Address of PolicyNode whose List of child PolicyNodes is to be |
- * created or appended to. Must be non-NULL. |
- * "child" |
- * Address of PolicyNode to be added to parentNode's List. Must be |
- * non-NULL. |
- * "plContext" |
- * Platform-specific context pointer. |
- * THREAD SAFETY: |
- * Not Thread Safe (see Thread Safety Definitions in Programmer's Guide) |
- * RETURNS: |
- * Returns NULL if the function succeeds. |
- * Returns a PolicyNode Error if the function fails in a non-fatal way. |
- * Returns a Fatal Error if the function fails in an unrecoverable way. |
- */ |
-PKIX_Error * |
-pkix_PolicyNode_AddToParent( |
- PKIX_PolicyNode *parentNode, |
- PKIX_PolicyNode *child, |
- void *plContext) |
-{ |
- PKIX_List *listOfChildren = NULL; |
- |
- PKIX_ENTER(CERTPOLICYNODE, "pkix_PolicyNode_AddToParent"); |
- |
- PKIX_NULLCHECK_TWO(parentNode, child); |
- |
- listOfChildren = parentNode->children; |
- if (listOfChildren == NULL) { |
- PKIX_CHECK(PKIX_List_Create(&listOfChildren, plContext), |
- PKIX_LISTCREATEFAILED); |
- parentNode->children = listOfChildren; |
- } |
- |
- /* |
- * Note: this link is not reference-counted. The link from parent |
- * to child is counted (actually, the parent "owns" a List which |
- * "owns" children), but the children do not "own" the parent. |
- * Otherwise, there would be loops. |
- */ |
- child->parent = parentNode; |
- |
- child->depth = 1 + (parentNode->depth); |
- |
- PKIX_CHECK(PKIX_List_AppendItem |
- (listOfChildren, (PKIX_PL_Object *)child, plContext), |
- PKIX_COULDNOTAPPENDCHILDTOPARENTSPOLICYNODELIST); |
- |
- PKIX_CHECK(PKIX_PL_Object_InvalidateCache |
- ((PKIX_PL_Object *)parentNode, plContext), |
- PKIX_OBJECTINVALIDATECACHEFAILED); |
- |
- PKIX_CHECK(PKIX_PL_Object_InvalidateCache |
- ((PKIX_PL_Object *)child, plContext), |
- PKIX_OBJECTINVALIDATECACHEFAILED); |
- |
-cleanup: |
- |
- PKIX_RETURN(CERTPOLICYNODE); |
-} |
- |
-/* |
- * FUNCTION: pkix_PolicyNode_Prune |
- * DESCRIPTION: |
- * |
- * Prunes a tree below the PolicyNode whose address is pointed to by "node", |
- * using the UInt32 value of "height" as the distance from the leaf level, |
- * and storing at "pDelete" the Boolean value of whether this PolicyNode is, |
- * after pruning, childless and should be pruned. |
- * |
- * Any PolicyNode at height 0 is allowed to survive. If the height is greater |
- * than zero, pkix_PolicyNode_Prune is called recursively for each child of |
- * the current PolicyNode. After this process, a node with no children |
- * stores PKIX_TRUE in "pDelete" to indicate that it should be deleted. |
- * |
- * PARAMETERS: |
- * "node" |
- * Address of the PolicyNode to be pruned. Must be non-NULL. |
- * "height" |
- * UInt32 value for the distance from the leaf level |
- * "pDelete" |
- * Address to store the Boolean return value of PKIX_TRUE if this node |
- * should be pruned, or PKIX_FALSE if there remains at least one |
- * branch of the required height. Must be non-NULL. |
- * "plContext" |
- * Platform-specific context pointer. |
- * THREAD SAFETY: |
- * Not Thread Safe (see Thread Safety Definitions in Programmer's Guide) |
- * RETURNS: |
- * Returns NULL if the function succeeds. |
- * Returns a PolicyNode Error if the function fails in a non-fatal way. |
- * Returns a Fatal Error if the function fails in an unrecoverable way. |
- */ |
-PKIX_Error * |
-pkix_PolicyNode_Prune( |
- PKIX_PolicyNode *node, |
- PKIX_UInt32 height, |
- PKIX_Boolean *pDelete, |
- void *plContext) |
-{ |
- PKIX_Boolean childless = PKIX_FALSE; |
- PKIX_Boolean shouldBePruned = PKIX_FALSE; |
- PKIX_UInt32 listSize = 0; |
- PKIX_UInt32 listIndex = 0; |
- PKIX_PolicyNode *candidate = NULL; |
- |
- PKIX_ENTER(CERTPOLICYNODE, "pkix_PolicyNode_Prune"); |
- |
- PKIX_NULLCHECK_TWO(node, pDelete); |
- |
- /* Don't prune at the leaf */ |
- if (height == 0) { |
- goto cleanup; |
- } |
- |
- /* Above the bottom level, childless nodes get pruned */ |
- if (!(node->children)) { |
- childless = PKIX_TRUE; |
- goto cleanup; |
- } |
- |
- /* |
- * This node has children. If they are leaf nodes, |
- * we know they will live. Otherwise, check them out. |
- */ |
- if (height > 1) { |
- PKIX_CHECK(PKIX_List_GetLength |
- (node->children, &listSize, plContext), |
- PKIX_LISTGETLENGTHFAILED); |
- /* |
- * By working backwards from the end of the list, |
- * we avoid having to worry about possible |
- * decreases in the size of the list, as we |
- * delete items. The only nuisance is that since the |
- * index is UInt32, we can't check for it to reach -1; |
- * we have to use the 1-based index, rather than the |
- * 0-based index that PKIX_List functions require. |
- */ |
- for (listIndex = listSize; listIndex > 0; listIndex--) { |
- PKIX_CHECK(PKIX_List_GetItem |
- (node->children, |
- (listIndex - 1), |
- (PKIX_PL_Object **)&candidate, |
- plContext), |
- PKIX_LISTGETITEMFAILED); |
- |
- PKIX_CHECK(pkix_PolicyNode_Prune |
- (candidate, |
- height - 1, |
- &shouldBePruned, |
- plContext), |
- PKIX_POLICYNODEPRUNEFAILED); |
- |
- if (shouldBePruned == PKIX_TRUE) { |
- PKIX_CHECK(PKIX_List_DeleteItem |
- (node->children, |
- (listIndex - 1), |
- plContext), |
- PKIX_LISTDELETEITEMFAILED); |
- } |
- |
- PKIX_DECREF(candidate); |
- } |
- } |
- |
- /* Prune if this node has *become* childless */ |
- PKIX_CHECK(PKIX_List_GetLength |
- (node->children, &listSize, plContext), |
- PKIX_LISTGETLENGTHFAILED); |
- if (listSize == 0) { |
- childless = PKIX_TRUE; |
- } |
- |
- /* |
- * Even if we did not change this node, or any of its children, |
- * maybe a [great-]*grandchild was pruned. |
- */ |
- PKIX_CHECK(PKIX_PL_Object_InvalidateCache |
- ((PKIX_PL_Object *)node, plContext), |
- PKIX_OBJECTINVALIDATECACHEFAILED); |
- |
-cleanup: |
- *pDelete = childless; |
- |
- PKIX_DECREF(candidate); |
- |
- PKIX_RETURN(CERTPOLICYNODE); |
-} |
- |
-/* |
- * FUNCTION: pkix_SinglePolicyNode_ToString |
- * DESCRIPTION: |
- * |
- * Creates a String representation of the attributes of the PolicyNode |
- * pointed to by "node", other than its parents or children, and |
- * stores the result at "pString". |
- * |
- * PARAMETERS: |
- * "node" |
- * Address of PolicyNode to be described by the string. Must be non-NULL. |
- * "pString" |
- * Address where object pointer will be stored. Must be non-NULL. |
- * "plContext" |
- * Platform-specific context pointer. |
- * THREAD SAFETY: |
- * Conditionally Thread Safe |
- * (see Thread Safety Definitions in Programmer's Guide) |
- * RETURNS: |
- * Returns NULL if function succeeds |
- * Returns a PolicyNode Error if the function fails in a non-fatal way. |
- * Returns a Fatal Error if the function fails in a fatal way |
- */ |
-PKIX_Error * |
-pkix_SinglePolicyNode_ToString( |
- PKIX_PolicyNode *node, |
- PKIX_PL_String **pString, |
- void *plContext) |
-{ |
- PKIX_PL_String *fmtString = NULL; |
- PKIX_PL_String *validString = NULL; |
- PKIX_PL_String *qualifierString = NULL; |
- PKIX_PL_String *criticalityString = NULL; |
- PKIX_PL_String *expectedString = NULL; |
- PKIX_PL_String *outString = NULL; |
- |
- PKIX_ENTER(CERTPOLICYNODE, "pkix_SinglePolicyNode_ToString"); |
- PKIX_NULLCHECK_TWO(node, pString); |
- PKIX_NULLCHECK_TWO(node->validPolicy, node->expectedPolicySet); |
- |
- PKIX_CHECK(PKIX_PL_String_Create |
- (PKIX_ESCASCII, |
- "{%s,%s,%s,%s,%d}", |
- 0, |
- &fmtString, |
- plContext), |
- PKIX_CANTCREATESTRING); |
- |
- PKIX_CHECK(PKIX_PL_Object_ToString |
- ((PKIX_PL_Object *)(node->validPolicy), |
- &validString, |
- plContext), |
- PKIX_OIDTOSTRINGFAILED); |
- |
- PKIX_CHECK(PKIX_PL_Object_ToString |
- ((PKIX_PL_Object *)(node->expectedPolicySet), |
- &expectedString, |
- plContext), |
- PKIX_LISTTOSTRINGFAILED); |
- |
- if (node->qualifierSet) { |
- PKIX_CHECK(PKIX_PL_Object_ToString |
- ((PKIX_PL_Object *)(node->qualifierSet), |
- &qualifierString, |
- plContext), |
- PKIX_LISTTOSTRINGFAILED); |
- } else { |
- PKIX_CHECK(PKIX_PL_String_Create |
- (PKIX_ESCASCII, |
- "{}", |
- 0, |
- &qualifierString, |
- plContext), |
- PKIX_CANTCREATESTRING); |
- } |
- |
- PKIX_CHECK(PKIX_PL_String_Create |
- (PKIX_ESCASCII, |
- (node->criticality)?"Critical":"Not Critical", |
- 0, |
- &criticalityString, |
- plContext), |
- PKIX_CANTCREATESTRING); |
- |
- PKIX_CHECK(PKIX_PL_Sprintf |
- (&outString, |
- plContext, |
- fmtString, |
- validString, |
- qualifierString, |
- criticalityString, |
- expectedString, |
- node->depth), |
- PKIX_SPRINTFFAILED); |
- |
- *pString = outString; |
- |
-cleanup: |
- |
- PKIX_DECREF(fmtString); |
- PKIX_DECREF(validString); |
- PKIX_DECREF(qualifierString); |
- PKIX_DECREF(criticalityString); |
- PKIX_DECREF(expectedString); |
- PKIX_RETURN(CERTPOLICYNODE); |
-} |
- |
-/* |
- * FUNCTION: pkix_PolicyNode_ToString_Helper |
- * DESCRIPTION: |
- * |
- * Produces a String representation of a PolicyNode tree below the PolicyNode |
- * pointed to by "rootNode", with each line of output prefixed by the String |
- * pointed to by "indent", and stores the result at "pTreeString". It is |
- * called recursively, with ever-increasing indentation, for successively |
- * lower nodes on the tree. |
- * |
- * PARAMETERS: |
- * "rootNode" |
- * Address of PolicyNode subtree. Must be non-NULL. |
- * "indent" |
- * Address of String to be prefixed to each line of output. May be NULL |
- * if no indentation is desired |
- * "pTreeString" |
- * Address where the resulting String will be stored; must be non-NULL |
- * "plContext" |
- * Platform-specific context pointer. |
- * THREAD SAFETY: |
- * Conditionally Thread Safe |
- * (see Thread Safety Definitions in Programmer's Guide) |
- * RETURNS: |
- * Returns NULL if the function succeeds. |
- * Returns a PolicyNode Error if the function fails in a non-fatal way. |
- * Returns a Fatal Error if the function fails in an unrecoverable way. |
- */ |
-static PKIX_Error * |
-pkix_PolicyNode_ToString_Helper( |
- PKIX_PolicyNode *rootNode, |
- PKIX_PL_String *indent, |
- PKIX_PL_String **pTreeString, |
- void *plContext) |
-{ |
- PKIX_PL_String *nextIndentFormat = NULL; |
- PKIX_PL_String *thisNodeFormat = NULL; |
- PKIX_PL_String *childrenFormat = NULL; |
- PKIX_PL_String *nextIndentString = NULL; |
- PKIX_PL_String *resultString = NULL; |
- PKIX_PL_String *thisItemString = NULL; |
- PKIX_PL_String *childString = NULL; |
- PKIX_PolicyNode *childNode = NULL; |
- PKIX_UInt32 numberOfChildren = 0; |
- PKIX_UInt32 childIndex = 0; |
- |
- PKIX_ENTER(CERTPOLICYNODE, "pkix_PolicyNode_ToString_Helper"); |
- |
- PKIX_NULLCHECK_TWO(rootNode, pTreeString); |
- |
- /* Create a string for this node */ |
- PKIX_CHECK(pkix_SinglePolicyNode_ToString |
- (rootNode, &thisItemString, plContext), |
- PKIX_ERRORINSINGLEPOLICYNODETOSTRING); |
- |
- if (indent) { |
- PKIX_CHECK(PKIX_PL_String_Create |
- (PKIX_ESCASCII, |
- "%s%s", |
- 0, |
- &thisNodeFormat, |
- plContext), |
- PKIX_ERRORCREATINGFORMATSTRING); |
- |
- PKIX_CHECK(PKIX_PL_Sprintf |
- (&resultString, |
- plContext, |
- thisNodeFormat, |
- indent, |
- thisItemString), |
- PKIX_ERRORINSPRINTF); |
- } else { |
- PKIX_CHECK(PKIX_PL_String_Create |
- (PKIX_ESCASCII, |
- "%s", |
- 0, |
- &thisNodeFormat, |
- plContext), |
- PKIX_ERRORCREATINGFORMATSTRING); |
- |
- PKIX_CHECK(PKIX_PL_Sprintf |
- (&resultString, |
- plContext, |
- thisNodeFormat, |
- thisItemString), |
- PKIX_ERRORINSPRINTF); |
- } |
- |
- PKIX_DECREF(thisItemString); |
- thisItemString = resultString; |
- |
- /* if no children, we are done */ |
- if (rootNode->children) { |
- PKIX_CHECK(PKIX_List_GetLength |
- (rootNode->children, &numberOfChildren, plContext), |
- PKIX_LISTGETLENGTHFAILED); |
- } |
- |
- if (numberOfChildren != 0) { |
- /* |
- * We create a string for each child in turn, |
- * concatenating them to thisItemString. |
- */ |
- |
- /* Prepare an indent string for each child */ |
- if (indent) { |
- PKIX_CHECK(PKIX_PL_String_Create |
- (PKIX_ESCASCII, |
- "%s. ", |
- 0, |
- &nextIndentFormat, |
- plContext), |
- PKIX_ERRORCREATINGFORMATSTRING); |
- |
- PKIX_CHECK(PKIX_PL_Sprintf |
- (&nextIndentString, |
- plContext, |
- nextIndentFormat, |
- indent), |
- PKIX_ERRORINSPRINTF); |
- } else { |
- PKIX_CHECK(PKIX_PL_String_Create |
- (PKIX_ESCASCII, |
- ". ", |
- 0, |
- &nextIndentString, |
- plContext), |
- PKIX_ERRORCREATINGINDENTSTRING); |
- } |
- |
- /* Prepare the format for concatenation. */ |
- PKIX_CHECK(PKIX_PL_String_Create |
- (PKIX_ESCASCII, |
- "%s\n%s", |
- 0, |
- &childrenFormat, |
- plContext), |
- PKIX_ERRORCREATINGFORMATSTRING); |
- |
- for (childIndex = 0; |
- childIndex < numberOfChildren; |
- childIndex++) { |
- PKIX_CHECK(PKIX_List_GetItem |
- (rootNode->children, |
- childIndex, |
- (PKIX_PL_Object **)&childNode, |
- plContext), |
- PKIX_LISTGETITEMFAILED); |
- |
- PKIX_CHECK(pkix_PolicyNode_ToString_Helper |
- (childNode, |
- nextIndentString, |
- &childString, |
- plContext), |
- PKIX_ERRORCREATINGCHILDSTRING); |
- |
- |
- PKIX_CHECK(PKIX_PL_Sprintf |
- (&resultString, |
- plContext, |
- childrenFormat, |
- thisItemString, |
- childString), |
- PKIX_ERRORINSPRINTF); |
- |
- PKIX_DECREF(childNode); |
- PKIX_DECREF(childString); |
- PKIX_DECREF(thisItemString); |
- |
- thisItemString = resultString; |
- } |
- } |
- |
- *pTreeString = thisItemString; |
- |
-cleanup: |
- if (PKIX_ERROR_RECEIVED) { |
- PKIX_DECREF(thisItemString); |
- } |
- |
- PKIX_DECREF(nextIndentFormat); |
- PKIX_DECREF(thisNodeFormat); |
- PKIX_DECREF(childrenFormat); |
- PKIX_DECREF(nextIndentString); |
- PKIX_DECREF(childString); |
- PKIX_DECREF(childNode); |
- |
- PKIX_RETURN(CERTPOLICYNODE); |
-} |
- |
-/* |
- * FUNCTION: pkix_PolicyNode_ToString |
- * (see comments for PKIX_PL_ToStringCallback in pkix_pl_system.h) |
- */ |
-static PKIX_Error * |
-pkix_PolicyNode_ToString( |
- PKIX_PL_Object *object, |
- PKIX_PL_String **pTreeString, |
- void *plContext) |
-{ |
- PKIX_PolicyNode *rootNode = NULL; |
- PKIX_PL_String *resultString = NULL; |
- |
- PKIX_ENTER(CERTPOLICYNODE, "pkix_PolicyNode_ToString"); |
- |
- PKIX_NULLCHECK_TWO(object, pTreeString); |
- |
- PKIX_CHECK(pkix_CheckType(object, PKIX_CERTPOLICYNODE_TYPE, plContext), |
- PKIX_OBJECTNOTPOLICYNODE); |
- |
- rootNode = (PKIX_PolicyNode *)object; |
- |
- PKIX_CHECK(pkix_PolicyNode_ToString_Helper |
- (rootNode, NULL, &resultString, plContext), |
- PKIX_ERRORCREATINGSUBTREESTRING); |
- |
- *pTreeString = resultString; |
- |
-cleanup: |
- |
- PKIX_RETURN(CERTPOLICYNODE); |
-} |
- |
-/* |
- * FUNCTION: pkix_PolicyNode_Destroy |
- * (see comments for PKIX_PL_DestructorCallback in pkix_pl_system.h) |
- */ |
-static PKIX_Error * |
-pkix_PolicyNode_Destroy( |
- PKIX_PL_Object *object, |
- void *plContext) |
-{ |
- PKIX_PolicyNode *node = NULL; |
- |
- PKIX_ENTER(CERTPOLICYNODE, "pkix_PolicyNode_Destroy"); |
- |
- PKIX_NULLCHECK_ONE(object); |
- |
- PKIX_CHECK(pkix_CheckType(object, PKIX_CERTPOLICYNODE_TYPE, plContext), |
- PKIX_OBJECTNOTPOLICYNODE); |
- |
- node = (PKIX_PolicyNode*)object; |
- |
- node->criticality = PKIX_FALSE; |
- PKIX_DECREF(node->validPolicy); |
- PKIX_DECREF(node->qualifierSet); |
- PKIX_DECREF(node->expectedPolicySet); |
- PKIX_DECREF(node->children); |
- |
- /* |
- * Note: the link to parent is not reference-counted. See comment |
- * in pkix_PolicyNode_AddToParent for more details. |
- */ |
- node->parent = NULL; |
- node->depth = 0; |
- |
-cleanup: |
- |
- PKIX_RETURN(CERTPOLICYNODE); |
-} |
- |
-/* |
- * FUNCTION: pkix_SinglePolicyNode_Hashcode |
- * DESCRIPTION: |
- * |
- * Computes the hashcode of the attributes of the PolicyNode pointed to by |
- * "node", other than its parents and children, and stores the result at |
- * "pHashcode". |
- * |
- * PARAMETERS: |
- * "node" |
- * Address of PolicyNode to be hashcoded; must be non-NULL |
- * "pHashcode" |
- * Address where UInt32 result will be stored; must be non-NULL |
- * "plContext" |
- * Platform-specific context pointer. |
- * THREAD SAFETY: |
- * Conditionally Thread Safe |
- * (see Thread Safety Definitions in Programmer's Guide) |
- * RETURNS: |
- * Returns NULL if function succeeds |
- * Returns a PolicyNode Error if the function fails in a non-fatal way. |
- * Returns a Fatal Error if the function fails in a fatal way |
- */ |
-static PKIX_Error * |
-pkix_SinglePolicyNode_Hashcode( |
- PKIX_PolicyNode *node, |
- PKIX_UInt32 *pHashcode, |
- void *plContext) |
-{ |
- PKIX_UInt32 componentHash = 0; |
- PKIX_UInt32 nodeHash = 0; |
- |
- PKIX_ENTER(CERTPOLICYNODE, "pkix_SinglePolicyNode_Hashcode"); |
- PKIX_NULLCHECK_TWO(node, pHashcode); |
- PKIX_NULLCHECK_TWO(node->validPolicy, node->expectedPolicySet); |
- |
- PKIX_HASHCODE |
- (node->qualifierSet, |
- &nodeHash, |
- plContext, |
- PKIX_FAILUREHASHINGLISTQUALIFIERSET); |
- |
- if (PKIX_TRUE == (node->criticality)) { |
- nodeHash = 31*nodeHash + 0xff; |
- } else { |
- nodeHash = 31*nodeHash + 0x00; |
- } |
- |
- PKIX_CHECK(PKIX_PL_Object_Hashcode |
- ((PKIX_PL_Object *)node->validPolicy, |
- &componentHash, |
- plContext), |
- PKIX_FAILUREHASHINGOIDVALIDPOLICY); |
- |
- nodeHash = 31*nodeHash + componentHash; |
- |
- PKIX_CHECK(PKIX_PL_Object_Hashcode |
- ((PKIX_PL_Object *)node->expectedPolicySet, |
- &componentHash, |
- plContext), |
- PKIX_FAILUREHASHINGLISTEXPECTEDPOLICYSET); |
- |
- nodeHash = 31*nodeHash + componentHash; |
- |
- *pHashcode = nodeHash; |
- |
-cleanup: |
- |
- PKIX_RETURN(CERTPOLICYNODE); |
-} |
- |
-/* |
- * FUNCTION: pkix_PolicyNode_Hashcode |
- * (see comments for PKIX_PL_HashcodeCallback in pkix_pl_system.h) |
- */ |
-static PKIX_Error * |
-pkix_PolicyNode_Hashcode( |
- PKIX_PL_Object *object, |
- PKIX_UInt32 *pHashcode, |
- void *plContext) |
-{ |
- PKIX_PolicyNode *node = NULL; |
- PKIX_UInt32 childrenHash = 0; |
- PKIX_UInt32 nodeHash = 0; |
- |
- PKIX_ENTER(CERTPOLICYNODE, "pkix_PolicyNode_Hashcode"); |
- PKIX_NULLCHECK_TWO(object, pHashcode); |
- |
- PKIX_CHECK(pkix_CheckType |
- (object, PKIX_CERTPOLICYNODE_TYPE, plContext), |
- PKIX_OBJECTNOTPOLICYNODE); |
- |
- node = (PKIX_PolicyNode *)object; |
- |
- PKIX_CHECK(pkix_SinglePolicyNode_Hashcode |
- (node, &nodeHash, plContext), |
- PKIX_SINGLEPOLICYNODEHASHCODEFAILED); |
- |
- nodeHash = 31*nodeHash + (PKIX_UInt32)(node->parent); |
- |
- PKIX_HASHCODE |
- (node->children, |
- &childrenHash, |
- plContext, |
- PKIX_OBJECTHASHCODEFAILED); |
- |
- nodeHash = 31*nodeHash + childrenHash; |
- |
- *pHashcode = nodeHash; |
- |
-cleanup: |
- |
- PKIX_RETURN(CERTPOLICYNODE); |
-} |
- |
-/* |
- * FUNCTION: pkix_SinglePolicyNode_Equals |
- * DESCRIPTION: |
- * |
- * Compares for equality the components of the PolicyNode pointed to by |
- * "firstPN", other than its parents and children, with those of the |
- * PolicyNode pointed to by "secondPN" and stores the result at "pResult" |
- * (PKIX_TRUE if equal; PKIX_FALSE if not). |
- * |
- * PARAMETERS: |
- * "firstPN" |
- * Address of first of the PolicyNodes to be compared; must be non-NULL |
- * "secondPN" |
- * Address of second of the PolicyNodes to be compared; must be non-NULL |
- * "pResult" |
- * Address where Boolean will be stored; must be non-NULL |
- * "plContext" |
- * Platform-specific context pointer. |
- * THREAD SAFETY: |
- * Conditionally Thread Safe |
- * (see Thread Safety Definitions in Programmer's Guide) |
- * RETURNS: |
- * Returns NULL if function succeeds |
- * Returns a PolicyNode Error if the function fails in a non-fatal way. |
- * Returns a Fatal Error if the function fails in a fatal way |
- */ |
-static PKIX_Error * |
-pkix_SinglePolicyNode_Equals( |
- PKIX_PolicyNode *firstPN, |
- PKIX_PolicyNode *secondPN, |
- PKIX_Boolean *pResult, |
- void *plContext) |
-{ |
- PKIX_Boolean compResult = PKIX_FALSE; |
- |
- PKIX_ENTER(CERTPOLICYNODE, "pkix_SinglePolicyNode_Equals"); |
- PKIX_NULLCHECK_THREE(firstPN, secondPN, pResult); |
- |
- /* If both references are identical, they must be equal */ |
- if (firstPN == secondPN) { |
- compResult = PKIX_TRUE; |
- goto cleanup; |
- } |
- |
- /* |
- * It seems we have to do the comparisons. Do |
- * the easiest ones first. |
- */ |
- if ((firstPN->criticality) != (secondPN->criticality)) { |
- goto cleanup; |
- } |
- if ((firstPN->depth) != (secondPN->depth)) { |
- goto cleanup; |
- } |
- |
- PKIX_EQUALS |
- (firstPN->qualifierSet, |
- secondPN->qualifierSet, |
- &compResult, |
- plContext, |
- PKIX_OBJECTEQUALSFAILED); |
- |
- if (compResult == PKIX_FALSE) { |
- goto cleanup; |
- } |
- |
- /* These fields must be non-NULL */ |
- PKIX_NULLCHECK_TWO(firstPN->validPolicy, secondPN->validPolicy); |
- |
- PKIX_EQUALS |
- (firstPN->validPolicy, |
- secondPN->validPolicy, |
- &compResult, |
- plContext, |
- PKIX_OBJECTEQUALSFAILED); |
- |
- if (compResult == PKIX_FALSE) { |
- goto cleanup; |
- } |
- |
- /* These fields must be non-NULL */ |
- PKIX_NULLCHECK_TWO |
- (firstPN->expectedPolicySet, secondPN->expectedPolicySet); |
- |
- PKIX_EQUALS |
- (firstPN->expectedPolicySet, |
- secondPN->expectedPolicySet, |
- &compResult, |
- plContext, |
- PKIX_OBJECTEQUALSFAILEDONEXPECTEDPOLICYSETS); |
- |
-cleanup: |
- |
- *pResult = compResult; |
- |
- PKIX_RETURN(CERTPOLICYNODE); |
-} |
- |
-/* |
- * FUNCTION: pkix_PolicyNode_Equals |
- * (see comments for PKIX_PL_Equals_Callback in pkix_pl_system.h) |
- */ |
-static PKIX_Error * |
-pkix_PolicyNode_Equals( |
- PKIX_PL_Object *firstObject, |
- PKIX_PL_Object *secondObject, |
- PKIX_Boolean *pResult, |
- void *plContext) |
-{ |
- PKIX_PolicyNode *firstPN = NULL; |
- PKIX_PolicyNode *secondPN = NULL; |
- PKIX_UInt32 secondType; |
- PKIX_Boolean compResult = PKIX_FALSE; |
- |
- PKIX_ENTER(CERTPOLICYNODE, "pkix_PolicyNode_Equals"); |
- PKIX_NULLCHECK_THREE(firstObject, secondObject, pResult); |
- |
- /* test that firstObject is a PolicyNode */ |
- PKIX_CHECK(pkix_CheckType |
- (firstObject, PKIX_CERTPOLICYNODE_TYPE, plContext), |
- PKIX_FIRSTOBJECTNOTPOLICYNODE); |
- |
- /* |
- * Since we know firstObject is a PolicyNode, |
- * if both references are identical, they must be equal |
- */ |
- if (firstObject == secondObject){ |
- compResult = PKIX_TRUE; |
- goto cleanup; |
- } |
- |
- /* |
- * If secondObject isn't a PolicyNode, we |
- * don't throw an error. We simply return FALSE. |
- */ |
- PKIX_CHECK(PKIX_PL_Object_GetType |
- (secondObject, &secondType, plContext), |
- PKIX_COULDNOTGETTYPEOFSECONDARGUMENT); |
- |
- if (secondType != PKIX_CERTPOLICYNODE_TYPE) { |
- goto cleanup; |
- } |
- |
- /* |
- * Oh, well, we have to do the comparisons. Do |
- * the easiest ones first. |
- */ |
- firstPN = (PKIX_PolicyNode *)firstObject; |
- secondPN = (PKIX_PolicyNode *)secondObject; |
- |
- /* |
- * We don't require the parents to be identical. In the |
- * course of traversing the tree, we will have checked the |
- * attributes of the parent nodes, and checking the lists |
- * of children will determine whether they match. |
- */ |
- |
- PKIX_EQUALS |
- (firstPN->children, |
- secondPN->children, |
- &compResult, |
- plContext, |
- PKIX_OBJECTEQUALSFAILEDONCHILDREN); |
- |
- if (compResult == PKIX_FALSE) { |
- goto cleanup; |
- } |
- |
- PKIX_CHECK(pkix_SinglePolicyNode_Equals |
- (firstPN, secondPN, &compResult, plContext), |
- PKIX_SINGLEPOLICYNODEEQUALSFAILED); |
- |
-cleanup: |
- |
- *pResult = compResult; |
- |
- PKIX_RETURN(CERTPOLICYNODE); |
-} |
- |
-/* |
- * FUNCTION: pkix_PolicyNode_DuplicateHelper |
- * DESCRIPTION: |
- * |
- * Duplicates the PolicyNode whose address is pointed to by "original", |
- * and stores the result at "pNewNode", if a non-NULL pointer is provided |
- * for "pNewNode". In addition, the created PolicyNode is added as a child |
- * to "parent", if a non-NULL pointer is provided for "parent". Then this |
- * function is called recursively to duplicate each of the children of |
- * "original". At the top level this function is called with a null |
- * "parent" and a non-NULL "pNewNode". Below the top level "parent" will |
- * be non-NULL and "pNewNode" will be NULL. |
- * |
- * PARAMETERS: |
- * "original" |
- * Address of PolicyNode to be copied; must be non-NULL |
- * "parent" |
- * Address of PolicyNode to which the created node is to be added as a |
- * child; NULL for the top-level call and non-NULL below the top level |
- * "pNewNode" |
- * Address to store the node created; should be NULL if "parent" is |
- * non-NULL and vice versa |
- * "plContext" |
- * Platform-specific context pointer. |
- * THREAD SAFETY: |
- * Conditionally Thread Safe |
- * (see Thread Safety Definitions in Programmer's Guide) |
- * RETURNS: |
- * Returns NULL if function succeeds |
- * Returns a PolicyNode Error if the function fails in a non-fatal way. |
- * Returns a Fatal Error if the function fails in a fatal way |
- */ |
-static PKIX_Error * |
-pkix_PolicyNode_DuplicateHelper( |
- PKIX_PolicyNode *original, |
- PKIX_PolicyNode *parent, |
- PKIX_PolicyNode **pNewNode, |
- void *plContext) |
-{ |
- PKIX_UInt32 numChildren = 0; |
- PKIX_UInt32 childIndex = 0; |
- PKIX_List *children = NULL; /* List of PKIX_PolicyNode */ |
- PKIX_PolicyNode *copy = NULL; |
- PKIX_PolicyNode *child = NULL; |
- |
- PKIX_ENTER(CERTPOLICYNODE, "pkix_PolicyNode_DuplicateHelper"); |
- |
- PKIX_NULLCHECK_THREE |
- (original, original->validPolicy, original->expectedPolicySet); |
- |
- /* |
- * These components are immutable, so copying the pointers |
- * is sufficient. The create function increments the reference |
- * counts as it stores the pointers into the new object. |
- */ |
- PKIX_CHECK(pkix_PolicyNode_Create |
- (original->validPolicy, |
- original->qualifierSet, |
- original->criticality, |
- original->expectedPolicySet, |
- ©, |
- plContext), |
- PKIX_POLICYNODECREATEFAILED); |
- |
- if (parent) { |
- PKIX_CHECK(pkix_PolicyNode_AddToParent(parent, copy, plContext), |
- PKIX_POLICYNODEADDTOPARENTFAILED); |
- } |
- |
- /* Are there any children to duplicate? */ |
- children = original->children; |
- |
- if (children) { |
- PKIX_CHECK(PKIX_List_GetLength(children, &numChildren, plContext), |
- PKIX_LISTGETLENGTHFAILED); |
- } |
- |
- for (childIndex = 0; childIndex < numChildren; childIndex++) { |
- PKIX_CHECK(PKIX_List_GetItem |
- (children, |
- childIndex, |
- (PKIX_PL_Object **)&child, |
- plContext), |
- PKIX_LISTGETITEMFAILED); |
- |
- PKIX_CHECK(pkix_PolicyNode_DuplicateHelper |
- (child, copy, NULL, plContext), |
- PKIX_POLICYNODEDUPLICATEHELPERFAILED); |
- |
- PKIX_DECREF(child); |
- } |
- |
- if (pNewNode) { |
- *pNewNode = copy; |
- copy = NULL; /* no DecRef if we give our handle away */ |
- } |
- |
-cleanup: |
- PKIX_DECREF(copy); |
- PKIX_DECREF(child); |
- |
- PKIX_RETURN(CERTPOLICYNODE); |
-} |
- |
-/* |
- * FUNCTION: pkix_PolicyNode_Duplicate |
- * (see comments for PKIX_PL_Duplicate_Callback in pkix_pl_system.h) |
- */ |
-static PKIX_Error * |
-pkix_PolicyNode_Duplicate( |
- PKIX_PL_Object *object, |
- PKIX_PL_Object **pNewObject, |
- void *plContext) |
-{ |
- PKIX_PolicyNode *original = NULL; |
- PKIX_PolicyNode *copy = NULL; |
- |
- PKIX_ENTER(CERTPOLICYNODE, "pkix_PolicyNode_Duplicate"); |
- |
- PKIX_NULLCHECK_TWO(object, pNewObject); |
- |
- PKIX_CHECK(pkix_CheckType |
- (object, PKIX_CERTPOLICYNODE_TYPE, plContext), |
- PKIX_OBJECTNOTPOLICYNODE); |
- |
- original = (PKIX_PolicyNode *)object; |
- |
- PKIX_CHECK(pkix_PolicyNode_DuplicateHelper |
- (original, NULL, ©, plContext), |
- PKIX_POLICYNODEDUPLICATEHELPERFAILED); |
- |
- *pNewObject = (PKIX_PL_Object *)copy; |
- |
-cleanup: |
- |
- PKIX_RETURN(CERTPOLICYNODE); |
-} |
- |
-/* |
- * FUNCTION: pkix_PolicyNode_RegisterSelf |
- * DESCRIPTION: |
- * |
- * Registers PKIX_CERTPOLICYNODE_TYPE and its related |
- * functions with systemClasses[] |
- * |
- * THREAD SAFETY: |
- * Not Thread Safe - for performance and complexity reasons |
- * |
- * Since this function is only called by PKIX_PL_Initialize, |
- * which should only be called once, it is acceptable that |
- * this function is not thread-safe. |
- */ |
-PKIX_Error * |
-pkix_PolicyNode_RegisterSelf(void *plContext) |
-{ |
- |
- extern pkix_ClassTable_Entry systemClasses[PKIX_NUMTYPES]; |
- pkix_ClassTable_Entry entry; |
- |
- PKIX_ENTER(CERTPOLICYNODE, "pkix_PolicyNode_RegisterSelf"); |
- |
- entry.description = "PolicyNode"; |
- entry.objCounter = 0; |
- entry.typeObjectSize = sizeof(PKIX_PolicyNode); |
- entry.destructor = pkix_PolicyNode_Destroy; |
- entry.equalsFunction = pkix_PolicyNode_Equals; |
- entry.hashcodeFunction = pkix_PolicyNode_Hashcode; |
- entry.toStringFunction = pkix_PolicyNode_ToString; |
- entry.comparator = NULL; |
- entry.duplicateFunction = pkix_PolicyNode_Duplicate; |
- |
- systemClasses[PKIX_CERTPOLICYNODE_TYPE] = entry; |
- |
- PKIX_RETURN(CERTPOLICYNODE); |
-} |
- |
- |
-/* --Public-PolicyNode-Functions----------------------------------- */ |
- |
-/* |
- * FUNCTION: PKIX_PolicyNode_GetChildren |
- * (see description of this function in pkix_results.h) |
- */ |
-PKIX_Error * |
-PKIX_PolicyNode_GetChildren( |
- PKIX_PolicyNode *node, |
- PKIX_List **pChildren, /* list of PKIX_PolicyNode */ |
- void *plContext) |
-{ |
- PKIX_List *children = NULL; |
- |
- PKIX_ENTER(CERTPOLICYNODE, "PKIX_PolicyNode_GetChildren"); |
- |
- PKIX_NULLCHECK_TWO(node, pChildren); |
- |
- PKIX_INCREF(node->children); |
- children = node->children; |
- |
- if (!children) { |
- PKIX_CHECK(PKIX_List_Create(&children, plContext), |
- PKIX_LISTCREATEFAILED); |
- } |
- |
- PKIX_CHECK(PKIX_List_SetImmutable(children, plContext), |
- PKIX_LISTSETIMMUTABLEFAILED); |
- |
- *pChildren = children; |
- |
-cleanup: |
- if (PKIX_ERROR_RECEIVED) { |
- PKIX_DECREF(children); |
- } |
- |
- PKIX_RETURN(CERTPOLICYNODE); |
-} |
- |
-/* |
- * FUNCTION: PKIX_PolicyNode_GetParent |
- * (see description of this function in pkix_results.h) |
- */ |
-PKIX_Error * |
-PKIX_PolicyNode_GetParent( |
- PKIX_PolicyNode *node, |
- PKIX_PolicyNode **pParent, |
- void *plContext) |
-{ |
- |
- PKIX_ENTER(CERTPOLICYNODE, "PKIX_PolicyNode_GetParent"); |
- |
- PKIX_NULLCHECK_TWO(node, pParent); |
- |
- PKIX_INCREF(node->parent); |
- *pParent = node->parent; |
- |
-cleanup: |
- PKIX_RETURN(CERTPOLICYNODE); |
-} |
- |
-/* |
- * FUNCTION: PKIX_PolicyNode_GetValidPolicy |
- * (see description of this function in pkix_results.h) |
- */ |
-PKIX_Error * |
-PKIX_PolicyNode_GetValidPolicy( |
- PKIX_PolicyNode *node, |
- PKIX_PL_OID **pValidPolicy, |
- void *plContext) |
-{ |
- |
- PKIX_ENTER(CERTPOLICYNODE, "PKIX_PolicyNode_GetValidPolicy"); |
- |
- PKIX_NULLCHECK_TWO(node, pValidPolicy); |
- |
- PKIX_INCREF(node->validPolicy); |
- *pValidPolicy = node->validPolicy; |
- |
-cleanup: |
- PKIX_RETURN(CERTPOLICYNODE); |
-} |
- |
-/* |
- * FUNCTION: PKIX_PolicyNode_GetPolicyQualifiers |
- * (see description of this function in pkix_results.h) |
- */ |
-PKIX_Error * |
-PKIX_PolicyNode_GetPolicyQualifiers( |
- PKIX_PolicyNode *node, |
- PKIX_List **pQualifiers, /* list of PKIX_PL_CertPolicyQualifier */ |
- void *plContext) |
-{ |
- PKIX_List *qualifiers = NULL; |
- |
- PKIX_ENTER(CERTPOLICYNODE, "PKIX_PolicyNode_GetPolicyQualifiers"); |
- |
- PKIX_NULLCHECK_TWO(node, pQualifiers); |
- |
- PKIX_INCREF(node->qualifierSet); |
- qualifiers = node->qualifierSet; |
- |
- if (!qualifiers) { |
- PKIX_CHECK(PKIX_List_Create(&qualifiers, plContext), |
- PKIX_LISTCREATEFAILED); |
- } |
- |
- PKIX_CHECK(PKIX_List_SetImmutable(qualifiers, plContext), |
- PKIX_LISTSETIMMUTABLEFAILED); |
- |
- *pQualifiers = qualifiers; |
- |
-cleanup: |
- |
- PKIX_RETURN(CERTPOLICYNODE); |
-} |
- |
-/* |
- * FUNCTION: PKIX_PolicyNode_GetExpectedPolicies |
- * (see description of this function in pkix_results.h) |
- */ |
-PKIX_Error * |
-PKIX_PolicyNode_GetExpectedPolicies( |
- PKIX_PolicyNode *node, |
- PKIX_List **pExpPolicies, /* list of PKIX_PL_OID */ |
- void *plContext) |
-{ |
- |
- PKIX_ENTER(CERTPOLICYNODE, "PKIX_PolicyNode_GetExpectedPolicies"); |
- |
- PKIX_NULLCHECK_TWO(node, pExpPolicies); |
- |
- PKIX_INCREF(node->expectedPolicySet); |
- *pExpPolicies = node->expectedPolicySet; |
- |
-cleanup: |
- PKIX_RETURN(CERTPOLICYNODE); |
-} |
- |
-/* |
- * FUNCTION: PKIX_PolicyNode_IsCritical |
- * (see description of this function in pkix_results.h) |
- */ |
-PKIX_Error * |
-PKIX_PolicyNode_IsCritical( |
- PKIX_PolicyNode *node, |
- PKIX_Boolean *pCritical, |
- void *plContext) |
-{ |
- |
- PKIX_ENTER(CERTPOLICYNODE, "PKIX_PolicyNode_IsCritical"); |
- |
- PKIX_NULLCHECK_TWO(node, pCritical); |
- |
- *pCritical = node->criticality; |
- |
- PKIX_RETURN(CERTPOLICYNODE); |
-} |
- |
-/* |
- * FUNCTION: PKIX_PolicyNode_GetDepth |
- * (see description of this function in pkix_results.h) |
- */ |
-PKIX_Error * |
-PKIX_PolicyNode_GetDepth( |
- PKIX_PolicyNode *node, |
- PKIX_UInt32 *pDepth, |
- void *plContext) |
-{ |
- |
- PKIX_ENTER(CERTPOLICYNODE, "PKIX_PolicyNode_GetDepth"); |
- |
- PKIX_NULLCHECK_TWO(node, pDepth); |
- |
- *pDepth = node->depth; |
- |
- PKIX_RETURN(CERTPOLICYNODE); |
-} |