File: | s/lib/libpkix/pkix_pl_nss/pki/pkix_pl_crlentry.c |
Warning: | line 764, column 40 Access to field 'serialNumber' results in a dereference of a null pointer (loaded from variable 'crlEntry') |
Press '?' to see keyboard shortcuts
Keyboard shortcuts:
1 | /* This Source Code Form is subject to the terms of the Mozilla Public | |||
2 | * License, v. 2.0. If a copy of the MPL was not distributed with this | |||
3 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | |||
4 | /* | |||
5 | * pkix_pl_crlentry.c | |||
6 | * | |||
7 | * CRLENTRY Function Definitions | |||
8 | * | |||
9 | */ | |||
10 | ||||
11 | #include "pkix_pl_crlentry.h" | |||
12 | ||||
13 | /* --Private-CRLEntry-Functions------------------------------------- */ | |||
14 | ||||
15 | /* | |||
16 | * FUNCTION: pkix_pl_CRLEntry_Destroy | |||
17 | * (see comments for PKIX_PL_DestructorCallback in pkix_pl_system.h) | |||
18 | */ | |||
19 | static PKIX_Error * | |||
20 | pkix_pl_CRLEntry_Destroy( | |||
21 | PKIX_PL_Object *object, | |||
22 | void *plContext) | |||
23 | { | |||
24 | PKIX_PL_CRLEntry *crlEntry = NULL((void*)0); | |||
25 | ||||
26 | PKIX_ENTER(CRLENTRY, "pkix_pl_CRLEntry_Destroy")static const char cMyFuncName[] = {"pkix_pl_CRLEntry_Destroy" }; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName ; stdVars.aPkixType = PKIX_CRLENTRY_ERROR; ; do { if (pkixLoggersDebugTrace ) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName , ">>>", stdVars.aPkixType, 5, plContext); } } while (0);; | |||
27 | PKIX_NULLCHECK_ONE(object)do { if ((object) == ((void*)0)){ stdVars.aPkixErrorReceived = ((PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_NULLARGUMENT ; return PKIX_DoReturn(&stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean ) 1), plContext);; } } while (0); | |||
28 | ||||
29 | PKIX_CHECK(pkix_CheckType(object, PKIX_CRLENTRY_TYPE, plContext),do { stdVars.aPkixErrorResult = (pkix_CheckType(object, PKIX_CRLENTRY_TYPE , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_OBJECTNOTCRLENTRY; goto cleanup; } } while (0) | |||
30 | PKIX_OBJECTNOTCRLENTRY)do { stdVars.aPkixErrorResult = (pkix_CheckType(object, PKIX_CRLENTRY_TYPE , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_OBJECTNOTCRLENTRY; goto cleanup; } } while (0); | |||
31 | ||||
32 | crlEntry = (PKIX_PL_CRLEntry*)object; | |||
33 | ||||
34 | /* crlEntry->nssCrlEntry is freed by NSS when freeing CRL */ | |||
35 | crlEntry->userReasonCode = 0; | |||
36 | crlEntry->userReasonCodeAbsent = PKIX_FALSE((PKIX_Boolean) 0); | |||
37 | crlEntry->nssCrlEntry = NULL((void*)0); | |||
38 | PKIX_DECREF(crlEntry->serialNumber)do { if (crlEntry->serialNumber){ stdVars.aPkixTempResult = PKIX_PL_Object_DecRef ((PKIX_PL_Object *)(crlEntry->serialNumber ), plContext); if (stdVars.aPkixTempResult) { PKIX_DoAddError (&stdVars, stdVars.aPkixTempResult, plContext); stdVars.aPkixTempResult = ((void*)0); } crlEntry->serialNumber = ((void*)0); } } while (0); | |||
39 | PKIX_DECREF(crlEntry->critExtOids)do { if (crlEntry->critExtOids){ stdVars.aPkixTempResult = PKIX_PL_Object_DecRef ((PKIX_PL_Object *)(crlEntry->critExtOids ), plContext); if (stdVars.aPkixTempResult) { PKIX_DoAddError (&stdVars, stdVars.aPkixTempResult, plContext); stdVars.aPkixTempResult = ((void*)0); } crlEntry->critExtOids = ((void*)0); } } while (0); | |||
40 | ||||
41 | cleanup: | |||
42 | ||||
43 | PKIX_RETURN(CRLENTRY)return PKIX_DoReturn(&stdVars, (PKIX_CRLENTRY_ERROR), ((PKIX_Boolean ) 1), plContext);; | |||
44 | } | |||
45 | ||||
46 | /* | |||
47 | * FUNCTION: pkix_pl_CRLEntry_ToString_Helper | |||
48 | * | |||
49 | * DESCRIPTION: | |||
50 | * Helper function that creates a string representation of the CRLEntry | |||
51 | * pointed to by "crlEntry" and stores it at "pString". | |||
52 | * | |||
53 | * PARAMETERS | |||
54 | * "crlEntry" | |||
55 | * Address of CRLEntry whose string representation is desired. | |||
56 | * Must be non-NULL. | |||
57 | * "pString" | |||
58 | * Address where object pointer will be stored. Must be non-NULL. | |||
59 | * "plContext" | |||
60 | * Platform-specific context pointer. | |||
61 | * THREAD SAFETY: | |||
62 | * Thread Safe (see Thread Safety Definitions in Programmer's Guide) | |||
63 | * RETURNS: | |||
64 | * Returns NULL if the function succeeds. | |||
65 | * Returns a CRLEntry Error if the function fails in a non-fatal way. | |||
66 | * Returns a Fatal Error if the function fails in an unrecoverable way. | |||
67 | */ | |||
68 | PKIX_Error * | |||
69 | pkix_pl_CRLEntry_ToString_Helper( | |||
70 | PKIX_PL_CRLEntry *crlEntry, | |||
71 | PKIX_PL_String **pString, | |||
72 | void *plContext) | |||
73 | { | |||
74 | char *asciiFormat = NULL((void*)0); | |||
75 | PKIX_List *critExtOIDs = NULL((void*)0); | |||
76 | PKIX_PL_String *crlEntryString = NULL((void*)0); | |||
77 | PKIX_PL_String *formatString = NULL((void*)0); | |||
78 | PKIX_PL_String *crlSerialNumberString = NULL((void*)0); | |||
79 | PKIX_PL_String *crlRevocationDateString = NULL((void*)0); | |||
80 | PKIX_PL_String *critExtOIDsString = NULL((void*)0); | |||
81 | PKIX_Int32 reasonCode = 0; | |||
82 | ||||
83 | PKIX_ENTER(CRLENTRY, "pkix_pl_CRLEntry_ToString_Helper")static const char cMyFuncName[] = {"pkix_pl_CRLEntry_ToString_Helper" }; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName ; stdVars.aPkixType = PKIX_CRLENTRY_ERROR; ; do { if (pkixLoggersDebugTrace ) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName , ">>>", stdVars.aPkixType, 5, plContext); } } while (0);; | |||
84 | PKIX_NULLCHECK_FOURdo { if (((crlEntry) == ((void*)0)) || ((crlEntry->serialNumber ) == ((void*)0)) || ((crlEntry->nssCrlEntry) == ((void*)0) ) || ((pString) == ((void*)0))){ stdVars.aPkixErrorReceived = ((PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_NULLARGUMENT ; return PKIX_DoReturn(&stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean ) 1), plContext);; } } while (0) | |||
85 | (crlEntry,do { if (((crlEntry) == ((void*)0)) || ((crlEntry->serialNumber ) == ((void*)0)) || ((crlEntry->nssCrlEntry) == ((void*)0) ) || ((pString) == ((void*)0))){ stdVars.aPkixErrorReceived = ((PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_NULLARGUMENT ; return PKIX_DoReturn(&stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean ) 1), plContext);; } } while (0) | |||
86 | crlEntry->serialNumber,do { if (((crlEntry) == ((void*)0)) || ((crlEntry->serialNumber ) == ((void*)0)) || ((crlEntry->nssCrlEntry) == ((void*)0) ) || ((pString) == ((void*)0))){ stdVars.aPkixErrorReceived = ((PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_NULLARGUMENT ; return PKIX_DoReturn(&stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean ) 1), plContext);; } } while (0) | |||
87 | crlEntry->nssCrlEntry,do { if (((crlEntry) == ((void*)0)) || ((crlEntry->serialNumber ) == ((void*)0)) || ((crlEntry->nssCrlEntry) == ((void*)0) ) || ((pString) == ((void*)0))){ stdVars.aPkixErrorReceived = ((PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_NULLARGUMENT ; return PKIX_DoReturn(&stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean ) 1), plContext);; } } while (0) | |||
88 | pString)do { if (((crlEntry) == ((void*)0)) || ((crlEntry->serialNumber ) == ((void*)0)) || ((crlEntry->nssCrlEntry) == ((void*)0) ) || ((pString) == ((void*)0))){ stdVars.aPkixErrorReceived = ((PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_NULLARGUMENT ; return PKIX_DoReturn(&stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean ) 1), plContext);; } } while (0); | |||
89 | ||||
90 | asciiFormat = | |||
91 | "\n\t[\n" | |||
92 | "\tSerialNumber: %s\n" | |||
93 | "\tReasonCode: %d\n" | |||
94 | "\tRevocationDate: %s\n" | |||
95 | "\tCritExtOIDs: %s\n" | |||
96 | "\t]\n\t"; | |||
97 | ||||
98 | PKIX_CHECK(PKIX_PL_String_Createdo { stdVars.aPkixErrorResult = (PKIX_PL_String_Create (0, asciiFormat , 0, &formatString, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_STRINGCREATEFAILED; goto cleanup ; } } while (0) | |||
99 | (PKIX_ESCASCII,do { stdVars.aPkixErrorResult = (PKIX_PL_String_Create (0, asciiFormat , 0, &formatString, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_STRINGCREATEFAILED; goto cleanup ; } } while (0) | |||
100 | asciiFormat,do { stdVars.aPkixErrorResult = (PKIX_PL_String_Create (0, asciiFormat , 0, &formatString, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_STRINGCREATEFAILED; goto cleanup ; } } while (0) | |||
101 | 0,do { stdVars.aPkixErrorResult = (PKIX_PL_String_Create (0, asciiFormat , 0, &formatString, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_STRINGCREATEFAILED; goto cleanup ; } } while (0) | |||
102 | &formatString,do { stdVars.aPkixErrorResult = (PKIX_PL_String_Create (0, asciiFormat , 0, &formatString, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_STRINGCREATEFAILED; goto cleanup ; } } while (0) | |||
103 | plContext),do { stdVars.aPkixErrorResult = (PKIX_PL_String_Create (0, asciiFormat , 0, &formatString, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_STRINGCREATEFAILED; goto cleanup ; } } while (0) | |||
104 | PKIX_STRINGCREATEFAILED)do { stdVars.aPkixErrorResult = (PKIX_PL_String_Create (0, asciiFormat , 0, &formatString, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_STRINGCREATEFAILED; goto cleanup ; } } while (0); | |||
105 | ||||
106 | /* SerialNumber */ | |||
107 | PKIX_CHECK(PKIX_PL_Object_ToStringdo { stdVars.aPkixErrorResult = (PKIX_PL_Object_ToString ((PKIX_PL_Object *)crlEntry->serialNumber, &crlSerialNumberString, plContext )); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_BIGINTTOSTRINGHELPERFAILED; goto cleanup; } } while ( 0) | |||
108 | ((PKIX_PL_Object *)crlEntry->serialNumber,do { stdVars.aPkixErrorResult = (PKIX_PL_Object_ToString ((PKIX_PL_Object *)crlEntry->serialNumber, &crlSerialNumberString, plContext )); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_BIGINTTOSTRINGHELPERFAILED; goto cleanup; } } while ( 0) | |||
109 | &crlSerialNumberString,do { stdVars.aPkixErrorResult = (PKIX_PL_Object_ToString ((PKIX_PL_Object *)crlEntry->serialNumber, &crlSerialNumberString, plContext )); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_BIGINTTOSTRINGHELPERFAILED; goto cleanup; } } while ( 0) | |||
110 | plContext),do { stdVars.aPkixErrorResult = (PKIX_PL_Object_ToString ((PKIX_PL_Object *)crlEntry->serialNumber, &crlSerialNumberString, plContext )); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_BIGINTTOSTRINGHELPERFAILED; goto cleanup; } } while ( 0) | |||
111 | PKIX_BIGINTTOSTRINGHELPERFAILED)do { stdVars.aPkixErrorResult = (PKIX_PL_Object_ToString ((PKIX_PL_Object *)crlEntry->serialNumber, &crlSerialNumberString, plContext )); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_BIGINTTOSTRINGHELPERFAILED; goto cleanup; } } while ( 0); | |||
112 | ||||
113 | /* RevocationDate - No Date object created, use nss data directly */ | |||
114 | PKIX_CHECK(pkix_pl_Date_ToString_Helperdo { stdVars.aPkixErrorResult = (pkix_pl_Date_ToString_Helper (&(crlEntry->nssCrlEntry->revocationDate), &crlRevocationDateString , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_DATETOSTRINGHELPERFAILED; goto cleanup; } } while (0) | |||
115 | (&(crlEntry->nssCrlEntry->revocationDate),do { stdVars.aPkixErrorResult = (pkix_pl_Date_ToString_Helper (&(crlEntry->nssCrlEntry->revocationDate), &crlRevocationDateString , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_DATETOSTRINGHELPERFAILED; goto cleanup; } } while (0) | |||
116 | &crlRevocationDateString,do { stdVars.aPkixErrorResult = (pkix_pl_Date_ToString_Helper (&(crlEntry->nssCrlEntry->revocationDate), &crlRevocationDateString , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_DATETOSTRINGHELPERFAILED; goto cleanup; } } while (0) | |||
117 | plContext),do { stdVars.aPkixErrorResult = (pkix_pl_Date_ToString_Helper (&(crlEntry->nssCrlEntry->revocationDate), &crlRevocationDateString , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_DATETOSTRINGHELPERFAILED; goto cleanup; } } while (0) | |||
118 | PKIX_DATETOSTRINGHELPERFAILED)do { stdVars.aPkixErrorResult = (pkix_pl_Date_ToString_Helper (&(crlEntry->nssCrlEntry->revocationDate), &crlRevocationDateString , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_DATETOSTRINGHELPERFAILED; goto cleanup; } } while (0); | |||
119 | ||||
120 | /* CriticalExtensionOIDs */ | |||
121 | PKIX_CHECK(PKIX_PL_CRLEntry_GetCriticalExtensionOIDsdo { stdVars.aPkixErrorResult = (PKIX_PL_CRLEntry_GetCriticalExtensionOIDs (crlEntry, &critExtOIDs, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_CRLENTRYGETCRITICALEXTENSIONOIDSFAILED ; goto cleanup; } } while (0) | |||
122 | (crlEntry, &critExtOIDs, plContext),do { stdVars.aPkixErrorResult = (PKIX_PL_CRLEntry_GetCriticalExtensionOIDs (crlEntry, &critExtOIDs, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_CRLENTRYGETCRITICALEXTENSIONOIDSFAILED ; goto cleanup; } } while (0) | |||
123 | PKIX_CRLENTRYGETCRITICALEXTENSIONOIDSFAILED)do { stdVars.aPkixErrorResult = (PKIX_PL_CRLEntry_GetCriticalExtensionOIDs (crlEntry, &critExtOIDs, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_CRLENTRYGETCRITICALEXTENSIONOIDSFAILED ; goto cleanup; } } while (0); | |||
124 | ||||
125 | PKIX_TOSTRING(critExtOIDs, &critExtOIDsString, plContext,do { int descNum; if ((critExtOIDs) != ((void*)0)) { stdVars. aPkixErrorResult = PKIX_PL_Object_ToString((PKIX_PL_Object *) (critExtOIDs), (&critExtOIDsString), (plContext)); descNum = (PKIX_LISTTOSTRINGFAILED); } else { stdVars.aPkixErrorResult = PKIX_PL_String_Create(0, "(null)", 0, (&critExtOIDsString ), (plContext)); descNum = PKIX_STRINGCREATEFAILED; } do { stdVars .aPkixErrorResult = (stdVars.aPkixErrorResult); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = descNum; goto cleanup; } } while ( 0); } while (0) | |||
126 | PKIX_LISTTOSTRINGFAILED)do { int descNum; if ((critExtOIDs) != ((void*)0)) { stdVars. aPkixErrorResult = PKIX_PL_Object_ToString((PKIX_PL_Object *) (critExtOIDs), (&critExtOIDsString), (plContext)); descNum = (PKIX_LISTTOSTRINGFAILED); } else { stdVars.aPkixErrorResult = PKIX_PL_String_Create(0, "(null)", 0, (&critExtOIDsString ), (plContext)); descNum = PKIX_STRINGCREATEFAILED; } do { stdVars .aPkixErrorResult = (stdVars.aPkixErrorResult); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = descNum; goto cleanup; } } while ( 0); } while (0); | |||
127 | ||||
128 | /* Revocation Reason Code */ | |||
129 | PKIX_CHECK(PKIX_PL_CRLEntry_GetCRLEntryReasonCodedo { stdVars.aPkixErrorResult = (PKIX_PL_CRLEntry_GetCRLEntryReasonCode (crlEntry, &reasonCode, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_CRLENTRYGETCRLENTRYREASONCODEFAILED ; goto cleanup; } } while (0) | |||
130 | (crlEntry, &reasonCode, plContext),do { stdVars.aPkixErrorResult = (PKIX_PL_CRLEntry_GetCRLEntryReasonCode (crlEntry, &reasonCode, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_CRLENTRYGETCRLENTRYREASONCODEFAILED ; goto cleanup; } } while (0) | |||
131 | PKIX_CRLENTRYGETCRLENTRYREASONCODEFAILED)do { stdVars.aPkixErrorResult = (PKIX_PL_CRLEntry_GetCRLEntryReasonCode (crlEntry, &reasonCode, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_CRLENTRYGETCRLENTRYREASONCODEFAILED ; goto cleanup; } } while (0); | |||
132 | ||||
133 | PKIX_CHECK(PKIX_PL_Sprintfdo { stdVars.aPkixErrorResult = (PKIX_PL_Sprintf (&crlEntryString , plContext, formatString, crlSerialNumberString, reasonCode, crlRevocationDateString, critExtOIDsString)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_SPRINTFFAILED; goto cleanup; } } while (0) | |||
134 | (&crlEntryString,do { stdVars.aPkixErrorResult = (PKIX_PL_Sprintf (&crlEntryString , plContext, formatString, crlSerialNumberString, reasonCode, crlRevocationDateString, critExtOIDsString)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_SPRINTFFAILED; goto cleanup; } } while (0) | |||
135 | plContext,do { stdVars.aPkixErrorResult = (PKIX_PL_Sprintf (&crlEntryString , plContext, formatString, crlSerialNumberString, reasonCode, crlRevocationDateString, critExtOIDsString)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_SPRINTFFAILED; goto cleanup; } } while (0) | |||
136 | formatString,do { stdVars.aPkixErrorResult = (PKIX_PL_Sprintf (&crlEntryString , plContext, formatString, crlSerialNumberString, reasonCode, crlRevocationDateString, critExtOIDsString)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_SPRINTFFAILED; goto cleanup; } } while (0) | |||
137 | crlSerialNumberString,do { stdVars.aPkixErrorResult = (PKIX_PL_Sprintf (&crlEntryString , plContext, formatString, crlSerialNumberString, reasonCode, crlRevocationDateString, critExtOIDsString)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_SPRINTFFAILED; goto cleanup; } } while (0) | |||
138 | reasonCode,do { stdVars.aPkixErrorResult = (PKIX_PL_Sprintf (&crlEntryString , plContext, formatString, crlSerialNumberString, reasonCode, crlRevocationDateString, critExtOIDsString)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_SPRINTFFAILED; goto cleanup; } } while (0) | |||
139 | crlRevocationDateString,do { stdVars.aPkixErrorResult = (PKIX_PL_Sprintf (&crlEntryString , plContext, formatString, crlSerialNumberString, reasonCode, crlRevocationDateString, critExtOIDsString)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_SPRINTFFAILED; goto cleanup; } } while (0) | |||
140 | critExtOIDsString),do { stdVars.aPkixErrorResult = (PKIX_PL_Sprintf (&crlEntryString , plContext, formatString, crlSerialNumberString, reasonCode, crlRevocationDateString, critExtOIDsString)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_SPRINTFFAILED; goto cleanup; } } while (0) | |||
141 | PKIX_SPRINTFFAILED)do { stdVars.aPkixErrorResult = (PKIX_PL_Sprintf (&crlEntryString , plContext, formatString, crlSerialNumberString, reasonCode, crlRevocationDateString, critExtOIDsString)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_SPRINTFFAILED; goto cleanup; } } while (0); | |||
142 | ||||
143 | *pString = crlEntryString; | |||
144 | ||||
145 | cleanup: | |||
146 | ||||
147 | PKIX_DECREF(critExtOIDs)do { if (critExtOIDs){ stdVars.aPkixTempResult = PKIX_PL_Object_DecRef ((PKIX_PL_Object *)(critExtOIDs), plContext); if (stdVars.aPkixTempResult ) { PKIX_DoAddError(&stdVars, stdVars.aPkixTempResult, plContext ); stdVars.aPkixTempResult = ((void*)0); } critExtOIDs = ((void *)0); } } while (0); | |||
148 | PKIX_DECREF(crlSerialNumberString)do { if (crlSerialNumberString){ stdVars.aPkixTempResult = PKIX_PL_Object_DecRef ((PKIX_PL_Object *)(crlSerialNumberString), plContext); if ( stdVars.aPkixTempResult) { PKIX_DoAddError(&stdVars, stdVars .aPkixTempResult, plContext); stdVars.aPkixTempResult = ((void *)0); } crlSerialNumberString = ((void*)0); } } while (0); | |||
149 | PKIX_DECREF(crlRevocationDateString)do { if (crlRevocationDateString){ stdVars.aPkixTempResult = PKIX_PL_Object_DecRef ((PKIX_PL_Object *)(crlRevocationDateString), plContext); if (stdVars.aPkixTempResult) { PKIX_DoAddError(&stdVars, stdVars .aPkixTempResult, plContext); stdVars.aPkixTempResult = ((void *)0); } crlRevocationDateString = ((void*)0); } } while (0); | |||
150 | PKIX_DECREF(critExtOIDsString)do { if (critExtOIDsString){ stdVars.aPkixTempResult = PKIX_PL_Object_DecRef ((PKIX_PL_Object *)(critExtOIDsString), plContext); if (stdVars .aPkixTempResult) { PKIX_DoAddError(&stdVars, stdVars.aPkixTempResult , plContext); stdVars.aPkixTempResult = ((void*)0); } critExtOIDsString = ((void*)0); } } while (0); | |||
151 | PKIX_DECREF(formatString)do { if (formatString){ stdVars.aPkixTempResult = PKIX_PL_Object_DecRef ((PKIX_PL_Object *)(formatString), plContext); if (stdVars.aPkixTempResult ) { PKIX_DoAddError(&stdVars, stdVars.aPkixTempResult, plContext ); stdVars.aPkixTempResult = ((void*)0); } formatString = ((void *)0); } } while (0); | |||
152 | ||||
153 | PKIX_RETURN(CRLENTRY)return PKIX_DoReturn(&stdVars, (PKIX_CRLENTRY_ERROR), ((PKIX_Boolean ) 1), plContext);; | |||
154 | } | |||
155 | ||||
156 | /* | |||
157 | * FUNCTION: pkix_pl_CRLEntry_ToString | |||
158 | * (see comments for PKIX_PL_ToStringCallback in pkix_pl_system.h) | |||
159 | */ | |||
160 | static PKIX_Error * | |||
161 | pkix_pl_CRLEntry_ToString( | |||
162 | PKIX_PL_Object *object, | |||
163 | PKIX_PL_String **pString, | |||
164 | void *plContext) | |||
165 | { | |||
166 | PKIX_PL_String *crlEntryString = NULL((void*)0); | |||
167 | PKIX_PL_CRLEntry *crlEntry = NULL((void*)0); | |||
168 | ||||
169 | PKIX_ENTER(CRLENTRY, "pkix_pl_CRLEntry_ToString")static const char cMyFuncName[] = {"pkix_pl_CRLEntry_ToString" }; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName ; stdVars.aPkixType = PKIX_CRLENTRY_ERROR; ; do { if (pkixLoggersDebugTrace ) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName , ">>>", stdVars.aPkixType, 5, plContext); } } while (0);; | |||
170 | PKIX_NULLCHECK_TWO(object, pString)do { if (((object) == ((void*)0)) || ((pString) == ((void*)0) )){ stdVars.aPkixErrorReceived = ((PKIX_Boolean) 1); stdVars. aPkixErrorCode = PKIX_NULLARGUMENT; return PKIX_DoReturn(& stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean) 1), plContext);; } } while (0); | |||
171 | ||||
172 | PKIX_CHECK(pkix_CheckType(object, PKIX_CRLENTRY_TYPE, plContext),do { stdVars.aPkixErrorResult = (pkix_CheckType(object, PKIX_CRLENTRY_TYPE , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_OBJECTNOTCRLENTRY; goto cleanup; } } while (0) | |||
173 | PKIX_OBJECTNOTCRLENTRY)do { stdVars.aPkixErrorResult = (pkix_CheckType(object, PKIX_CRLENTRY_TYPE , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_OBJECTNOTCRLENTRY; goto cleanup; } } while (0); | |||
174 | ||||
175 | crlEntry = (PKIX_PL_CRLEntry *) object; | |||
176 | ||||
177 | PKIX_CHECK(pkix_pl_CRLEntry_ToString_Helperdo { stdVars.aPkixErrorResult = (pkix_pl_CRLEntry_ToString_Helper (crlEntry, &crlEntryString, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_CRLENTRYTOSTRINGHELPERFAILED; goto cleanup; } } while (0) | |||
178 | (crlEntry, &crlEntryString, plContext),do { stdVars.aPkixErrorResult = (pkix_pl_CRLEntry_ToString_Helper (crlEntry, &crlEntryString, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_CRLENTRYTOSTRINGHELPERFAILED; goto cleanup; } } while (0) | |||
179 | PKIX_CRLENTRYTOSTRINGHELPERFAILED)do { stdVars.aPkixErrorResult = (pkix_pl_CRLEntry_ToString_Helper (crlEntry, &crlEntryString, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_CRLENTRYTOSTRINGHELPERFAILED; goto cleanup; } } while (0); | |||
180 | ||||
181 | *pString = crlEntryString; | |||
182 | ||||
183 | cleanup: | |||
184 | ||||
185 | PKIX_RETURN(CRLENTRY)return PKIX_DoReturn(&stdVars, (PKIX_CRLENTRY_ERROR), ((PKIX_Boolean ) 1), plContext);; | |||
186 | } | |||
187 | ||||
188 | /* | |||
189 | * FUNCTION: pkix_pl_CRLEntry_Extensions_Hashcode | |||
190 | * DESCRIPTION: | |||
191 | * | |||
192 | * For each CRL Entry extension stored at NSS structure CERTCertExtension, | |||
193 | * get its derbyte data and do the hash. | |||
194 | * | |||
195 | * PARAMETERS | |||
196 | * "extensions" | |||
197 | * Address of arrray of CERTCertExtension whose hash value is desired. | |||
198 | * Must be non-NULL. | |||
199 | * "pHashValue" | |||
200 | * Address where the final hash value is returned. Must be non-NULL. | |||
201 | * "plContext" | |||
202 | * Platform-specific context pointer. | |||
203 | * THREAD SAFETY: | |||
204 | * Conditional Thread Safe | |||
205 | * Though the value of extensions once created is not supposed to change, | |||
206 | * it may be de-allocated while we are accessing it. But since we are | |||
207 | * validating the object, it is unlikely we or someone is de-allocating | |||
208 | * at the moment. | |||
209 | * RETURNS: | |||
210 | * Returns NULL if the function succeeds. | |||
211 | * Returns an OID Error if the function fails in a non-fatal way. | |||
212 | * Returns a Fatal Error if the function fails in an unrecoverable way. | |||
213 | */ | |||
214 | static PKIX_Error * | |||
215 | pkix_pl_CRLEntry_Extensions_Hashcode( | |||
216 | CERTCertExtension **extensions, | |||
217 | PKIX_UInt32 *pHashValue, | |||
218 | void *plContext) | |||
219 | { | |||
220 | CERTCertExtension *extension = NULL((void*)0); | |||
221 | PLArenaPool *arena = NULL((void*)0); | |||
222 | PKIX_UInt32 extHash = 0; | |||
223 | PKIX_UInt32 hashValue = 0; | |||
224 | SECItem *derBytes = NULL((void*)0); | |||
225 | SECItem *resultSecItem = NULL((void*)0); | |||
226 | ||||
227 | PKIX_ENTER(CRLENTRY, "pkix_pl_CRLEntry_Extensions_Hashcode")static const char cMyFuncName[] = {"pkix_pl_CRLEntry_Extensions_Hashcode" }; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName ; stdVars.aPkixType = PKIX_CRLENTRY_ERROR; ; do { if (pkixLoggersDebugTrace ) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName , ">>>", stdVars.aPkixType, 5, plContext); } } while (0);; | |||
228 | PKIX_NULLCHECK_TWO(extensions, pHashValue)do { if (((extensions) == ((void*)0)) || ((pHashValue) == ((void *)0))){ stdVars.aPkixErrorReceived = ((PKIX_Boolean) 1); stdVars .aPkixErrorCode = PKIX_NULLARGUMENT; return PKIX_DoReturn(& stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean) 1), plContext);; } } while (0); | |||
229 | ||||
230 | if (extensions) { | |||
231 | ||||
232 | PKIX_CRLENTRY_DEBUG("\t\tCalling PORT_NewArena\n"); | |||
233 | arena = PORT_NewArenaPORT_NewArena_Util(DER_DEFAULT_CHUNKSIZE(2048)); | |||
234 | if (arena == NULL((void*)0)) { | |||
235 | PKIX_ERROR(PKIX_OUTOFMEMORY){ { if (pkixLoggersErrors) { pkix_Logger_CheckWithCode(pkixLoggersErrors , PKIX_OUTOFMEMORY, ((void*)0), stdVars.aPkixType, 2, plContext ); } } stdVars.aPkixErrorReceived = ((PKIX_Boolean) 1); stdVars .aPkixErrorCode = PKIX_OUTOFMEMORY; goto cleanup; }; | |||
236 | } | |||
237 | ||||
238 | while (*extensions) { | |||
239 | ||||
240 | extension = *extensions++; | |||
241 | ||||
242 | PKIX_NULLCHECK_ONE(extension)do { if ((extension) == ((void*)0)){ stdVars.aPkixErrorReceived = ((PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_NULLARGUMENT ; return PKIX_DoReturn(&stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean ) 1), plContext);; } } while (0); | |||
243 | ||||
244 | PKIX_CRLENTRY_DEBUG("\t\tCalling PORT_ArenaZNew\n"); | |||
245 | derBytes = PORT_ArenaZNew(arena, SECItem)(SECItem *)PORT_ArenaZAlloc_Util(arena, sizeof(SECItem)); | |||
246 | if (derBytes == NULL((void*)0)) { | |||
247 | PKIX_ERROR(PKIX_PORTARENAALLOCFAILED){ { if (pkixLoggersErrors) { pkix_Logger_CheckWithCode(pkixLoggersErrors , PKIX_PORTARENAALLOCFAILED, ((void*)0), stdVars.aPkixType, 2 , plContext); } } stdVars.aPkixErrorReceived = ((PKIX_Boolean ) 1); stdVars.aPkixErrorCode = PKIX_PORTARENAALLOCFAILED; goto cleanup; }; | |||
248 | } | |||
249 | ||||
250 | PKIX_CRLENTRY_DEBUG | |||
251 | ("\t\tCalling SEC_ASN1EncodeItem\n"); | |||
252 | resultSecItem = SEC_ASN1EncodeItemSEC_ASN1EncodeItem_Util | |||
253 | (arena, | |||
254 | derBytes, | |||
255 | extension, | |||
256 | CERT_CertExtensionTemplate); | |||
257 | ||||
258 | if (resultSecItem == NULL((void*)0)){ | |||
259 | PKIX_ERROR(PKIX_SECASN1ENCODEITEMFAILED){ { if (pkixLoggersErrors) { pkix_Logger_CheckWithCode(pkixLoggersErrors , PKIX_SECASN1ENCODEITEMFAILED, ((void*)0), stdVars.aPkixType , 2, plContext); } } stdVars.aPkixErrorReceived = ((PKIX_Boolean ) 1); stdVars.aPkixErrorCode = PKIX_SECASN1ENCODEITEMFAILED; goto cleanup; }; | |||
260 | } | |||
261 | ||||
262 | PKIX_CHECK(pkix_hashdo { stdVars.aPkixErrorResult = (pkix_hash (derBytes->data , derBytes->len, &extHash, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_HASHFAILED; goto cleanup; } } while (0) | |||
263 | (derBytes->data,do { stdVars.aPkixErrorResult = (pkix_hash (derBytes->data , derBytes->len, &extHash, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_HASHFAILED; goto cleanup; } } while (0) | |||
264 | derBytes->len,do { stdVars.aPkixErrorResult = (pkix_hash (derBytes->data , derBytes->len, &extHash, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_HASHFAILED; goto cleanup; } } while (0) | |||
265 | &extHash,do { stdVars.aPkixErrorResult = (pkix_hash (derBytes->data , derBytes->len, &extHash, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_HASHFAILED; goto cleanup; } } while (0) | |||
266 | plContext),do { stdVars.aPkixErrorResult = (pkix_hash (derBytes->data , derBytes->len, &extHash, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_HASHFAILED; goto cleanup; } } while (0) | |||
267 | PKIX_HASHFAILED)do { stdVars.aPkixErrorResult = (pkix_hash (derBytes->data , derBytes->len, &extHash, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_HASHFAILED; goto cleanup; } } while (0); | |||
268 | ||||
269 | hashValue += (extHash << 7); | |||
270 | ||||
271 | } | |||
272 | } | |||
273 | ||||
274 | *pHashValue = hashValue; | |||
275 | ||||
276 | cleanup: | |||
277 | ||||
278 | if (arena){ | |||
279 | /* Note that freeing the arena also frees derBytes */ | |||
280 | PKIX_CRLENTRY_DEBUG("\t\tCalling PORT_FreeArena\n"); | |||
281 | PORT_FreeArenaPORT_FreeArena_Util(arena, PR_FALSE0); | |||
282 | arena = NULL((void*)0); | |||
283 | } | |||
284 | PKIX_RETURN(CRLENTRY)return PKIX_DoReturn(&stdVars, (PKIX_CRLENTRY_ERROR), ((PKIX_Boolean ) 1), plContext);; | |||
285 | } | |||
286 | ||||
287 | /* | |||
288 | * FUNCTION: pkix_pl_CRLEntry_Hashcode | |||
289 | * (see comments for PKIX_PL_HashcodeCallback in pkix_pl_system.h) | |||
290 | */ | |||
291 | static PKIX_Error * | |||
292 | pkix_pl_CRLEntry_Hashcode( | |||
293 | PKIX_PL_Object *object, | |||
294 | PKIX_UInt32 *pHashcode, | |||
295 | void *plContext) | |||
296 | { | |||
297 | SECItem *nssDate = NULL((void*)0); | |||
298 | PKIX_PL_CRLEntry *crlEntry = NULL((void*)0); | |||
299 | PKIX_UInt32 crlEntryHash; | |||
300 | PKIX_UInt32 hashValue; | |||
301 | PKIX_Int32 reasonCode = 0; | |||
302 | ||||
303 | PKIX_ENTER(CRLENTRY, "pkix_pl_CRLEntry_Hashcode")static const char cMyFuncName[] = {"pkix_pl_CRLEntry_Hashcode" }; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName ; stdVars.aPkixType = PKIX_CRLENTRY_ERROR; ; do { if (pkixLoggersDebugTrace ) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName , ">>>", stdVars.aPkixType, 5, plContext); } } while (0);; | |||
304 | PKIX_NULLCHECK_TWO(object, pHashcode)do { if (((object) == ((void*)0)) || ((pHashcode) == ((void*) 0))){ stdVars.aPkixErrorReceived = ((PKIX_Boolean) 1); stdVars .aPkixErrorCode = PKIX_NULLARGUMENT; return PKIX_DoReturn(& stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean) 1), plContext);; } } while (0); | |||
305 | ||||
306 | PKIX_CHECK(pkix_CheckType(object, PKIX_CRLENTRY_TYPE, plContext),do { stdVars.aPkixErrorResult = (pkix_CheckType(object, PKIX_CRLENTRY_TYPE , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_OBJECTNOTCRLENTRY; goto cleanup; } } while (0) | |||
307 | PKIX_OBJECTNOTCRLENTRY)do { stdVars.aPkixErrorResult = (pkix_CheckType(object, PKIX_CRLENTRY_TYPE , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_OBJECTNOTCRLENTRY; goto cleanup; } } while (0); | |||
308 | ||||
309 | crlEntry = (PKIX_PL_CRLEntry *)object; | |||
310 | ||||
311 | PKIX_NULLCHECK_ONE(crlEntry->nssCrlEntry)do { if ((crlEntry->nssCrlEntry) == ((void*)0)){ stdVars.aPkixErrorReceived = ((PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_NULLARGUMENT ; return PKIX_DoReturn(&stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean ) 1), plContext);; } } while (0); | |||
312 | nssDate = &(crlEntry->nssCrlEntry->revocationDate); | |||
313 | ||||
314 | PKIX_NULLCHECK_ONE(nssDate->data)do { if ((nssDate->data) == ((void*)0)){ stdVars.aPkixErrorReceived = ((PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_NULLARGUMENT ; return PKIX_DoReturn(&stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean ) 1), plContext);; } } while (0); | |||
315 | ||||
316 | PKIX_CHECK(pkix_hashdo { stdVars.aPkixErrorResult = (pkix_hash ((const unsigned char *)nssDate->data, nssDate->len, &crlEntryHash, plContext )); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_ERRORGETTINGHASHCODE; goto cleanup; } } while (0) | |||
317 | ((const unsigned char *)nssDate->data,do { stdVars.aPkixErrorResult = (pkix_hash ((const unsigned char *)nssDate->data, nssDate->len, &crlEntryHash, plContext )); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_ERRORGETTINGHASHCODE; goto cleanup; } } while (0) | |||
318 | nssDate->len,do { stdVars.aPkixErrorResult = (pkix_hash ((const unsigned char *)nssDate->data, nssDate->len, &crlEntryHash, plContext )); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_ERRORGETTINGHASHCODE; goto cleanup; } } while (0) | |||
319 | &crlEntryHash,do { stdVars.aPkixErrorResult = (pkix_hash ((const unsigned char *)nssDate->data, nssDate->len, &crlEntryHash, plContext )); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_ERRORGETTINGHASHCODE; goto cleanup; } } while (0) | |||
320 | plContext),do { stdVars.aPkixErrorResult = (pkix_hash ((const unsigned char *)nssDate->data, nssDate->len, &crlEntryHash, plContext )); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_ERRORGETTINGHASHCODE; goto cleanup; } } while (0) | |||
321 | PKIX_ERRORGETTINGHASHCODE)do { stdVars.aPkixErrorResult = (pkix_hash ((const unsigned char *)nssDate->data, nssDate->len, &crlEntryHash, plContext )); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_ERRORGETTINGHASHCODE; goto cleanup; } } while (0); | |||
322 | ||||
323 | PKIX_CHECK(PKIX_PL_Object_Hashcodedo { stdVars.aPkixErrorResult = (PKIX_PL_Object_Hashcode ((PKIX_PL_Object *)crlEntry->serialNumber, &hashValue, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars .aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_OBJECTHASHCODEFAILED ; goto cleanup; } } while (0) | |||
324 | ((PKIX_PL_Object *)crlEntry->serialNumber,do { stdVars.aPkixErrorResult = (PKIX_PL_Object_Hashcode ((PKIX_PL_Object *)crlEntry->serialNumber, &hashValue, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars .aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_OBJECTHASHCODEFAILED ; goto cleanup; } } while (0) | |||
325 | &hashValue,do { stdVars.aPkixErrorResult = (PKIX_PL_Object_Hashcode ((PKIX_PL_Object *)crlEntry->serialNumber, &hashValue, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars .aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_OBJECTHASHCODEFAILED ; goto cleanup; } } while (0) | |||
326 | plContext),do { stdVars.aPkixErrorResult = (PKIX_PL_Object_Hashcode ((PKIX_PL_Object *)crlEntry->serialNumber, &hashValue, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars .aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_OBJECTHASHCODEFAILED ; goto cleanup; } } while (0) | |||
327 | PKIX_OBJECTHASHCODEFAILED)do { stdVars.aPkixErrorResult = (PKIX_PL_Object_Hashcode ((PKIX_PL_Object *)crlEntry->serialNumber, &hashValue, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars .aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_OBJECTHASHCODEFAILED ; goto cleanup; } } while (0); | |||
328 | ||||
329 | crlEntryHash += (hashValue << 7); | |||
330 | ||||
331 | hashValue = 0; | |||
332 | ||||
333 | if (crlEntry->nssCrlEntry->extensions) { | |||
334 | ||||
335 | PKIX_CHECK(pkix_pl_CRLEntry_Extensions_Hashcodedo { stdVars.aPkixErrorResult = (pkix_pl_CRLEntry_Extensions_Hashcode (crlEntry->nssCrlEntry->extensions, &hashValue, plContext )); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_CRLENTRYEXTENSIONSHASHCODEFAILED; goto cleanup; } } while (0) | |||
336 | (crlEntry->nssCrlEntry->extensions, &hashValue, plContext),do { stdVars.aPkixErrorResult = (pkix_pl_CRLEntry_Extensions_Hashcode (crlEntry->nssCrlEntry->extensions, &hashValue, plContext )); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_CRLENTRYEXTENSIONSHASHCODEFAILED; goto cleanup; } } while (0) | |||
337 | PKIX_CRLENTRYEXTENSIONSHASHCODEFAILED)do { stdVars.aPkixErrorResult = (pkix_pl_CRLEntry_Extensions_Hashcode (crlEntry->nssCrlEntry->extensions, &hashValue, plContext )); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_CRLENTRYEXTENSIONSHASHCODEFAILED; goto cleanup; } } while (0); | |||
338 | } | |||
339 | ||||
340 | crlEntryHash += (hashValue << 7); | |||
341 | ||||
342 | PKIX_CHECK(PKIX_PL_CRLEntry_GetCRLEntryReasonCodedo { stdVars.aPkixErrorResult = (PKIX_PL_CRLEntry_GetCRLEntryReasonCode (crlEntry, &reasonCode, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_CRLENTRYGETCRLENTRYREASONCODEFAILED ; goto cleanup; } } while (0) | |||
343 | (crlEntry, &reasonCode, plContext),do { stdVars.aPkixErrorResult = (PKIX_PL_CRLEntry_GetCRLEntryReasonCode (crlEntry, &reasonCode, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_CRLENTRYGETCRLENTRYREASONCODEFAILED ; goto cleanup; } } while (0) | |||
344 | PKIX_CRLENTRYGETCRLENTRYREASONCODEFAILED)do { stdVars.aPkixErrorResult = (PKIX_PL_CRLEntry_GetCRLEntryReasonCode (crlEntry, &reasonCode, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_CRLENTRYGETCRLENTRYREASONCODEFAILED ; goto cleanup; } } while (0); | |||
345 | ||||
346 | crlEntryHash += (reasonCode + 777) << 3; | |||
347 | ||||
348 | *pHashcode = crlEntryHash; | |||
349 | ||||
350 | cleanup: | |||
351 | ||||
352 | PKIX_RETURN(CRLENTRY)return PKIX_DoReturn(&stdVars, (PKIX_CRLENTRY_ERROR), ((PKIX_Boolean ) 1), plContext);; | |||
353 | } | |||
354 | ||||
355 | /* | |||
356 | * FUNCTION: pkix_pl_CRLENTRY_Extensions_Equals | |||
357 | * DESCRIPTION: | |||
358 | * | |||
359 | * Compare each extension's DERbyte data in "firstExtensions" with extension | |||
360 | * in "secondExtensions" in sequential order and store the result in | |||
361 | * "pResult". | |||
362 | * | |||
363 | * PARAMETERS | |||
364 | * "firstExtensions" | |||
365 | * Address of first NSS structure CERTCertExtension to be compared. | |||
366 | * Must be non-NULL. | |||
367 | * "secondExtensions" | |||
368 | * Address of second NSS structure CERTCertExtension to be compared. | |||
369 | * Must be non-NULL. | |||
370 | * "pResult" | |||
371 | * Address where the comparison result is returned. Must be non-NULL. | |||
372 | * "plContext" | |||
373 | * Platform-specific context pointer. | |||
374 | * THREAD SAFETY: | |||
375 | * Conditionally Thread Safe | |||
376 | * Though the value of extensions once created is not supposed to change, | |||
377 | * it may be de-allocated while we are accessing it. But since we are | |||
378 | * validating the object, it is unlikely we or someone is de-allocating | |||
379 | * at the moment. | |||
380 | * RETURNS: | |||
381 | * Returns NULL if the function succeeds. | |||
382 | * Returns an OID Error if the function fails in a non-fatal way. | |||
383 | * Returns a Fatal Error if the function fails in an unrecoverable way. | |||
384 | */ | |||
385 | static PKIX_Error * | |||
386 | pkix_pl_CRLEntry_Extensions_Equals( | |||
387 | CERTCertExtension **extensions1, | |||
388 | CERTCertExtension **extensions2, | |||
389 | PKIX_Boolean *pResult, | |||
390 | void *plContext) | |||
391 | { | |||
392 | CERTCertExtension **firstExtensions; | |||
393 | CERTCertExtension **secondExtensions; | |||
394 | CERTCertExtension *firstExtension = NULL((void*)0); | |||
395 | CERTCertExtension *secondExtension = NULL((void*)0); | |||
396 | PLArenaPool *arena = NULL((void*)0); | |||
397 | PKIX_Boolean cmpResult = PKIX_FALSE((PKIX_Boolean) 0); | |||
398 | SECItem *firstDerBytes = NULL((void*)0); | |||
399 | SECItem *secondDerBytes = NULL((void*)0); | |||
400 | SECItem *firstResultSecItem = NULL((void*)0); | |||
401 | SECItem *secondResultSecItem = NULL((void*)0); | |||
402 | PKIX_UInt32 firstNumExt = 0; | |||
403 | PKIX_UInt32 secondNumExt = 0; | |||
404 | SECComparison secResult; | |||
405 | ||||
406 | PKIX_ENTER(CRLENTRY, "pkix_pl_CRLEntry_Extensions_Equals")static const char cMyFuncName[] = {"pkix_pl_CRLEntry_Extensions_Equals" }; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName ; stdVars.aPkixType = PKIX_CRLENTRY_ERROR; ; do { if (pkixLoggersDebugTrace ) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName , ">>>", stdVars.aPkixType, 5, plContext); } } while (0);; | |||
407 | PKIX_NULLCHECK_THREE(extensions1, extensions2, pResult)do { if (((extensions1) == ((void*)0)) || ((extensions2) == ( (void*)0)) || ((pResult) == ((void*)0))){ stdVars.aPkixErrorReceived = ((PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_NULLARGUMENT ; return PKIX_DoReturn(&stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean ) 1), plContext);; } } while (0); | |||
408 | ||||
409 | firstExtensions = extensions1; | |||
410 | secondExtensions = extensions2; | |||
411 | ||||
412 | if (firstExtensions) { | |||
413 | while (*firstExtensions) { | |||
414 | firstExtension = *firstExtensions++; | |||
415 | firstNumExt++; | |||
416 | } | |||
417 | } | |||
418 | ||||
419 | if (secondExtensions) { | |||
420 | while (*secondExtensions) { | |||
421 | secondExtension = *secondExtensions++; | |||
422 | secondNumExt++; | |||
423 | } | |||
424 | } | |||
425 | ||||
426 | if (firstNumExt != secondNumExt) { | |||
427 | *pResult = PKIX_FALSE((PKIX_Boolean) 0); | |||
428 | goto cleanup; | |||
429 | } | |||
430 | ||||
431 | if (firstNumExt == 0 && secondNumExt == 0) { | |||
432 | *pResult = PKIX_TRUE((PKIX_Boolean) 1); | |||
433 | goto cleanup; | |||
434 | } | |||
435 | ||||
436 | /* now have equal number, but non-zero extension items to compare */ | |||
437 | ||||
438 | firstExtensions = extensions1; | |||
439 | secondExtensions = extensions2; | |||
440 | ||||
441 | cmpResult = PKIX_TRUE((PKIX_Boolean) 1); | |||
442 | ||||
443 | PKIX_CRLENTRY_DEBUG("\t\tCalling PORT_NewArena\n"); | |||
444 | arena = PORT_NewArenaPORT_NewArena_Util(DER_DEFAULT_CHUNKSIZE(2048)*2); | |||
445 | if (arena == NULL((void*)0)) { | |||
446 | PKIX_ERROR(PKIX_OUTOFMEMORY){ { if (pkixLoggersErrors) { pkix_Logger_CheckWithCode(pkixLoggersErrors , PKIX_OUTOFMEMORY, ((void*)0), stdVars.aPkixType, 2, plContext ); } } stdVars.aPkixErrorReceived = ((PKIX_Boolean) 1); stdVars .aPkixErrorCode = PKIX_OUTOFMEMORY; goto cleanup; }; | |||
447 | } | |||
448 | ||||
449 | while (firstNumExt--) { | |||
450 | ||||
451 | firstExtension = *firstExtensions++; | |||
452 | secondExtension = *secondExtensions++; | |||
453 | ||||
454 | PKIX_NULLCHECK_TWO(firstExtension, secondExtension)do { if (((firstExtension) == ((void*)0)) || ((secondExtension ) == ((void*)0))){ stdVars.aPkixErrorReceived = ((PKIX_Boolean ) 1); stdVars.aPkixErrorCode = PKIX_NULLARGUMENT; return PKIX_DoReturn (&stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean) 1), plContext );; } } while (0); | |||
455 | ||||
456 | PKIX_CRLENTRY_DEBUG("\t\tCalling PORT_ArenaZNew\n"); | |||
457 | firstDerBytes = PORT_ArenaZNew(arena, SECItem)(SECItem *)PORT_ArenaZAlloc_Util(arena, sizeof(SECItem)); | |||
458 | if (firstDerBytes == NULL((void*)0)) { | |||
459 | PKIX_ERROR(PKIX_PORTARENAALLOCFAILED){ { if (pkixLoggersErrors) { pkix_Logger_CheckWithCode(pkixLoggersErrors , PKIX_PORTARENAALLOCFAILED, ((void*)0), stdVars.aPkixType, 2 , plContext); } } stdVars.aPkixErrorReceived = ((PKIX_Boolean ) 1); stdVars.aPkixErrorCode = PKIX_PORTARENAALLOCFAILED; goto cleanup; }; | |||
460 | } | |||
461 | ||||
462 | PKIX_CRLENTRY_DEBUG("\t\tCalling PORT_ArenaZNew\n"); | |||
463 | secondDerBytes = PORT_ArenaZNew(arena, SECItem)(SECItem *)PORT_ArenaZAlloc_Util(arena, sizeof(SECItem)); | |||
464 | if (secondDerBytes == NULL((void*)0)) { | |||
465 | PKIX_ERROR(PKIX_PORTARENAALLOCFAILED){ { if (pkixLoggersErrors) { pkix_Logger_CheckWithCode(pkixLoggersErrors , PKIX_PORTARENAALLOCFAILED, ((void*)0), stdVars.aPkixType, 2 , plContext); } } stdVars.aPkixErrorReceived = ((PKIX_Boolean ) 1); stdVars.aPkixErrorCode = PKIX_PORTARENAALLOCFAILED; goto cleanup; }; | |||
466 | } | |||
467 | ||||
468 | PKIX_CRLENTRY_DEBUG | |||
469 | ("\t\tCalling SEC_ASN1EncodeItem\n"); | |||
470 | firstResultSecItem = SEC_ASN1EncodeItemSEC_ASN1EncodeItem_Util | |||
471 | (arena, | |||
472 | firstDerBytes, | |||
473 | firstExtension, | |||
474 | CERT_CertExtensionTemplate); | |||
475 | ||||
476 | if (firstResultSecItem == NULL((void*)0)){ | |||
477 | PKIX_ERROR(PKIX_SECASN1ENCODEITEMFAILED){ { if (pkixLoggersErrors) { pkix_Logger_CheckWithCode(pkixLoggersErrors , PKIX_SECASN1ENCODEITEMFAILED, ((void*)0), stdVars.aPkixType , 2, plContext); } } stdVars.aPkixErrorReceived = ((PKIX_Boolean ) 1); stdVars.aPkixErrorCode = PKIX_SECASN1ENCODEITEMFAILED; goto cleanup; }; | |||
478 | } | |||
479 | ||||
480 | PKIX_CRLENTRY_DEBUG | |||
481 | ("\t\tCalling SEC_ASN1EncodeItem\n"); | |||
482 | secondResultSecItem = SEC_ASN1EncodeItemSEC_ASN1EncodeItem_Util | |||
483 | (arena, | |||
484 | secondDerBytes, | |||
485 | secondExtension, | |||
486 | CERT_CertExtensionTemplate); | |||
487 | ||||
488 | if (secondResultSecItem == NULL((void*)0)){ | |||
489 | PKIX_ERROR(PKIX_SECASN1ENCODEITEMFAILED){ { if (pkixLoggersErrors) { pkix_Logger_CheckWithCode(pkixLoggersErrors , PKIX_SECASN1ENCODEITEMFAILED, ((void*)0), stdVars.aPkixType , 2, plContext); } } stdVars.aPkixErrorReceived = ((PKIX_Boolean ) 1); stdVars.aPkixErrorCode = PKIX_SECASN1ENCODEITEMFAILED; goto cleanup; }; | |||
490 | } | |||
491 | ||||
492 | PKIX_CRLENTRY_DEBUG("\t\tCalling SECITEM_CompareItem\n"); | |||
493 | secResult = SECITEM_CompareItemSECITEM_CompareItem_Util | |||
494 | (firstResultSecItem, secondResultSecItem); | |||
495 | ||||
496 | if (secResult != SECEqual) { | |||
497 | cmpResult = PKIX_FALSE((PKIX_Boolean) 0); | |||
498 | break; | |||
499 | } | |||
500 | ||||
501 | } | |||
502 | ||||
503 | *pResult = cmpResult; | |||
504 | ||||
505 | cleanup: | |||
506 | ||||
507 | if (arena){ | |||
508 | /* Note that freeing the arena also frees derBytes */ | |||
509 | PKIX_CRLENTRY_DEBUG("\t\tCalling PORT_FreeArena\n"); | |||
510 | PORT_FreeArenaPORT_FreeArena_Util(arena, PR_FALSE0); | |||
511 | arena = NULL((void*)0); | |||
512 | } | |||
513 | ||||
514 | PKIX_RETURN(CRLENTRY)return PKIX_DoReturn(&stdVars, (PKIX_CRLENTRY_ERROR), ((PKIX_Boolean ) 1), plContext);; | |||
515 | } | |||
516 | ||||
517 | /* | |||
518 | * FUNCTION: pkix_pl_CRLEntry_Equals | |||
519 | * (see comments for PKIX_PL_Equals_Callback in pkix_pl_system.h) | |||
520 | */ | |||
521 | static PKIX_Error * | |||
522 | pkix_pl_CRLEntry_Equals( | |||
523 | PKIX_PL_Object *firstObject, | |||
524 | PKIX_PL_Object *secondObject, | |||
525 | PKIX_Boolean *pResult, | |||
526 | void *plContext) | |||
527 | { | |||
528 | PKIX_PL_CRLEntry *firstCrlEntry = NULL((void*)0); | |||
529 | PKIX_PL_CRLEntry *secondCrlEntry = NULL((void*)0); | |||
530 | PKIX_UInt32 secondType; | |||
531 | PKIX_Boolean cmpResult = PKIX_FALSE((PKIX_Boolean) 0); | |||
532 | ||||
533 | PKIX_ENTER(CRLENTRY, "pkix_pl_CRLEntry_Equals")static const char cMyFuncName[] = {"pkix_pl_CRLEntry_Equals"} ; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName ; stdVars.aPkixType = PKIX_CRLENTRY_ERROR; ; do { if (pkixLoggersDebugTrace ) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName , ">>>", stdVars.aPkixType, 5, plContext); } } while (0);; | |||
534 | PKIX_NULLCHECK_THREE(firstObject, secondObject, pResult)do { if (((firstObject) == ((void*)0)) || ((secondObject) == ( (void*)0)) || ((pResult) == ((void*)0))){ stdVars.aPkixErrorReceived = ((PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_NULLARGUMENT ; return PKIX_DoReturn(&stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean ) 1), plContext);; } } while (0); | |||
535 | ||||
536 | /* test that firstObject is a CRLEntry */ | |||
537 | PKIX_CHECK(pkix_CheckType(firstObject, PKIX_CRLENTRY_TYPE, plContext),do { stdVars.aPkixErrorResult = (pkix_CheckType(firstObject, PKIX_CRLENTRY_TYPE , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_FIRSTOBJECTNOTCRLENTRY; goto cleanup; } } while (0) | |||
538 | PKIX_FIRSTOBJECTNOTCRLENTRY)do { stdVars.aPkixErrorResult = (pkix_CheckType(firstObject, PKIX_CRLENTRY_TYPE , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_FIRSTOBJECTNOTCRLENTRY; goto cleanup; } } while (0); | |||
539 | ||||
540 | firstCrlEntry = (PKIX_PL_CRLEntry *)firstObject; | |||
541 | secondCrlEntry = (PKIX_PL_CRLEntry *)secondObject; | |||
542 | ||||
543 | PKIX_NULLCHECK_TWOdo { if (((firstCrlEntry->nssCrlEntry) == ((void*)0)) || ( (secondCrlEntry->nssCrlEntry) == ((void*)0))){ stdVars.aPkixErrorReceived = ((PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_NULLARGUMENT ; return PKIX_DoReturn(&stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean ) 1), plContext);; } } while (0) | |||
544 | (firstCrlEntry->nssCrlEntry, secondCrlEntry->nssCrlEntry)do { if (((firstCrlEntry->nssCrlEntry) == ((void*)0)) || ( (secondCrlEntry->nssCrlEntry) == ((void*)0))){ stdVars.aPkixErrorReceived = ((PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_NULLARGUMENT ; return PKIX_DoReturn(&stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean ) 1), plContext);; } } while (0); | |||
545 | ||||
546 | /* | |||
547 | * Since we know firstObject is a CRLEntry, if both references are | |||
548 | * identical, they must be equal | |||
549 | */ | |||
550 | if (firstCrlEntry == secondCrlEntry){ | |||
551 | *pResult = PKIX_TRUE((PKIX_Boolean) 1); | |||
552 | goto cleanup; | |||
553 | } | |||
554 | ||||
555 | /* | |||
556 | * If secondCrlEntry isn't a CRL Entry, we don't throw an error. | |||
557 | * We simply return a Boolean result of FALSE | |||
558 | */ | |||
559 | *pResult = PKIX_FALSE((PKIX_Boolean) 0); | |||
560 | PKIX_CHECK(PKIX_PL_Object_GetTypedo { stdVars.aPkixErrorResult = (PKIX_PL_Object_GetType ((PKIX_PL_Object *)secondCrlEntry, &secondType, plContext)); if (stdVars. aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult ->errClass; stdVars.aPkixErrorCode = PKIX_COULDNOTGETTYPEOFSECONDARGUMENT ; goto cleanup; } } while (0) | |||
561 | ((PKIX_PL_Object *)secondCrlEntry, &secondType, plContext),do { stdVars.aPkixErrorResult = (PKIX_PL_Object_GetType ((PKIX_PL_Object *)secondCrlEntry, &secondType, plContext)); if (stdVars. aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult ->errClass; stdVars.aPkixErrorCode = PKIX_COULDNOTGETTYPEOFSECONDARGUMENT ; goto cleanup; } } while (0) | |||
562 | PKIX_COULDNOTGETTYPEOFSECONDARGUMENT)do { stdVars.aPkixErrorResult = (PKIX_PL_Object_GetType ((PKIX_PL_Object *)secondCrlEntry, &secondType, plContext)); if (stdVars. aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult ->errClass; stdVars.aPkixErrorCode = PKIX_COULDNOTGETTYPEOFSECONDARGUMENT ; goto cleanup; } } while (0); | |||
563 | if (secondType != PKIX_CRLENTRY_TYPE) goto cleanup; | |||
564 | ||||
565 | /* Compare userSerialNumber */ | |||
566 | PKIX_CRLENTRY_DEBUG("\t\tCalling SECITEM_CompareItem\n"); | |||
567 | if (SECITEM_CompareItemSECITEM_CompareItem_Util( | |||
568 | &(((PKIX_PL_CRLEntry *)firstCrlEntry)->nssCrlEntry->serialNumber), | |||
569 | &(((PKIX_PL_CRLEntry *)secondCrlEntry)->nssCrlEntry->serialNumber)) | |||
570 | != SECEqual) { | |||
571 | *pResult = PKIX_FALSE((PKIX_Boolean) 0); | |||
572 | goto cleanup; | |||
573 | } | |||
574 | ||||
575 | /* Compare revocationDate */ | |||
576 | PKIX_CRLENTRY_DEBUG("\t\tCalling SECITEM_CompareItem\n"); | |||
577 | if (SECITEM_CompareItemSECITEM_CompareItem_Util | |||
578 | (&(((PKIX_PL_CRLEntry *)firstCrlEntry)->nssCrlEntry-> | |||
579 | revocationDate), | |||
580 | &(((PKIX_PL_CRLEntry *)secondCrlEntry)->nssCrlEntry-> | |||
581 | revocationDate)) | |||
582 | != SECEqual) { | |||
583 | *pResult = PKIX_FALSE((PKIX_Boolean) 0); | |||
584 | goto cleanup; | |||
585 | } | |||
586 | ||||
587 | /* Compare Critical Extension List */ | |||
588 | PKIX_CHECK(pkix_pl_CRLEntry_Extensions_Equalsdo { stdVars.aPkixErrorResult = (pkix_pl_CRLEntry_Extensions_Equals (firstCrlEntry->nssCrlEntry->extensions, secondCrlEntry ->nssCrlEntry->extensions, &cmpResult, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars .aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_CRLENTRYEXTENSIONSEQUALSFAILED ; goto cleanup; } } while (0) | |||
589 | (firstCrlEntry->nssCrlEntry->extensions,do { stdVars.aPkixErrorResult = (pkix_pl_CRLEntry_Extensions_Equals (firstCrlEntry->nssCrlEntry->extensions, secondCrlEntry ->nssCrlEntry->extensions, &cmpResult, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars .aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_CRLENTRYEXTENSIONSEQUALSFAILED ; goto cleanup; } } while (0) | |||
590 | secondCrlEntry->nssCrlEntry->extensions,do { stdVars.aPkixErrorResult = (pkix_pl_CRLEntry_Extensions_Equals (firstCrlEntry->nssCrlEntry->extensions, secondCrlEntry ->nssCrlEntry->extensions, &cmpResult, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars .aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_CRLENTRYEXTENSIONSEQUALSFAILED ; goto cleanup; } } while (0) | |||
591 | &cmpResult,do { stdVars.aPkixErrorResult = (pkix_pl_CRLEntry_Extensions_Equals (firstCrlEntry->nssCrlEntry->extensions, secondCrlEntry ->nssCrlEntry->extensions, &cmpResult, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars .aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_CRLENTRYEXTENSIONSEQUALSFAILED ; goto cleanup; } } while (0) | |||
592 | plContext),do { stdVars.aPkixErrorResult = (pkix_pl_CRLEntry_Extensions_Equals (firstCrlEntry->nssCrlEntry->extensions, secondCrlEntry ->nssCrlEntry->extensions, &cmpResult, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars .aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_CRLENTRYEXTENSIONSEQUALSFAILED ; goto cleanup; } } while (0) | |||
593 | PKIX_CRLENTRYEXTENSIONSEQUALSFAILED)do { stdVars.aPkixErrorResult = (pkix_pl_CRLEntry_Extensions_Equals (firstCrlEntry->nssCrlEntry->extensions, secondCrlEntry ->nssCrlEntry->extensions, &cmpResult, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars .aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_CRLENTRYEXTENSIONSEQUALSFAILED ; goto cleanup; } } while (0); | |||
594 | ||||
595 | if (cmpResult != PKIX_TRUE((PKIX_Boolean) 1)){ | |||
596 | *pResult = PKIX_FALSE((PKIX_Boolean) 0); | |||
597 | goto cleanup; | |||
598 | } | |||
599 | ||||
600 | cmpResult = (firstCrlEntry->userReasonCode == | |||
601 | secondCrlEntry->userReasonCode); | |||
602 | ||||
603 | *pResult = cmpResult; | |||
604 | ||||
605 | cleanup: | |||
606 | ||||
607 | PKIX_RETURN(CRLENTRY)return PKIX_DoReturn(&stdVars, (PKIX_CRLENTRY_ERROR), ((PKIX_Boolean ) 1), plContext);; | |||
608 | } | |||
609 | ||||
610 | /* | |||
611 | * FUNCTION: pkix_pl_CRLEntry_RegisterSelf | |||
612 | * DESCRIPTION: | |||
613 | * Registers PKIX_CRLEntry_TYPE and its related functions with systemClasses[] | |||
614 | * THREAD SAFETY: | |||
615 | * Not Thread Safe - for performance and complexity reasons | |||
616 | * | |||
617 | * Since this function is only called by PKIX_PL_Initialize, which should | |||
618 | * only be called once, it is acceptable that this function is not | |||
619 | * thread-safe. | |||
620 | */ | |||
621 | PKIX_Error * | |||
622 | pkix_pl_CRLEntry_RegisterSelf(void *plContext) | |||
623 | { | |||
624 | ||||
625 | extern pkix_ClassTable_Entry systemClasses[PKIX_NUMTYPES]; | |||
626 | pkix_ClassTable_Entry entry; | |||
627 | ||||
628 | PKIX_ENTER(CRLENTRY, "pkix_pl_CRLEntry_RegisterSelf")static const char cMyFuncName[] = {"pkix_pl_CRLEntry_RegisterSelf" }; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName ; stdVars.aPkixType = PKIX_CRLENTRY_ERROR; ; do { if (pkixLoggersDebugTrace ) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName , ">>>", stdVars.aPkixType, 5, plContext); } } while (0);; | |||
629 | ||||
630 | entry.description = "CRLEntry"; | |||
631 | entry.objCounter = 0; | |||
632 | entry.typeObjectSize = sizeof(PKIX_PL_CRLEntry); | |||
633 | entry.destructor = pkix_pl_CRLEntry_Destroy; | |||
634 | entry.equalsFunction = pkix_pl_CRLEntry_Equals; | |||
635 | entry.hashcodeFunction = pkix_pl_CRLEntry_Hashcode; | |||
636 | entry.toStringFunction = pkix_pl_CRLEntry_ToString; | |||
637 | entry.comparator = NULL((void*)0); | |||
638 | entry.duplicateFunction = pkix_duplicateImmutable; | |||
639 | ||||
640 | systemClasses[PKIX_CRLENTRY_TYPE] = entry; | |||
641 | ||||
642 | PKIX_RETURN(CRLENTRY)return PKIX_DoReturn(&stdVars, (PKIX_CRLENTRY_ERROR), ((PKIX_Boolean ) 1), plContext);; | |||
643 | } | |||
644 | ||||
645 | /* | |||
646 | * FUNCTION: pkix_pl_CRLEntry_CreateEntry | |||
647 | * DESCRIPTION: | |||
648 | * | |||
649 | * Creates a new CRLEntry using the CertCrlEntry pointed to by "nssCrlEntry" | |||
650 | * and stores it at "pCrlEntry". Once created, a CRLEntry is immutable. | |||
651 | * | |||
652 | * revokedCertificates SEQUENCE OF SEQUENCE { | |||
653 | * userCertificate CertificateSerialNumber, | |||
654 | * revocationDate Time, | |||
655 | * crlEntryExtensions Extensions OPTIONAL | |||
656 | * -- if present, MUST be v2 | |||
657 | * | |||
658 | * PARAMETERS: | |||
659 | * "nssCrlEntry" | |||
660 | * Address of CERTCrlEntry representing an NSS CRL entry. | |||
661 | * Must be non-NULL. | |||
662 | * "pCrlEntry" | |||
663 | * Address where object pointer will be stored. Must be non-NULL. | |||
664 | * "plContext" | |||
665 | * Platform-specific context pointer. | |||
666 | * THREAD SAFETY: | |||
667 | * Thread Safe (see Thread Safety Definitions in Programmer's Guide) | |||
668 | * RETURNS: | |||
669 | * Returns NULL if the function succeeds. | |||
670 | * Returns a CRLEntry Error if the function fails in a non-fatal way. | |||
671 | * Returns a Fatal Error if the function fails in an unrecoverable way. | |||
672 | */ | |||
673 | static PKIX_Error * | |||
674 | pkix_pl_CRLEntry_CreateEntry( | |||
675 | CERTCrlEntry *nssCrlEntry, /* entry data to be created from */ | |||
676 | PKIX_PL_CRLEntry **pCrlEntry, | |||
677 | void *plContext) | |||
678 | { | |||
679 | PKIX_PL_CRLEntry *crlEntry = NULL((void*)0); | |||
680 | ||||
681 | PKIX_ENTER(CRLENTRY, "pkix_pl_CRLEntry_CreateEntry")static const char cMyFuncName[] = {"pkix_pl_CRLEntry_CreateEntry" }; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName ; stdVars.aPkixType = PKIX_CRLENTRY_ERROR; ; do { if (pkixLoggersDebugTrace ) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName , ">>>", stdVars.aPkixType, 5, plContext); } } while (0);; | |||
682 | PKIX_NULLCHECK_TWO(nssCrlEntry, pCrlEntry)do { if (((nssCrlEntry) == ((void*)0)) || ((pCrlEntry) == ((void *)0))){ stdVars.aPkixErrorReceived = ((PKIX_Boolean) 1); stdVars .aPkixErrorCode = PKIX_NULLARGUMENT; return PKIX_DoReturn(& stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean) 1), plContext);; } } while (0); | |||
683 | ||||
684 | PKIX_CHECK(PKIX_PL_Object_Allocdo { stdVars.aPkixErrorResult = (PKIX_PL_Object_Alloc (PKIX_CRLENTRY_TYPE , sizeof (PKIX_PL_CRLEntry), (PKIX_PL_Object **)&crlEntry , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_COULDNOTCREATECRLENTRYOBJECT; goto cleanup; } } while (0) | |||
685 | (PKIX_CRLENTRY_TYPE,do { stdVars.aPkixErrorResult = (PKIX_PL_Object_Alloc (PKIX_CRLENTRY_TYPE , sizeof (PKIX_PL_CRLEntry), (PKIX_PL_Object **)&crlEntry , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_COULDNOTCREATECRLENTRYOBJECT; goto cleanup; } } while (0) | |||
686 | sizeof (PKIX_PL_CRLEntry),do { stdVars.aPkixErrorResult = (PKIX_PL_Object_Alloc (PKIX_CRLENTRY_TYPE , sizeof (PKIX_PL_CRLEntry), (PKIX_PL_Object **)&crlEntry , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_COULDNOTCREATECRLENTRYOBJECT; goto cleanup; } } while (0) | |||
687 | (PKIX_PL_Object **)&crlEntry,do { stdVars.aPkixErrorResult = (PKIX_PL_Object_Alloc (PKIX_CRLENTRY_TYPE , sizeof (PKIX_PL_CRLEntry), (PKIX_PL_Object **)&crlEntry , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_COULDNOTCREATECRLENTRYOBJECT; goto cleanup; } } while (0) | |||
688 | plContext),do { stdVars.aPkixErrorResult = (PKIX_PL_Object_Alloc (PKIX_CRLENTRY_TYPE , sizeof (PKIX_PL_CRLEntry), (PKIX_PL_Object **)&crlEntry , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_COULDNOTCREATECRLENTRYOBJECT; goto cleanup; } } while (0) | |||
689 | PKIX_COULDNOTCREATECRLENTRYOBJECT)do { stdVars.aPkixErrorResult = (PKIX_PL_Object_Alloc (PKIX_CRLENTRY_TYPE , sizeof (PKIX_PL_CRLEntry), (PKIX_PL_Object **)&crlEntry , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_COULDNOTCREATECRLENTRYOBJECT; goto cleanup; } } while (0); | |||
690 | ||||
691 | crlEntry->nssCrlEntry = nssCrlEntry; | |||
692 | crlEntry->serialNumber = NULL((void*)0); | |||
693 | crlEntry->critExtOids = NULL((void*)0); | |||
694 | crlEntry->userReasonCode = 0; | |||
695 | crlEntry->userReasonCodeAbsent = PKIX_FALSE((PKIX_Boolean) 0); | |||
696 | ||||
697 | *pCrlEntry = crlEntry; | |||
698 | ||||
699 | cleanup: | |||
700 | ||||
701 | PKIX_RETURN(CRLENTRY)return PKIX_DoReturn(&stdVars, (PKIX_CRLENTRY_ERROR), ((PKIX_Boolean ) 1), plContext);; | |||
702 | } | |||
703 | ||||
704 | /* | |||
705 | * FUNCTION: pkix_pl_CRLEntry_Create | |||
706 | * DESCRIPTION: | |||
707 | * | |||
708 | * Creates a List of CRLEntries using the array of CERTCrlEntries pointed to | |||
709 | * by "nssCrlEntries" and stores it at "pCrlEntryList". If "nssCrlEntries" is | |||
710 | * NULL, this function stores an empty List at "pCrlEntryList". | |||
711 | * } | |||
712 | * PARAMETERS: | |||
713 | * "nssCrlEntries" | |||
714 | * Address of array of CERTCrlEntries representing NSS CRL entries. | |||
715 | * Can be NULL if CRL has no NSS CRL entries. | |||
716 | * "pCrlEntryList" | |||
717 | * Address where object pointer will be stored. Must be non-NULL. | |||
718 | * "plContext" | |||
719 | * Platform-specific context pointer. | |||
720 | * THREAD SAFETY: | |||
721 | * Thread Safe (see Thread Safety Definitions in Programmer's Guide) | |||
722 | * RETURNS: | |||
723 | * Returns NULL if the function succeeds. | |||
724 | * Returns a CRLEntry Error if the function fails in a non-fatal way. | |||
725 | * Returns a Fatal Error if the function fails in an unrecoverable way. | |||
726 | */ | |||
727 | PKIX_Error * | |||
728 | pkix_pl_CRLEntry_Create( | |||
729 | CERTCrlEntry **nssCrlEntries, /* head of entry list */ | |||
730 | PKIX_List **pCrlEntryList, | |||
731 | void *plContext) | |||
732 | { | |||
733 | PKIX_List *entryList = NULL((void*)0); | |||
734 | PKIX_PL_CRLEntry *crlEntry = NULL((void*)0); | |||
| ||||
735 | CERTCrlEntry **entries = NULL((void*)0); | |||
736 | SECItem serialNumberItem; | |||
737 | PKIX_PL_BigInt *serialNumber; | |||
738 | char *bytes = NULL((void*)0); | |||
739 | PKIX_UInt32 length; | |||
740 | ||||
741 | PKIX_ENTER(CRLENTRY, "pkix_pl_CRLEntry_Create")static const char cMyFuncName[] = {"pkix_pl_CRLEntry_Create"} ; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName ; stdVars.aPkixType = PKIX_CRLENTRY_ERROR; ; do { if (pkixLoggersDebugTrace ) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName , ">>>", stdVars.aPkixType, 5, plContext); } } while (0);; | |||
742 | PKIX_NULLCHECK_ONE(pCrlEntryList)do { if ((pCrlEntryList) == ((void*)0)){ stdVars.aPkixErrorReceived = ((PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_NULLARGUMENT ; return PKIX_DoReturn(&stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean ) 1), plContext);; } } while (0); | |||
743 | ||||
744 | entries = nssCrlEntries; | |||
745 | ||||
746 | PKIX_CHECK(PKIX_List_Create(&entryList, plContext),do { stdVars.aPkixErrorResult = (PKIX_List_Create(&entryList , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_LISTCREATEFAILED; goto cleanup; } } while (0) | |||
747 | PKIX_LISTCREATEFAILED)do { stdVars.aPkixErrorResult = (PKIX_List_Create(&entryList , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_LISTCREATEFAILED; goto cleanup; } } while (0); | |||
748 | ||||
749 | if (entries) { | |||
750 | while (*entries){ | |||
751 | PKIX_CHECK(pkix_pl_CRLEntry_CreateEntrydo { stdVars.aPkixErrorResult = (pkix_pl_CRLEntry_CreateEntry (*entries, &crlEntry, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_COULDNOTCREATECRLENTRYOBJECT; goto cleanup; } } while (0) | |||
752 | (*entries, &crlEntry, plContext),do { stdVars.aPkixErrorResult = (pkix_pl_CRLEntry_CreateEntry (*entries, &crlEntry, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_COULDNOTCREATECRLENTRYOBJECT; goto cleanup; } } while (0) | |||
753 | PKIX_COULDNOTCREATECRLENTRYOBJECT)do { stdVars.aPkixErrorResult = (pkix_pl_CRLEntry_CreateEntry (*entries, &crlEntry, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_COULDNOTCREATECRLENTRYOBJECT; goto cleanup; } } while (0); | |||
754 | ||||
755 | /* Get Serial Number */ | |||
756 | serialNumberItem = (*entries)->serialNumber; | |||
757 | length = serialNumberItem.len; | |||
758 | bytes = (char *)serialNumberItem.data; | |||
759 | ||||
760 | PKIX_CHECK(pkix_pl_BigInt_CreateWithBytesdo { stdVars.aPkixErrorResult = (pkix_pl_BigInt_CreateWithBytes (bytes, length, &serialNumber, plContext)); if (stdVars. aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult ->errClass; stdVars.aPkixErrorCode = PKIX_BIGINTCREATEWITHBYTESFAILED ; goto cleanup; } } while (0) | |||
761 | (bytes, length, &serialNumber, plContext),do { stdVars.aPkixErrorResult = (pkix_pl_BigInt_CreateWithBytes (bytes, length, &serialNumber, plContext)); if (stdVars. aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult ->errClass; stdVars.aPkixErrorCode = PKIX_BIGINTCREATEWITHBYTESFAILED ; goto cleanup; } } while (0) | |||
762 | PKIX_BIGINTCREATEWITHBYTESFAILED)do { stdVars.aPkixErrorResult = (pkix_pl_BigInt_CreateWithBytes (bytes, length, &serialNumber, plContext)); if (stdVars. aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult ->errClass; stdVars.aPkixErrorCode = PKIX_BIGINTCREATEWITHBYTESFAILED ; goto cleanup; } } while (0); | |||
763 | ||||
764 | crlEntry->serialNumber = serialNumber; | |||
| ||||
765 | crlEntry->nssCrlEntry = *entries; | |||
766 | ||||
767 | PKIX_CHECK(PKIX_List_AppendItemdo { stdVars.aPkixErrorResult = (PKIX_List_AppendItem (entryList , (PKIX_PL_Object *)crlEntry, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_LISTAPPENDITEMFAILED; goto cleanup ; } } while (0) | |||
768 | (entryList, (PKIX_PL_Object *)crlEntry, plContext),do { stdVars.aPkixErrorResult = (PKIX_List_AppendItem (entryList , (PKIX_PL_Object *)crlEntry, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_LISTAPPENDITEMFAILED; goto cleanup ; } } while (0) | |||
769 | PKIX_LISTAPPENDITEMFAILED)do { stdVars.aPkixErrorResult = (PKIX_List_AppendItem (entryList , (PKIX_PL_Object *)crlEntry, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_LISTAPPENDITEMFAILED; goto cleanup ; } } while (0); | |||
770 | ||||
771 | PKIX_DECREF(crlEntry)do { if (crlEntry){ stdVars.aPkixTempResult = PKIX_PL_Object_DecRef ((PKIX_PL_Object *)(crlEntry), plContext); if (stdVars.aPkixTempResult ) { PKIX_DoAddError(&stdVars, stdVars.aPkixTempResult, plContext ); stdVars.aPkixTempResult = ((void*)0); } crlEntry = ((void* )0); } } while (0); | |||
772 | ||||
773 | entries++; | |||
774 | } | |||
775 | } | |||
776 | ||||
777 | *pCrlEntryList = entryList; | |||
778 | ||||
779 | cleanup: | |||
780 | PKIX_DECREF(crlEntry)do { if (crlEntry){ stdVars.aPkixTempResult = PKIX_PL_Object_DecRef ((PKIX_PL_Object *)(crlEntry), plContext); if (stdVars.aPkixTempResult ) { PKIX_DoAddError(&stdVars, stdVars.aPkixTempResult, plContext ); stdVars.aPkixTempResult = ((void*)0); } crlEntry = ((void* )0); } } while (0); | |||
781 | ||||
782 | if (PKIX_ERROR_RECEIVED(stdVars.aPkixErrorReceived || stdVars.aPkixErrorResult || stdVars .aPkixTempErrorReceived || stdVars.aPkixErrorList)){ | |||
783 | PKIX_DECREF(entryList)do { if (entryList){ stdVars.aPkixTempResult = PKIX_PL_Object_DecRef ((PKIX_PL_Object *)(entryList), plContext); if (stdVars.aPkixTempResult ) { PKIX_DoAddError(&stdVars, stdVars.aPkixTempResult, plContext ); stdVars.aPkixTempResult = ((void*)0); } entryList = ((void *)0); } } while (0); | |||
784 | } | |||
785 | ||||
786 | PKIX_RETURN(CRLENTRY)return PKIX_DoReturn(&stdVars, (PKIX_CRLENTRY_ERROR), ((PKIX_Boolean ) 1), plContext);; | |||
787 | } | |||
788 | ||||
789 | /* --Public-CRLENTRY-Functions------------------------------------- */ | |||
790 | ||||
791 | /* | |||
792 | * FUNCTION: PKIX_PL_CRLEntry_GetCRLEntryReasonCode | |||
793 | * (see comments in pkix_pl_pki.h) | |||
794 | */ | |||
795 | PKIX_Error * | |||
796 | PKIX_PL_CRLEntry_GetCRLEntryReasonCode ( | |||
797 | PKIX_PL_CRLEntry *crlEntry, | |||
798 | PKIX_Int32 *pReason, | |||
799 | void *plContext) | |||
800 | { | |||
801 | SECStatus status; | |||
802 | CERTCRLEntryReasonCode nssReasonCode; | |||
803 | ||||
804 | PKIX_ENTER(CRLENTRY, "PKIX_PL_CRLEntry_GetCRLEntryReasonCode")static const char cMyFuncName[] = {"PKIX_PL_CRLEntry_GetCRLEntryReasonCode" }; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName ; stdVars.aPkixType = PKIX_CRLENTRY_ERROR; ; do { if (pkixLoggersDebugTrace ) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName , ">>>", stdVars.aPkixType, 5, plContext); } } while (0);; | |||
805 | PKIX_NULLCHECK_TWO(crlEntry, pReason)do { if (((crlEntry) == ((void*)0)) || ((pReason) == ((void*) 0))){ stdVars.aPkixErrorReceived = ((PKIX_Boolean) 1); stdVars .aPkixErrorCode = PKIX_NULLARGUMENT; return PKIX_DoReturn(& stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean) 1), plContext);; } } while (0); | |||
806 | ||||
807 | if (!crlEntry->userReasonCodeAbsent && crlEntry->userReasonCode == 0) { | |||
808 | ||||
809 | PKIX_OBJECT_LOCK(crlEntry)do { if (crlEntry) { stdVars.aPkixTempResult = PKIX_PL_Object_Lock ((PKIX_PL_Object*)(crlEntry), plContext); if (stdVars.aPkixTempResult ) { PKIX_DoAddError(&stdVars, stdVars.aPkixTempResult, plContext ); stdVars.aPkixTempResult = ((void*)0); stdVars.aPkixErrorCode = PKIX_OBJECTLOCKFAILED; goto cleanup; } stdVars.aLockedObject = (PKIX_PL_Object *)(crlEntry); } } while (0); | |||
810 | ||||
811 | if (!crlEntry->userReasonCodeAbsent && | |||
812 | crlEntry->userReasonCode == 0) { | |||
813 | ||||
814 | /* reason code has not been cached in */ | |||
815 | PKIX_CRLENTRY_DEBUG("\t\tCERT_FindCRLEntryReasonExten.\n"); | |||
816 | status = CERT_FindCRLEntryReasonExten | |||
817 | (crlEntry->nssCrlEntry, &nssReasonCode); | |||
818 | ||||
819 | if (status == SECSuccess) { | |||
820 | crlEntry->userReasonCode = (PKIX_Int32) nssReasonCode; | |||
821 | } else { | |||
822 | crlEntry->userReasonCodeAbsent = PKIX_TRUE((PKIX_Boolean) 1); | |||
823 | } | |||
824 | } | |||
825 | ||||
826 | PKIX_OBJECT_UNLOCK(crlEntry)do { if (crlEntry && stdVars.aLockedObject == (PKIX_PL_Object *)(crlEntry)){ stdVars.aPkixTempResult = PKIX_PL_Object_Unlock ((PKIX_PL_Object *)(crlEntry), plContext); if (stdVars.aPkixTempResult ) { PKIX_DoAddError(&stdVars, stdVars.aPkixTempResult, plContext ); stdVars.aPkixTempResult = ((void*)0); } stdVars.aLockedObject = ((void*)0); } else { ((stdVars.aLockedObject == ((void*)0) )?((void)0):PR_Assert("lockedObject == NULL","pkix_pl_crlentry.c" ,826)); } } while (0); | |||
827 | ||||
828 | } | |||
829 | ||||
830 | *pReason = crlEntry->userReasonCode; | |||
831 | ||||
832 | cleanup: | |||
833 | ||||
834 | PKIX_RETURN(CRLENTRY)return PKIX_DoReturn(&stdVars, (PKIX_CRLENTRY_ERROR), ((PKIX_Boolean ) 1), plContext);; | |||
835 | } | |||
836 | ||||
837 | /* | |||
838 | * FUNCTION: PKIX_PL_CRLEntry_GetCriticalExtensionOIDs | |||
839 | * (see comments in pkix_pl_pki.h) | |||
840 | */ | |||
841 | PKIX_Error * | |||
842 | PKIX_PL_CRLEntry_GetCriticalExtensionOIDs ( | |||
843 | PKIX_PL_CRLEntry *crlEntry, | |||
844 | PKIX_List **pList, /* list of PKIX_PL_OID */ | |||
845 | void *plContext) | |||
846 | { | |||
847 | PKIX_List *oidsList = NULL((void*)0); | |||
848 | CERTCertExtension **extensions; | |||
849 | ||||
850 | PKIX_ENTER(CRLENTRY, "PKIX_PL_CRLEntry_GetCriticalExtensionOIDs")static const char cMyFuncName[] = {"PKIX_PL_CRLEntry_GetCriticalExtensionOIDs" }; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName ; stdVars.aPkixType = PKIX_CRLENTRY_ERROR; ; do { if (pkixLoggersDebugTrace ) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName , ">>>", stdVars.aPkixType, 5, plContext); } } while (0);; | |||
851 | PKIX_NULLCHECK_THREE(crlEntry, crlEntry->nssCrlEntry, pList)do { if (((crlEntry) == ((void*)0)) || ((crlEntry->nssCrlEntry ) == ((void*)0)) || ((pList) == ((void*)0))){ stdVars.aPkixErrorReceived = ((PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_NULLARGUMENT ; return PKIX_DoReturn(&stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean ) 1), plContext);; } } while (0); | |||
852 | ||||
853 | /* if we don't have a cached copy from before, we create one */ | |||
854 | if (crlEntry->critExtOids == NULL((void*)0)) { | |||
855 | ||||
856 | PKIX_OBJECT_LOCK(crlEntry)do { if (crlEntry) { stdVars.aPkixTempResult = PKIX_PL_Object_Lock ((PKIX_PL_Object*)(crlEntry), plContext); if (stdVars.aPkixTempResult ) { PKIX_DoAddError(&stdVars, stdVars.aPkixTempResult, plContext ); stdVars.aPkixTempResult = ((void*)0); stdVars.aPkixErrorCode = PKIX_OBJECTLOCKFAILED; goto cleanup; } stdVars.aLockedObject = (PKIX_PL_Object *)(crlEntry); } } while (0); | |||
857 | ||||
858 | if (crlEntry->critExtOids == NULL((void*)0)) { | |||
859 | ||||
860 | extensions = crlEntry->nssCrlEntry->extensions; | |||
861 | ||||
862 | PKIX_CHECK(pkix_pl_OID_GetCriticalExtensionOIDsdo { stdVars.aPkixErrorResult = (pkix_pl_OID_GetCriticalExtensionOIDs (extensions, &oidsList, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_GETCRITICALEXTENSIONOIDSFAILED ; goto cleanup; } } while (0) | |||
863 | (extensions, &oidsList, plContext),do { stdVars.aPkixErrorResult = (pkix_pl_OID_GetCriticalExtensionOIDs (extensions, &oidsList, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_GETCRITICALEXTENSIONOIDSFAILED ; goto cleanup; } } while (0) | |||
864 | PKIX_GETCRITICALEXTENSIONOIDSFAILED)do { stdVars.aPkixErrorResult = (pkix_pl_OID_GetCriticalExtensionOIDs (extensions, &oidsList, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_GETCRITICALEXTENSIONOIDSFAILED ; goto cleanup; } } while (0); | |||
865 | ||||
866 | crlEntry->critExtOids = oidsList; | |||
867 | } | |||
868 | ||||
869 | PKIX_OBJECT_UNLOCK(crlEntry)do { if (crlEntry && stdVars.aLockedObject == (PKIX_PL_Object *)(crlEntry)){ stdVars.aPkixTempResult = PKIX_PL_Object_Unlock ((PKIX_PL_Object *)(crlEntry), plContext); if (stdVars.aPkixTempResult ) { PKIX_DoAddError(&stdVars, stdVars.aPkixTempResult, plContext ); stdVars.aPkixTempResult = ((void*)0); } stdVars.aLockedObject = ((void*)0); } else { ((stdVars.aLockedObject == ((void*)0) )?((void)0):PR_Assert("lockedObject == NULL","pkix_pl_crlentry.c" ,869)); } } while (0); | |||
870 | ||||
871 | } | |||
872 | ||||
873 | /* We should return a copy of the List since this list changes */ | |||
874 | PKIX_DUPLICATE(crlEntry->critExtOids, pList, plContext,do { if ((crlEntry->critExtOids) != ((void*)0)) { do { stdVars .aPkixErrorResult = (PKIX_PL_Object_Duplicate ((PKIX_PL_Object *)(crlEntry->critExtOids), (PKIX_PL_Object **)(pList), (plContext ))); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = (PKIX_OBJECTDUPLICATELISTFAILED); goto cleanup; } } while ( 0); } else { *(pList) = (crlEntry->critExtOids); } } while (0) | |||
875 | PKIX_OBJECTDUPLICATELISTFAILED)do { if ((crlEntry->critExtOids) != ((void*)0)) { do { stdVars .aPkixErrorResult = (PKIX_PL_Object_Duplicate ((PKIX_PL_Object *)(crlEntry->critExtOids), (PKIX_PL_Object **)(pList), (plContext ))); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = (PKIX_OBJECTDUPLICATELISTFAILED); goto cleanup; } } while ( 0); } else { *(pList) = (crlEntry->critExtOids); } } while (0); | |||
876 | ||||
877 | cleanup: | |||
878 | ||||
879 | PKIX_RETURN(CRLENTRY)return PKIX_DoReturn(&stdVars, (PKIX_CRLENTRY_ERROR), ((PKIX_Boolean ) 1), plContext);; | |||
880 | } |