File: | s/lib/libpkix/pkix_pl_nss/pki/pkix_pl_infoaccess.c |
Warning: | line 858, column 16 Array access (from variable 'attrArray') results in a null pointer dereference |
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_infoaccess.c | ||||
6 | * | ||||
7 | * InfoAccess Object Definitions | ||||
8 | * | ||||
9 | */ | ||||
10 | |||||
11 | #include "pkix_pl_infoaccess.h" | ||||
12 | |||||
13 | /* --Private-InfoAccess-Functions----------------------------------*/ | ||||
14 | |||||
15 | /* | ||||
16 | * FUNCTION: pkix_pl_InfoAccess_Create | ||||
17 | * DESCRIPTION: | ||||
18 | * | ||||
19 | * This function creates an InfoAccess from the method provided in "method" and | ||||
20 | * the GeneralName provided in "generalName" and stores the result at | ||||
21 | * "pInfoAccess". | ||||
22 | * | ||||
23 | * PARAMETERS | ||||
24 | * "method" | ||||
25 | * The UInt32 value to be stored as the method field of the InfoAccess. | ||||
26 | * "gName" | ||||
27 | * The GeneralName to be stored as the gName field of the InfoAccess. | ||||
28 | * Must be non-NULL. | ||||
29 | * "pInfoAccess" | ||||
30 | * Address where the result is stored. Must be non-NULL. | ||||
31 | * "plContext" | ||||
32 | * Platform-specific context pointer. | ||||
33 | * THREAD SAFETY: | ||||
34 | * Thread Safe (see Thread Safety Definitions in Programmer's Guide) | ||||
35 | * RETURNS: | ||||
36 | * Returns NULL if the function succeeds. | ||||
37 | * Returns a Fatal Error if the function fails in an unrecoverable way. | ||||
38 | */ | ||||
39 | static PKIX_Error * | ||||
40 | pkix_pl_InfoAccess_Create( | ||||
41 | PKIX_UInt32 method, | ||||
42 | PKIX_PL_GeneralName *gName, | ||||
43 | PKIX_PL_InfoAccess **pInfoAccess, | ||||
44 | void *plContext) | ||||
45 | { | ||||
46 | |||||
47 | PKIX_PL_InfoAccess *infoAccess = NULL((void*)0); | ||||
48 | |||||
49 | PKIX_ENTER(INFOACCESS, "pkix_pl_InfoAccess_Create")static const char cMyFuncName[] = {"pkix_pl_InfoAccess_Create" }; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName ; stdVars.aPkixType = PKIX_INFOACCESS_ERROR; ; do { if (pkixLoggersDebugTrace ) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName , ">>>", stdVars.aPkixType, 5, plContext); } } while (0);; | ||||
50 | PKIX_NULLCHECK_TWO(gName, pInfoAccess)do { if (((gName) == ((void*)0)) || ((pInfoAccess) == ((void* )0))){ stdVars.aPkixErrorReceived = ((PKIX_Boolean) 1); stdVars .aPkixErrorCode = PKIX_NULLARGUMENT; return PKIX_DoReturn(& stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean) 1), plContext);; } } while (0); | ||||
51 | |||||
52 | PKIX_CHECK(PKIX_PL_Object_Allocdo { stdVars.aPkixErrorResult = (PKIX_PL_Object_Alloc (PKIX_INFOACCESS_TYPE , sizeof (PKIX_PL_InfoAccess), (PKIX_PL_Object **)&infoAccess , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_COULDNOTCREATEINFOACCESSOBJECT; goto cleanup; } } while (0) | ||||
53 | (PKIX_INFOACCESS_TYPE,do { stdVars.aPkixErrorResult = (PKIX_PL_Object_Alloc (PKIX_INFOACCESS_TYPE , sizeof (PKIX_PL_InfoAccess), (PKIX_PL_Object **)&infoAccess , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_COULDNOTCREATEINFOACCESSOBJECT; goto cleanup; } } while (0) | ||||
54 | sizeof (PKIX_PL_InfoAccess),do { stdVars.aPkixErrorResult = (PKIX_PL_Object_Alloc (PKIX_INFOACCESS_TYPE , sizeof (PKIX_PL_InfoAccess), (PKIX_PL_Object **)&infoAccess , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_COULDNOTCREATEINFOACCESSOBJECT; goto cleanup; } } while (0) | ||||
55 | (PKIX_PL_Object **)&infoAccess,do { stdVars.aPkixErrorResult = (PKIX_PL_Object_Alloc (PKIX_INFOACCESS_TYPE , sizeof (PKIX_PL_InfoAccess), (PKIX_PL_Object **)&infoAccess , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_COULDNOTCREATEINFOACCESSOBJECT; goto cleanup; } } while (0) | ||||
56 | plContext),do { stdVars.aPkixErrorResult = (PKIX_PL_Object_Alloc (PKIX_INFOACCESS_TYPE , sizeof (PKIX_PL_InfoAccess), (PKIX_PL_Object **)&infoAccess , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_COULDNOTCREATEINFOACCESSOBJECT; goto cleanup; } } while (0) | ||||
57 | PKIX_COULDNOTCREATEINFOACCESSOBJECT)do { stdVars.aPkixErrorResult = (PKIX_PL_Object_Alloc (PKIX_INFOACCESS_TYPE , sizeof (PKIX_PL_InfoAccess), (PKIX_PL_Object **)&infoAccess , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_COULDNOTCREATEINFOACCESSOBJECT; goto cleanup; } } while (0); | ||||
58 | |||||
59 | infoAccess->method = method; | ||||
60 | |||||
61 | PKIX_INCREF(gName)do { if (gName){ stdVars.aPkixTempResult = PKIX_PL_Object_IncRef ((PKIX_PL_Object *)(gName), plContext); if (stdVars.aPkixTempResult ) { PKIX_DoAddError(&stdVars, stdVars.aPkixTempResult, plContext ); stdVars.aPkixTempResult = ((void*)0); goto cleanup; } } } while (0); | ||||
62 | infoAccess->location = gName; | ||||
63 | |||||
64 | *pInfoAccess = infoAccess; | ||||
65 | infoAccess = NULL((void*)0); | ||||
66 | |||||
67 | cleanup: | ||||
68 | PKIX_DECREF(infoAccess)do { if (infoAccess){ stdVars.aPkixTempResult = PKIX_PL_Object_DecRef ((PKIX_PL_Object *)(infoAccess), plContext); if (stdVars.aPkixTempResult ) { PKIX_DoAddError(&stdVars, stdVars.aPkixTempResult, plContext ); stdVars.aPkixTempResult = ((void*)0); } infoAccess = ((void *)0); } } while (0); | ||||
69 | |||||
70 | PKIX_RETURN(INFOACCESS)return PKIX_DoReturn(&stdVars, (PKIX_INFOACCESS_ERROR), ( (PKIX_Boolean) 1), plContext);; | ||||
71 | } | ||||
72 | |||||
73 | /* | ||||
74 | * FUNCTION: pkix_pl_InfoAccess_Destroy | ||||
75 | * (see comments for PKIX_PL_DestructorCallback in pkix_pl_pki.h) | ||||
76 | */ | ||||
77 | static PKIX_Error * | ||||
78 | pkix_pl_InfoAccess_Destroy( | ||||
79 | PKIX_PL_Object *object, | ||||
80 | void *plContext) | ||||
81 | { | ||||
82 | PKIX_PL_InfoAccess *infoAccess = NULL((void*)0); | ||||
83 | |||||
84 | PKIX_ENTER(INFOACCESS, "pkix_pl_InfoAccess_Destroy")static const char cMyFuncName[] = {"pkix_pl_InfoAccess_Destroy" }; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName ; stdVars.aPkixType = PKIX_INFOACCESS_ERROR; ; do { if (pkixLoggersDebugTrace ) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName , ">>>", stdVars.aPkixType, 5, plContext); } } while (0);; | ||||
85 | 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); | ||||
86 | |||||
87 | PKIX_CHECK(pkix_CheckType(object, PKIX_INFOACCESS_TYPE, plContext),do { stdVars.aPkixErrorResult = (pkix_CheckType(object, PKIX_INFOACCESS_TYPE , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_OBJECTNOTANINFOACCESS; goto cleanup; } } while (0) | ||||
88 | PKIX_OBJECTNOTANINFOACCESS)do { stdVars.aPkixErrorResult = (pkix_CheckType(object, PKIX_INFOACCESS_TYPE , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_OBJECTNOTANINFOACCESS; goto cleanup; } } while (0); | ||||
89 | |||||
90 | infoAccess = (PKIX_PL_InfoAccess *)object; | ||||
91 | |||||
92 | PKIX_DECREF(infoAccess->location)do { if (infoAccess->location){ stdVars.aPkixTempResult = PKIX_PL_Object_DecRef ((PKIX_PL_Object *)(infoAccess->location), plContext); if (stdVars.aPkixTempResult) { PKIX_DoAddError(&stdVars, stdVars .aPkixTempResult, plContext); stdVars.aPkixTempResult = ((void *)0); } infoAccess->location = ((void*)0); } } while (0); | ||||
93 | |||||
94 | cleanup: | ||||
95 | |||||
96 | PKIX_RETURN(INFOACCESS)return PKIX_DoReturn(&stdVars, (PKIX_INFOACCESS_ERROR), ( (PKIX_Boolean) 1), plContext);; | ||||
97 | } | ||||
98 | |||||
99 | /* | ||||
100 | * FUNCTION: pkix_pl_InfoAccess_ToString | ||||
101 | * (see comments for PKIX_PL_ToStringCallback in pkix_pl_pki.h) | ||||
102 | */ | ||||
103 | static PKIX_Error * | ||||
104 | pkix_pl_InfoAccess_ToString( | ||||
105 | PKIX_PL_Object *object, | ||||
106 | PKIX_PL_String **pString, | ||||
107 | void *plContext) | ||||
108 | { | ||||
109 | PKIX_PL_InfoAccess *infoAccess; | ||||
110 | PKIX_PL_String *infoAccessString = NULL((void*)0); | ||||
111 | char *asciiFormat = NULL((void*)0); | ||||
112 | char *asciiMethod = NULL((void*)0); | ||||
113 | PKIX_PL_String *formatString = NULL((void*)0); | ||||
114 | PKIX_PL_String *methodString = NULL((void*)0); | ||||
115 | PKIX_PL_String *locationString = NULL((void*)0); | ||||
116 | |||||
117 | PKIX_ENTER(INFOACCESS, "pkix_pl_InfoAccess_ToString")static const char cMyFuncName[] = {"pkix_pl_InfoAccess_ToString" }; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName ; stdVars.aPkixType = PKIX_INFOACCESS_ERROR; ; do { if (pkixLoggersDebugTrace ) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName , ">>>", stdVars.aPkixType, 5, plContext); } } while (0);; | ||||
118 | 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); | ||||
119 | |||||
120 | PKIX_CHECK(pkix_CheckTypedo { stdVars.aPkixErrorResult = (pkix_CheckType (object, PKIX_INFOACCESS_TYPE , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_OBJECTNOTINFOACCESS; goto cleanup; } } while (0) | ||||
121 | (object, PKIX_INFOACCESS_TYPE, plContext),do { stdVars.aPkixErrorResult = (pkix_CheckType (object, PKIX_INFOACCESS_TYPE , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_OBJECTNOTINFOACCESS; goto cleanup; } } while (0) | ||||
122 | PKIX_OBJECTNOTINFOACCESS)do { stdVars.aPkixErrorResult = (pkix_CheckType (object, PKIX_INFOACCESS_TYPE , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_OBJECTNOTINFOACCESS; goto cleanup; } } while (0); | ||||
123 | |||||
124 | infoAccess = (PKIX_PL_InfoAccess *)object; | ||||
125 | |||||
126 | asciiFormat = | ||||
127 | "[" | ||||
128 | "method:%s, " | ||||
129 | "location:%s" | ||||
130 | "]"; | ||||
131 | |||||
132 | 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) | ||||
133 | (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) | ||||
134 | 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) | ||||
135 | 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) | ||||
136 | &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) | ||||
137 | 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) | ||||
138 | 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); | ||||
139 | |||||
140 | switch(infoAccess->method) { | ||||
141 | case PKIX_INFOACCESS_CA_ISSUERS2: | ||||
142 | asciiMethod = "caIssuers"; | ||||
143 | break; | ||||
144 | case PKIX_INFOACCESS_OCSP1: | ||||
145 | asciiMethod = "ocsp"; | ||||
146 | break; | ||||
147 | case PKIX_INFOACCESS_TIMESTAMPING3: | ||||
148 | asciiMethod = "timestamping"; | ||||
149 | break; | ||||
150 | case PKIX_INFOACCESS_CA_REPOSITORY5: | ||||
151 | asciiMethod = "caRepository"; | ||||
152 | break; | ||||
153 | default: | ||||
154 | asciiMethod = "unknown"; | ||||
155 | } | ||||
156 | |||||
157 | PKIX_CHECK(PKIX_PL_String_Createdo { stdVars.aPkixErrorResult = (PKIX_PL_String_Create (0, asciiMethod , 0, &methodString, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_STRINGCREATEFAILED; goto cleanup ; } } while (0) | ||||
158 | (PKIX_ESCASCII,do { stdVars.aPkixErrorResult = (PKIX_PL_String_Create (0, asciiMethod , 0, &methodString, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_STRINGCREATEFAILED; goto cleanup ; } } while (0) | ||||
159 | asciiMethod,do { stdVars.aPkixErrorResult = (PKIX_PL_String_Create (0, asciiMethod , 0, &methodString, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_STRINGCREATEFAILED; goto cleanup ; } } while (0) | ||||
160 | 0,do { stdVars.aPkixErrorResult = (PKIX_PL_String_Create (0, asciiMethod , 0, &methodString, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_STRINGCREATEFAILED; goto cleanup ; } } while (0) | ||||
161 | &methodString,do { stdVars.aPkixErrorResult = (PKIX_PL_String_Create (0, asciiMethod , 0, &methodString, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_STRINGCREATEFAILED; goto cleanup ; } } while (0) | ||||
162 | plContext),do { stdVars.aPkixErrorResult = (PKIX_PL_String_Create (0, asciiMethod , 0, &methodString, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_STRINGCREATEFAILED; goto cleanup ; } } while (0) | ||||
163 | PKIX_STRINGCREATEFAILED)do { stdVars.aPkixErrorResult = (PKIX_PL_String_Create (0, asciiMethod , 0, &methodString, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_STRINGCREATEFAILED; goto cleanup ; } } while (0); | ||||
164 | |||||
165 | PKIX_TOSTRING(infoAccess->location, &locationString, plContext,do { int descNum; if ((infoAccess->location) != ((void*)0) ) { stdVars.aPkixErrorResult = PKIX_PL_Object_ToString((PKIX_PL_Object *)(infoAccess->location), (&locationString), (plContext )); descNum = (PKIX_GENERALNAMETOSTRINGFAILED); } else { stdVars .aPkixErrorResult = PKIX_PL_String_Create(0, "(null)", 0, (& locationString), (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) | ||||
166 | PKIX_GENERALNAMETOSTRINGFAILED)do { int descNum; if ((infoAccess->location) != ((void*)0) ) { stdVars.aPkixErrorResult = PKIX_PL_Object_ToString((PKIX_PL_Object *)(infoAccess->location), (&locationString), (plContext )); descNum = (PKIX_GENERALNAMETOSTRINGFAILED); } else { stdVars .aPkixErrorResult = PKIX_PL_String_Create(0, "(null)", 0, (& locationString), (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); | ||||
167 | |||||
168 | PKIX_CHECK(PKIX_PL_Sprintfdo { stdVars.aPkixErrorResult = (PKIX_PL_Sprintf (&infoAccessString , plContext, formatString, methodString, locationString)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars .aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_SPRINTFFAILED ; goto cleanup; } } while (0) | ||||
169 | (&infoAccessString,do { stdVars.aPkixErrorResult = (PKIX_PL_Sprintf (&infoAccessString , plContext, formatString, methodString, locationString)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars .aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_SPRINTFFAILED ; goto cleanup; } } while (0) | ||||
170 | plContext,do { stdVars.aPkixErrorResult = (PKIX_PL_Sprintf (&infoAccessString , plContext, formatString, methodString, locationString)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars .aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_SPRINTFFAILED ; goto cleanup; } } while (0) | ||||
171 | formatString,do { stdVars.aPkixErrorResult = (PKIX_PL_Sprintf (&infoAccessString , plContext, formatString, methodString, locationString)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars .aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_SPRINTFFAILED ; goto cleanup; } } while (0) | ||||
172 | methodString,do { stdVars.aPkixErrorResult = (PKIX_PL_Sprintf (&infoAccessString , plContext, formatString, methodString, locationString)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars .aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_SPRINTFFAILED ; goto cleanup; } } while (0) | ||||
173 | locationString),do { stdVars.aPkixErrorResult = (PKIX_PL_Sprintf (&infoAccessString , plContext, formatString, methodString, locationString)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars .aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_SPRINTFFAILED ; goto cleanup; } } while (0) | ||||
174 | PKIX_SPRINTFFAILED)do { stdVars.aPkixErrorResult = (PKIX_PL_Sprintf (&infoAccessString , plContext, formatString, methodString, locationString)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars .aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_SPRINTFFAILED ; goto cleanup; } } while (0); | ||||
175 | |||||
176 | *pString = infoAccessString; | ||||
177 | |||||
178 | cleanup: | ||||
179 | |||||
180 | 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); | ||||
181 | PKIX_DECREF(methodString)do { if (methodString){ stdVars.aPkixTempResult = PKIX_PL_Object_DecRef ((PKIX_PL_Object *)(methodString), plContext); if (stdVars.aPkixTempResult ) { PKIX_DoAddError(&stdVars, stdVars.aPkixTempResult, plContext ); stdVars.aPkixTempResult = ((void*)0); } methodString = ((void *)0); } } while (0); | ||||
182 | PKIX_DECREF(locationString)do { if (locationString){ stdVars.aPkixTempResult = PKIX_PL_Object_DecRef ((PKIX_PL_Object *)(locationString), plContext); if (stdVars .aPkixTempResult) { PKIX_DoAddError(&stdVars, stdVars.aPkixTempResult , plContext); stdVars.aPkixTempResult = ((void*)0); } locationString = ((void*)0); } } while (0); | ||||
183 | |||||
184 | PKIX_RETURN(INFOACCESS)return PKIX_DoReturn(&stdVars, (PKIX_INFOACCESS_ERROR), ( (PKIX_Boolean) 1), plContext);; | ||||
185 | } | ||||
186 | |||||
187 | /* | ||||
188 | * FUNCTION: pkix_pl_InfoAccess_Hashcode | ||||
189 | * (see comments for PKIX_PL_HashcodeCallback in pkix_pl_pki.h) | ||||
190 | */ | ||||
191 | static PKIX_Error * | ||||
192 | pkix_pl_InfoAccess_Hashcode( | ||||
193 | PKIX_PL_Object *object, | ||||
194 | PKIX_UInt32 *pHashcode, | ||||
195 | void *plContext) | ||||
196 | { | ||||
197 | PKIX_PL_InfoAccess *infoAccess = NULL((void*)0); | ||||
198 | PKIX_UInt32 infoAccessHash; | ||||
199 | |||||
200 | PKIX_ENTER(INFOACCESS, "pkix_pl_InfoAccess_Hashcode")static const char cMyFuncName[] = {"pkix_pl_InfoAccess_Hashcode" }; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName ; stdVars.aPkixType = PKIX_INFOACCESS_ERROR; ; do { if (pkixLoggersDebugTrace ) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName , ">>>", stdVars.aPkixType, 5, plContext); } } while (0);; | ||||
201 | 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); | ||||
202 | |||||
203 | PKIX_CHECK(pkix_CheckTypedo { stdVars.aPkixErrorResult = (pkix_CheckType (object, PKIX_INFOACCESS_TYPE , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_OBJECTNOTINFOACCESS; goto cleanup; } } while (0) | ||||
204 | (object, PKIX_INFOACCESS_TYPE, plContext),do { stdVars.aPkixErrorResult = (pkix_CheckType (object, PKIX_INFOACCESS_TYPE , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_OBJECTNOTINFOACCESS; goto cleanup; } } while (0) | ||||
205 | PKIX_OBJECTNOTINFOACCESS)do { stdVars.aPkixErrorResult = (pkix_CheckType (object, PKIX_INFOACCESS_TYPE , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_OBJECTNOTINFOACCESS; goto cleanup; } } while (0); | ||||
206 | |||||
207 | infoAccess = (PKIX_PL_InfoAccess *)object; | ||||
208 | |||||
209 | PKIX_HASHCODE(infoAccess->location, &infoAccessHash, plContext,do { if ((infoAccess->location) != ((void*)0)) { do { stdVars .aPkixErrorResult = (PKIX_PL_Object_Hashcode ((PKIX_PL_Object *)(infoAccess->location), (&infoAccessHash), (plContext ))); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = (PKIX_OBJECTHASHCODEFAILED); goto cleanup; } } while (0); } else { *(&infoAccessHash) = 0; } } while (0) | ||||
210 | PKIX_OBJECTHASHCODEFAILED)do { if ((infoAccess->location) != ((void*)0)) { do { stdVars .aPkixErrorResult = (PKIX_PL_Object_Hashcode ((PKIX_PL_Object *)(infoAccess->location), (&infoAccessHash), (plContext ))); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = (PKIX_OBJECTHASHCODEFAILED); goto cleanup; } } while (0); } else { *(&infoAccessHash) = 0; } } while (0); | ||||
211 | |||||
212 | infoAccessHash += (infoAccess->method << 7); | ||||
213 | |||||
214 | *pHashcode = infoAccessHash; | ||||
215 | |||||
216 | cleanup: | ||||
217 | |||||
218 | PKIX_RETURN(INFOACCESS)return PKIX_DoReturn(&stdVars, (PKIX_INFOACCESS_ERROR), ( (PKIX_Boolean) 1), plContext);; | ||||
219 | |||||
220 | } | ||||
221 | |||||
222 | /* | ||||
223 | * FUNCTION: pkix_pl_InfoAccess_Equals | ||||
224 | * (see comments for PKIX_PL_Equals_Callback in pkix_pl_pki.h) | ||||
225 | */ | ||||
226 | static PKIX_Error * | ||||
227 | pkix_pl_InfoAccess_Equals( | ||||
228 | PKIX_PL_Object *firstObject, | ||||
229 | PKIX_PL_Object *secondObject, | ||||
230 | PKIX_Boolean *pResult, | ||||
231 | void *plContext) | ||||
232 | { | ||||
233 | PKIX_PL_InfoAccess *firstInfoAccess = NULL((void*)0); | ||||
234 | PKIX_PL_InfoAccess *secondInfoAccess = NULL((void*)0); | ||||
235 | PKIX_UInt32 secondType; | ||||
236 | PKIX_Boolean cmpResult; | ||||
237 | |||||
238 | PKIX_ENTER(INFOACCESS, "pkix_pl_InfoAccess_Equals")static const char cMyFuncName[] = {"pkix_pl_InfoAccess_Equals" }; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName ; stdVars.aPkixType = PKIX_INFOACCESS_ERROR; ; do { if (pkixLoggersDebugTrace ) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName , ">>>", stdVars.aPkixType, 5, plContext); } } while (0);; | ||||
239 | 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); | ||||
240 | |||||
241 | /* test that firstObject is a InfoAccess */ | ||||
242 | PKIX_CHECK(pkix_CheckTypedo { stdVars.aPkixErrorResult = (pkix_CheckType (firstObject, PKIX_INFOACCESS_TYPE, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_FIRSTOBJECTNOTINFOACCESS; goto cleanup; } } while (0) | ||||
243 | (firstObject, PKIX_INFOACCESS_TYPE, plContext),do { stdVars.aPkixErrorResult = (pkix_CheckType (firstObject, PKIX_INFOACCESS_TYPE, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_FIRSTOBJECTNOTINFOACCESS; goto cleanup; } } while (0) | ||||
244 | PKIX_FIRSTOBJECTNOTINFOACCESS)do { stdVars.aPkixErrorResult = (pkix_CheckType (firstObject, PKIX_INFOACCESS_TYPE, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_FIRSTOBJECTNOTINFOACCESS; goto cleanup; } } while (0); | ||||
245 | |||||
246 | /* | ||||
247 | * Since we know firstObject is a InfoAccess, if both references are | ||||
248 | * identical, they must be equal | ||||
249 | */ | ||||
250 | if (firstObject == secondObject){ | ||||
251 | *pResult = PKIX_TRUE((PKIX_Boolean) 1); | ||||
252 | goto cleanup; | ||||
253 | } | ||||
254 | |||||
255 | /* | ||||
256 | * If secondObject isn't a InfoAccess, we don't throw an error. | ||||
257 | * We simply return a Boolean result of FALSE | ||||
258 | */ | ||||
259 | *pResult = PKIX_FALSE((PKIX_Boolean) 0); | ||||
260 | PKIX_CHECK(PKIX_PL_Object_GetTypedo { stdVars.aPkixErrorResult = (PKIX_PL_Object_GetType (secondObject , &secondType, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_COULDNOTGETTYPEOFSECONDARGUMENT ; goto cleanup; } } while (0) | ||||
261 | (secondObject, &secondType, plContext),do { stdVars.aPkixErrorResult = (PKIX_PL_Object_GetType (secondObject , &secondType, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_COULDNOTGETTYPEOFSECONDARGUMENT ; goto cleanup; } } while (0) | ||||
262 | PKIX_COULDNOTGETTYPEOFSECONDARGUMENT)do { stdVars.aPkixErrorResult = (PKIX_PL_Object_GetType (secondObject , &secondType, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_COULDNOTGETTYPEOFSECONDARGUMENT ; goto cleanup; } } while (0); | ||||
263 | if (secondType != PKIX_INFOACCESS_TYPE) goto cleanup; | ||||
264 | |||||
265 | firstInfoAccess = (PKIX_PL_InfoAccess *)firstObject; | ||||
266 | secondInfoAccess = (PKIX_PL_InfoAccess *)secondObject; | ||||
267 | |||||
268 | *pResult = PKIX_FALSE((PKIX_Boolean) 0); | ||||
269 | |||||
270 | if (firstInfoAccess->method != secondInfoAccess->method) { | ||||
271 | goto cleanup; | ||||
272 | } | ||||
273 | |||||
274 | PKIX_EQUALS(firstInfoAccess, secondInfoAccess, &cmpResult, plContext,do { if ((firstInfoAccess) != ((void*)0) && (secondInfoAccess ) != ((void*)0)) { do { stdVars.aPkixErrorResult = (PKIX_PL_Object_Equals ((PKIX_PL_Object *)(firstInfoAccess), (PKIX_PL_Object*)(secondInfoAccess ), (&cmpResult), (plContext))); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = (PKIX_OBJECTEQUALSFAILED); goto cleanup ; } } while (0); } else if ((firstInfoAccess) == ((void*)0) && (secondInfoAccess) == ((void*)0)) { *(&cmpResult) = ((PKIX_Boolean ) 1); } else { *(&cmpResult) = ((PKIX_Boolean) 0); } } while (0) | ||||
275 | PKIX_OBJECTEQUALSFAILED)do { if ((firstInfoAccess) != ((void*)0) && (secondInfoAccess ) != ((void*)0)) { do { stdVars.aPkixErrorResult = (PKIX_PL_Object_Equals ((PKIX_PL_Object *)(firstInfoAccess), (PKIX_PL_Object*)(secondInfoAccess ), (&cmpResult), (plContext))); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = (PKIX_OBJECTEQUALSFAILED); goto cleanup ; } } while (0); } else if ((firstInfoAccess) == ((void*)0) && (secondInfoAccess) == ((void*)0)) { *(&cmpResult) = ((PKIX_Boolean ) 1); } else { *(&cmpResult) = ((PKIX_Boolean) 0); } } while (0); | ||||
276 | |||||
277 | *pResult = cmpResult; | ||||
278 | |||||
279 | cleanup: | ||||
280 | |||||
281 | PKIX_RETURN(INFOACCESS)return PKIX_DoReturn(&stdVars, (PKIX_INFOACCESS_ERROR), ( (PKIX_Boolean) 1), plContext);; | ||||
282 | } | ||||
283 | |||||
284 | /* | ||||
285 | * FUNCTION: pkix_pl_InfoAccess_RegisterSelf | ||||
286 | * DESCRIPTION: | ||||
287 | * Registers PKIX_INFOACCESS_TYPE and its related functions with systemClasses[] | ||||
288 | * THREAD SAFETY: | ||||
289 | * Not Thread Safe - for performance and complexity reasons | ||||
290 | * | ||||
291 | * Since this function is only called by PKIX_PL_Initialize, which should | ||||
292 | * only be called once, it is acceptable that this function is not | ||||
293 | * thread-safe. | ||||
294 | */ | ||||
295 | PKIX_Error * | ||||
296 | pkix_pl_InfoAccess_RegisterSelf(void *plContext) | ||||
297 | { | ||||
298 | extern pkix_ClassTable_Entry systemClasses[PKIX_NUMTYPES]; | ||||
299 | pkix_ClassTable_Entry entry; | ||||
300 | |||||
301 | PKIX_ENTER(INFOACCESS,static const char cMyFuncName[] = {"pkix_pl_InfoAccess_RegisterSelf" }; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName ; stdVars.aPkixType = PKIX_INFOACCESS_ERROR; ; do { if (pkixLoggersDebugTrace ) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName , ">>>", stdVars.aPkixType, 5, plContext); } } while (0); | ||||
302 | "pkix_pl_InfoAccess_RegisterSelf")static const char cMyFuncName[] = {"pkix_pl_InfoAccess_RegisterSelf" }; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName ; stdVars.aPkixType = PKIX_INFOACCESS_ERROR; ; do { if (pkixLoggersDebugTrace ) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName , ">>>", stdVars.aPkixType, 5, plContext); } } while (0);; | ||||
303 | |||||
304 | entry.description = "InfoAccess"; | ||||
305 | entry.objCounter = 0; | ||||
306 | entry.typeObjectSize = sizeof(PKIX_PL_InfoAccess); | ||||
307 | entry.destructor = pkix_pl_InfoAccess_Destroy; | ||||
308 | entry.equalsFunction = pkix_pl_InfoAccess_Equals; | ||||
309 | entry.hashcodeFunction = pkix_pl_InfoAccess_Hashcode; | ||||
310 | entry.toStringFunction = pkix_pl_InfoAccess_ToString; | ||||
311 | entry.comparator = NULL((void*)0); | ||||
312 | entry.duplicateFunction = pkix_duplicateImmutable; | ||||
313 | |||||
314 | systemClasses[PKIX_INFOACCESS_TYPE] = entry; | ||||
315 | |||||
316 | PKIX_RETURN(INFOACCESS)return PKIX_DoReturn(&stdVars, (PKIX_INFOACCESS_ERROR), ( (PKIX_Boolean) 1), plContext);; | ||||
317 | } | ||||
318 | |||||
319 | /* | ||||
320 | * FUNCTION: pkix_pl_InfoAccess_CreateList | ||||
321 | * DESCRIPTION: | ||||
322 | * | ||||
323 | * Based on data in CERTAuthInfoAccess array "nssInfoAccess", this function | ||||
324 | * creates and returns a PKIX_List of PKIX_PL_InfoAccess at "pInfoAccessList". | ||||
325 | * | ||||
326 | * PARAMETERS | ||||
327 | * "nssInfoAccess" | ||||
328 | * The pointer array of CERTAuthInfoAccess that contains access data. | ||||
329 | * May be NULL. | ||||
330 | * "pInfoAccessList" | ||||
331 | * Address where a list of PKIX_PL_InfoAccess is returned. | ||||
332 | * Must be non-NULL. | ||||
333 | * "plContext" | ||||
334 | * Platform-specific context pointer. | ||||
335 | * THREAD SAFETY: | ||||
336 | * Thread Safe (see Thread Safety Definitions in Programmer's Guide) | ||||
337 | * RETURNS: | ||||
338 | * Returns NULL if the function succeeds. | ||||
339 | * Returns a Fatal Error if the function fails in an unrecoverable way. | ||||
340 | */ | ||||
341 | PKIX_Error * | ||||
342 | pkix_pl_InfoAccess_CreateList( | ||||
343 | CERTAuthInfoAccess **nssInfoAccess, | ||||
344 | PKIX_List **pInfoAccessList, /* of PKIX_PL_InfoAccess */ | ||||
345 | void *plContext) | ||||
346 | { | ||||
347 | PKIX_List *infoAccessList = NULL((void*)0); | ||||
348 | PKIX_PL_InfoAccess *infoAccess = NULL((void*)0); | ||||
349 | PKIX_PL_GeneralName *location = NULL((void*)0); | ||||
350 | PKIX_UInt32 method; | ||||
351 | int i; | ||||
352 | |||||
353 | PKIX_ENTER(INFOACCESS, "PKIX_PL_InfoAccess_CreateList")static const char cMyFuncName[] = {"PKIX_PL_InfoAccess_CreateList" }; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName ; stdVars.aPkixType = PKIX_INFOACCESS_ERROR; ; do { if (pkixLoggersDebugTrace ) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName , ">>>", stdVars.aPkixType, 5, plContext); } } while (0);; | ||||
354 | PKIX_NULLCHECK_ONE(pInfoAccessList)do { if ((pInfoAccessList) == ((void*)0)){ stdVars.aPkixErrorReceived = ((PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_NULLARGUMENT ; return PKIX_DoReturn(&stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean ) 1), plContext);; } } while (0); | ||||
355 | |||||
356 | PKIX_CHECK(PKIX_List_Create(&infoAccessList, plContext),do { stdVars.aPkixErrorResult = (PKIX_List_Create(&infoAccessList , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_LISTCREATEFAILED; goto cleanup; } } while (0) | ||||
357 | PKIX_LISTCREATEFAILED)do { stdVars.aPkixErrorResult = (PKIX_List_Create(&infoAccessList , plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_LISTCREATEFAILED; goto cleanup; } } while (0); | ||||
358 | |||||
359 | if (nssInfoAccess == NULL((void*)0)) { | ||||
360 | goto cleanup; | ||||
361 | } | ||||
362 | |||||
363 | for (i = 0; nssInfoAccess[i] != NULL((void*)0); i++) { | ||||
364 | |||||
365 | if (nssInfoAccess[i]->location == NULL((void*)0)) { | ||||
366 | continue; | ||||
367 | } | ||||
368 | |||||
369 | PKIX_CHECK(pkix_pl_GeneralName_Createdo { stdVars.aPkixErrorResult = (pkix_pl_GeneralName_Create ( nssInfoAccess[i]->location, &location, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars .aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_GENERALNAMECREATEFAILED ; goto cleanup; } } while (0) | ||||
370 | (nssInfoAccess[i]->location, &location, plContext),do { stdVars.aPkixErrorResult = (pkix_pl_GeneralName_Create ( nssInfoAccess[i]->location, &location, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars .aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_GENERALNAMECREATEFAILED ; goto cleanup; } } while (0) | ||||
371 | PKIX_GENERALNAMECREATEFAILED)do { stdVars.aPkixErrorResult = (pkix_pl_GeneralName_Create ( nssInfoAccess[i]->location, &location, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars .aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_GENERALNAMECREATEFAILED ; goto cleanup; } } while (0); | ||||
372 | |||||
373 | PKIX_CERT_DEBUG("\t\tCalling SECOID_FindOIDTag).\n"); | ||||
374 | method = SECOID_FindOIDTagSECOID_FindOIDTag_Util(&nssInfoAccess[i]->method); | ||||
375 | /* Map NSS access method value into PKIX constant */ | ||||
376 | switch(method) { | ||||
377 | case SEC_OID_PKIX_CA_ISSUERS: | ||||
378 | method = PKIX_INFOACCESS_CA_ISSUERS2; | ||||
379 | break; | ||||
380 | case SEC_OID_PKIX_OCSP: | ||||
381 | method = PKIX_INFOACCESS_OCSP1; | ||||
382 | break; | ||||
383 | case SEC_OID_PKIX_TIMESTAMPING: | ||||
384 | method = PKIX_INFOACCESS_TIMESTAMPING3; | ||||
385 | break; | ||||
386 | case SEC_OID_PKIX_CA_REPOSITORY: | ||||
387 | method = PKIX_INFOACCESS_CA_REPOSITORY5; | ||||
388 | break; | ||||
389 | default: | ||||
390 | PKIX_ERROR(PKIX_UNKNOWNINFOACCESSMETHOD){ { if (pkixLoggersErrors) { pkix_Logger_CheckWithCode(pkixLoggersErrors , PKIX_UNKNOWNINFOACCESSMETHOD, ((void*)0), stdVars.aPkixType , 2, plContext); } } stdVars.aPkixErrorReceived = ((PKIX_Boolean ) 1); stdVars.aPkixErrorCode = PKIX_UNKNOWNINFOACCESSMETHOD; goto cleanup; }; | ||||
391 | } | ||||
392 | |||||
393 | PKIX_CHECK(pkix_pl_InfoAccess_Createdo { stdVars.aPkixErrorResult = (pkix_pl_InfoAccess_Create (method , location, &infoAccess, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_INFOACCESSCREATEFAILED; goto cleanup ; } } while (0) | ||||
394 | (method, location, &infoAccess, plContext),do { stdVars.aPkixErrorResult = (pkix_pl_InfoAccess_Create (method , location, &infoAccess, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_INFOACCESSCREATEFAILED; goto cleanup ; } } while (0) | ||||
395 | PKIX_INFOACCESSCREATEFAILED)do { stdVars.aPkixErrorResult = (pkix_pl_InfoAccess_Create (method , location, &infoAccess, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_INFOACCESSCREATEFAILED; goto cleanup ; } } while (0); | ||||
396 | |||||
397 | PKIX_CHECK(PKIX_List_AppendItemdo { stdVars.aPkixErrorResult = (PKIX_List_AppendItem (infoAccessList , (PKIX_PL_Object *)infoAccess, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_LISTAPPENDITEMFAILED; goto cleanup ; } } while (0) | ||||
398 | (infoAccessList,do { stdVars.aPkixErrorResult = (PKIX_List_AppendItem (infoAccessList , (PKIX_PL_Object *)infoAccess, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_LISTAPPENDITEMFAILED; goto cleanup ; } } while (0) | ||||
399 | (PKIX_PL_Object *)infoAccess,do { stdVars.aPkixErrorResult = (PKIX_List_AppendItem (infoAccessList , (PKIX_PL_Object *)infoAccess, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_LISTAPPENDITEMFAILED; goto cleanup ; } } while (0) | ||||
400 | plContext),do { stdVars.aPkixErrorResult = (PKIX_List_AppendItem (infoAccessList , (PKIX_PL_Object *)infoAccess, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_LISTAPPENDITEMFAILED; goto cleanup ; } } while (0) | ||||
401 | PKIX_LISTAPPENDITEMFAILED)do { stdVars.aPkixErrorResult = (PKIX_List_AppendItem (infoAccessList , (PKIX_PL_Object *)infoAccess, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_LISTAPPENDITEMFAILED; goto cleanup ; } } while (0); | ||||
402 | PKIX_DECREF(infoAccess)do { if (infoAccess){ stdVars.aPkixTempResult = PKIX_PL_Object_DecRef ((PKIX_PL_Object *)(infoAccess), plContext); if (stdVars.aPkixTempResult ) { PKIX_DoAddError(&stdVars, stdVars.aPkixTempResult, plContext ); stdVars.aPkixTempResult = ((void*)0); } infoAccess = ((void *)0); } } while (0); | ||||
403 | PKIX_DECREF(location)do { if (location){ stdVars.aPkixTempResult = PKIX_PL_Object_DecRef ((PKIX_PL_Object *)(location), plContext); if (stdVars.aPkixTempResult ) { PKIX_DoAddError(&stdVars, stdVars.aPkixTempResult, plContext ); stdVars.aPkixTempResult = ((void*)0); } location = ((void* )0); } } while (0); | ||||
404 | } | ||||
405 | |||||
406 | *pInfoAccessList = infoAccessList; | ||||
407 | infoAccessList = NULL((void*)0); | ||||
408 | |||||
409 | cleanup: | ||||
410 | |||||
411 | PKIX_DECREF(infoAccessList)do { if (infoAccessList){ stdVars.aPkixTempResult = PKIX_PL_Object_DecRef ((PKIX_PL_Object *)(infoAccessList), plContext); if (stdVars .aPkixTempResult) { PKIX_DoAddError(&stdVars, stdVars.aPkixTempResult , plContext); stdVars.aPkixTempResult = ((void*)0); } infoAccessList = ((void*)0); } } while (0); | ||||
412 | PKIX_DECREF(infoAccess)do { if (infoAccess){ stdVars.aPkixTempResult = PKIX_PL_Object_DecRef ((PKIX_PL_Object *)(infoAccess), plContext); if (stdVars.aPkixTempResult ) { PKIX_DoAddError(&stdVars, stdVars.aPkixTempResult, plContext ); stdVars.aPkixTempResult = ((void*)0); } infoAccess = ((void *)0); } } while (0); | ||||
413 | PKIX_DECREF(location)do { if (location){ stdVars.aPkixTempResult = PKIX_PL_Object_DecRef ((PKIX_PL_Object *)(location), plContext); if (stdVars.aPkixTempResult ) { PKIX_DoAddError(&stdVars, stdVars.aPkixTempResult, plContext ); stdVars.aPkixTempResult = ((void*)0); } location = ((void* )0); } } while (0); | ||||
414 | |||||
415 | PKIX_RETURN(INFOACCESS)return PKIX_DoReturn(&stdVars, (PKIX_INFOACCESS_ERROR), ( (PKIX_Boolean) 1), plContext);; | ||||
416 | } | ||||
417 | |||||
418 | /* --Public-Functions------------------------------------------------------- */ | ||||
419 | |||||
420 | /* | ||||
421 | * FUNCTION: PKIX_PL_InfoAccess_GetMethod (see comments in pkix_pl_pki.h) | ||||
422 | */ | ||||
423 | PKIX_Error * | ||||
424 | PKIX_PL_InfoAccess_GetMethod( | ||||
425 | PKIX_PL_InfoAccess *infoAccess, | ||||
426 | PKIX_UInt32 *pMethod, | ||||
427 | void *plContext) | ||||
428 | { | ||||
429 | PKIX_ENTER(INFOACCESS, "PKIX_PL_InfoAccess_GetMethod")static const char cMyFuncName[] = {"PKIX_PL_InfoAccess_GetMethod" }; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName ; stdVars.aPkixType = PKIX_INFOACCESS_ERROR; ; do { if (pkixLoggersDebugTrace ) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName , ">>>", stdVars.aPkixType, 5, plContext); } } while (0);; | ||||
430 | PKIX_NULLCHECK_TWO(infoAccess, pMethod)do { if (((infoAccess) == ((void*)0)) || ((pMethod) == ((void *)0))){ stdVars.aPkixErrorReceived = ((PKIX_Boolean) 1); stdVars .aPkixErrorCode = PKIX_NULLARGUMENT; return PKIX_DoReturn(& stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean) 1), plContext);; } } while (0); | ||||
431 | |||||
432 | *pMethod = infoAccess->method; | ||||
433 | |||||
434 | PKIX_RETURN(INFOACCESS)return PKIX_DoReturn(&stdVars, (PKIX_INFOACCESS_ERROR), ( (PKIX_Boolean) 1), plContext);; | ||||
435 | } | ||||
436 | |||||
437 | /* | ||||
438 | * FUNCTION: PKIX_PL_InfoAccess_GetLocation (see comments in pkix_pl_pki.h) | ||||
439 | */ | ||||
440 | PKIX_Error * | ||||
441 | PKIX_PL_InfoAccess_GetLocation( | ||||
442 | PKIX_PL_InfoAccess *infoAccess, | ||||
443 | PKIX_PL_GeneralName **pLocation, | ||||
444 | void *plContext) | ||||
445 | { | ||||
446 | PKIX_ENTER(INFOACCESS, "PKIX_PL_InfoAccess_GetLocation")static const char cMyFuncName[] = {"PKIX_PL_InfoAccess_GetLocation" }; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName ; stdVars.aPkixType = PKIX_INFOACCESS_ERROR; ; do { if (pkixLoggersDebugTrace ) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName , ">>>", stdVars.aPkixType, 5, plContext); } } while (0);; | ||||
447 | PKIX_NULLCHECK_TWO(infoAccess, pLocation)do { if (((infoAccess) == ((void*)0)) || ((pLocation) == ((void *)0))){ stdVars.aPkixErrorReceived = ((PKIX_Boolean) 1); stdVars .aPkixErrorCode = PKIX_NULLARGUMENT; return PKIX_DoReturn(& stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean) 1), plContext);; } } while (0); | ||||
448 | |||||
449 | PKIX_INCREF(infoAccess->location)do { if (infoAccess->location){ stdVars.aPkixTempResult = PKIX_PL_Object_IncRef ((PKIX_PL_Object *)(infoAccess->location), plContext); if (stdVars.aPkixTempResult) { PKIX_DoAddError(&stdVars, stdVars .aPkixTempResult, plContext); stdVars.aPkixTempResult = ((void *)0); goto cleanup; } } } while (0); | ||||
450 | |||||
451 | *pLocation = infoAccess->location; | ||||
452 | |||||
453 | cleanup: | ||||
454 | PKIX_RETURN(INFOACCESS)return PKIX_DoReturn(&stdVars, (PKIX_INFOACCESS_ERROR), ( (PKIX_Boolean) 1), plContext);; | ||||
455 | } | ||||
456 | |||||
457 | /* | ||||
458 | * FUNCTION: PKIX_PL_InfoAccess_GetLocationType (see comments in pkix_pl_pki.h) | ||||
459 | */ | ||||
460 | PKIX_Error * | ||||
461 | PKIX_PL_InfoAccess_GetLocationType( | ||||
462 | PKIX_PL_InfoAccess *infoAccess, | ||||
463 | PKIX_UInt32 *pType, | ||||
464 | void *plContext) | ||||
465 | { | ||||
466 | PKIX_PL_String *locationString = NULL((void*)0); | ||||
467 | PKIX_UInt32 type = PKIX_INFOACCESS_LOCATION_UNKNOWN0; | ||||
468 | PKIX_UInt32 len = 0; | ||||
469 | void *location = NULL((void*)0); | ||||
470 | |||||
471 | PKIX_ENTER(INFOACCESS, "PKIX_PL_InfoAccess_GetLocationType")static const char cMyFuncName[] = {"PKIX_PL_InfoAccess_GetLocationType" }; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName ; stdVars.aPkixType = PKIX_INFOACCESS_ERROR; ; do { if (pkixLoggersDebugTrace ) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName , ">>>", stdVars.aPkixType, 5, plContext); } } while (0);; | ||||
472 | PKIX_NULLCHECK_TWO(infoAccess, pType)do { if (((infoAccess) == ((void*)0)) || ((pType) == ((void*) 0))){ stdVars.aPkixErrorReceived = ((PKIX_Boolean) 1); stdVars .aPkixErrorCode = PKIX_NULLARGUMENT; return PKIX_DoReturn(& stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean) 1), plContext);; } } while (0); | ||||
473 | |||||
474 | if (infoAccess->location != NULL((void*)0)) { | ||||
475 | |||||
476 | PKIX_TOSTRING(infoAccess->location, &locationString, plContext,do { int descNum; if ((infoAccess->location) != ((void*)0) ) { stdVars.aPkixErrorResult = PKIX_PL_Object_ToString((PKIX_PL_Object *)(infoAccess->location), (&locationString), (plContext )); descNum = (PKIX_GENERALNAMETOSTRINGFAILED); } else { stdVars .aPkixErrorResult = PKIX_PL_String_Create(0, "(null)", 0, (& locationString), (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) | ||||
477 | PKIX_GENERALNAMETOSTRINGFAILED)do { int descNum; if ((infoAccess->location) != ((void*)0) ) { stdVars.aPkixErrorResult = PKIX_PL_Object_ToString((PKIX_PL_Object *)(infoAccess->location), (&locationString), (plContext )); descNum = (PKIX_GENERALNAMETOSTRINGFAILED); } else { stdVars .aPkixErrorResult = PKIX_PL_String_Create(0, "(null)", 0, (& locationString), (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); | ||||
478 | |||||
479 | PKIX_CHECK(PKIX_PL_String_GetEncodeddo { stdVars.aPkixErrorResult = (PKIX_PL_String_GetEncoded (locationString , 0, &location, &len, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_STRINGGETENCODEDFAILED; goto cleanup ; } } while (0) | ||||
480 | (locationString, PKIX_ESCASCII, &location, &len, plContext),do { stdVars.aPkixErrorResult = (PKIX_PL_String_GetEncoded (locationString , 0, &location, &len, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_STRINGGETENCODEDFAILED; goto cleanup ; } } while (0) | ||||
481 | PKIX_STRINGGETENCODEDFAILED)do { stdVars.aPkixErrorResult = (PKIX_PL_String_GetEncoded (locationString , 0, &location, &len, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_STRINGGETENCODEDFAILED; goto cleanup ; } } while (0); | ||||
482 | |||||
483 | PKIX_OID_DEBUG("\tCalling PORT_Strcmp).\n"); | ||||
484 | #ifndef NSS_PKIX_NO_LDAP | ||||
485 | if (PORT_Strncmpstrncmp(location, "ldap:", 5) == 0){ | ||||
486 | type = PKIX_INFOACCESS_LOCATION_LDAP2; | ||||
487 | } else | ||||
488 | #endif | ||||
489 | if (PORT_Strncmpstrncmp(location, "http:", 5) == 0){ | ||||
490 | type = PKIX_INFOACCESS_LOCATION_HTTP1; | ||||
491 | } | ||||
492 | } | ||||
493 | |||||
494 | *pType = type; | ||||
495 | |||||
496 | cleanup: | ||||
497 | |||||
498 | PKIX_PL_Free(location, plContext); | ||||
499 | PKIX_DECREF(locationString)do { if (locationString){ stdVars.aPkixTempResult = PKIX_PL_Object_DecRef ((PKIX_PL_Object *)(locationString), plContext); if (stdVars .aPkixTempResult) { PKIX_DoAddError(&stdVars, stdVars.aPkixTempResult , plContext); stdVars.aPkixTempResult = ((void*)0); } locationString = ((void*)0); } } while (0); | ||||
500 | |||||
501 | PKIX_RETURN(INFOACCESS)return PKIX_DoReturn(&stdVars, (PKIX_INFOACCESS_ERROR), ( (PKIX_Boolean) 1), plContext);; | ||||
502 | } | ||||
503 | |||||
504 | #ifndef NSS_PKIX_NO_LDAP | ||||
505 | /* | ||||
506 | * FUNCTION: pkix_pl_InfoAccess_ParseTokens | ||||
507 | * DESCRIPTION: | ||||
508 | * | ||||
509 | * This function parses the string beginning at "startPos" into tokens using | ||||
510 | * the separator contained in "separator" and the terminator contained in | ||||
511 | * "terminator", copying the tokens into space allocated from the arena | ||||
512 | * pointed to by "arena". It stores in "tokens" a null-terminated array of | ||||
513 | * pointers to those tokens. | ||||
514 | * | ||||
515 | * PARAMETERS | ||||
516 | * "arena" | ||||
517 | * Address of a PLArenaPool to be used in populating the LDAPLocation. | ||||
518 | * Must be non-NULL. | ||||
519 | * "startPos" | ||||
520 | * The address of char string that contains a subset of ldap location. | ||||
521 | * "tokens" | ||||
522 | * The address of an array of char string for storing returned tokens. | ||||
523 | * Must be non-NULL. | ||||
524 | * "separator" | ||||
525 | * The character that is taken as token separator. Must be non-NULL. | ||||
526 | * "terminator" | ||||
527 | * The character that is taken as parsing terminator. Must be non-NULL. | ||||
528 | * "plContext" | ||||
529 | * Platform-specific context pointer. | ||||
530 | * THREAD SAFETY: | ||||
531 | * Thread Safe (see Thread Safety Definitions in Programmer's Guide) | ||||
532 | * RETURNS: | ||||
533 | * Returns NULL if the function succeeds. | ||||
534 | * Returns an InfoAccess Error if the function fails in a non-fatal way. | ||||
535 | * Returns a Fatal Error if the function fails in an unrecoverable way. | ||||
536 | */ | ||||
537 | static PKIX_Error * | ||||
538 | pkix_pl_InfoAccess_ParseTokens( | ||||
539 | PLArenaPool *arena, | ||||
540 | char **startPos, /* return update */ | ||||
541 | char ***tokens, | ||||
542 | char separator, | ||||
543 | char terminator, | ||||
544 | void *plContext) | ||||
545 | { | ||||
546 | PKIX_UInt32 numFilters = 0; | ||||
547 | char *endPos = NULL((void*)0); | ||||
548 | char **filterP = NULL((void*)0); | ||||
549 | |||||
550 | PKIX_ENTER(INFOACCESS, "pkix_pl_InfoAccess_ParseTokens")static const char cMyFuncName[] = {"pkix_pl_InfoAccess_ParseTokens" }; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName ; stdVars.aPkixType = PKIX_INFOACCESS_ERROR; ; do { if (pkixLoggersDebugTrace ) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName , ">>>", stdVars.aPkixType, 5, plContext); } } while (0);; | ||||
551 | PKIX_NULLCHECK_THREE(arena, startPos, tokens)do { if (((arena) == ((void*)0)) || ((startPos) == ((void*)0) ) || ((tokens) == ((void*)0))){ stdVars.aPkixErrorReceived = ( (PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_NULLARGUMENT ; return PKIX_DoReturn(&stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean ) 1), plContext);; } } while (0); | ||||
552 | |||||
553 | endPos = *startPos; | ||||
554 | |||||
555 | /* First pass: parse to <terminator> to count number of components */ | ||||
556 | numFilters = 0; | ||||
557 | while (*endPos != terminator && *endPos != '\0') { | ||||
558 | endPos++; | ||||
559 | if (*endPos == separator) { | ||||
560 | numFilters++; | ||||
561 | } | ||||
562 | } | ||||
563 | |||||
564 | if (*endPos != terminator) { | ||||
565 | PKIX_ERROR(PKIX_LOCATIONSTRINGNOTPROPERLYTERMINATED){ { if (pkixLoggersErrors) { pkix_Logger_CheckWithCode(pkixLoggersErrors , PKIX_LOCATIONSTRINGNOTPROPERLYTERMINATED, ((void*)0), stdVars .aPkixType, 2, plContext); } } stdVars.aPkixErrorReceived = ( (PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_LOCATIONSTRINGNOTPROPERLYTERMINATED ; goto cleanup; }; | ||||
566 | } | ||||
567 | |||||
568 | /* Last component doesn't need a separator, although we allow it */ | ||||
569 | if (endPos > *startPos && *(endPos-1) != separator) { | ||||
570 | numFilters++; | ||||
571 | } | ||||
572 | |||||
573 | /* | ||||
574 | * If string is a=xx, b=yy, c=zz, etc., use a=xx for filter, | ||||
575 | * and everything else for the base | ||||
576 | */ | ||||
577 | if (numFilters
| ||||
578 | |||||
579 | filterP = PORT_ArenaZNewArray(arena, char*, numFilters+1)(char* *)PORT_ArenaZAlloc_Util(arena, sizeof(char*) * (numFilters +1)); | ||||
580 | if (filterP == NULL((void*)0)) { | ||||
581 | 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; }; | ||||
582 | } | ||||
583 | |||||
584 | /* Second pass: parse to fill in components in token array */ | ||||
585 | *tokens = filterP; | ||||
586 | endPos = *startPos; | ||||
587 | |||||
588 | while (numFilters) { | ||||
589 | if (*endPos == separator || *endPos == terminator) { | ||||
590 | PKIX_UInt32 len = endPos - *startPos; | ||||
591 | char *p = PORT_ArenaZAllocPORT_ArenaZAlloc_Util(arena, len+1); | ||||
592 | if (p == NULL((void*)0)) { | ||||
593 | 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; }; | ||||
594 | } | ||||
595 | |||||
596 | PORT_Memcpymemcpy(p, *startPos, len); | ||||
597 | p[len] = '\0'; | ||||
598 | |||||
599 | *filterP = p; | ||||
600 | filterP++; | ||||
601 | numFilters--; | ||||
602 | |||||
603 | separator = terminator; | ||||
604 | |||||
605 | if (*endPos == '\0') { | ||||
606 | *startPos = endPos; | ||||
607 | break; | ||||
608 | } else { | ||||
609 | endPos++; | ||||
610 | *startPos = endPos; | ||||
611 | continue; | ||||
612 | } | ||||
613 | } | ||||
614 | endPos++; | ||||
615 | } | ||||
616 | |||||
617 | *filterP = NULL((void*)0); | ||||
618 | |||||
619 | cleanup: | ||||
620 | |||||
621 | PKIX_RETURN(INFOACCESS)return PKIX_DoReturn(&stdVars, (PKIX_INFOACCESS_ERROR), ( (PKIX_Boolean) 1), plContext);; | ||||
622 | } | ||||
623 | |||||
624 | static int | ||||
625 | pkix_pl_HexDigitToInt( | ||||
626 | int ch) | ||||
627 | { | ||||
628 | if (isdigit(ch)((*__ctype_b_loc ())[(int) ((ch))] & (unsigned short int) _ISdigit)) { | ||||
629 | ch = ch - '0'; | ||||
630 | } else if (isupper(ch)((*__ctype_b_loc ())[(int) ((ch))] & (unsigned short int) _ISupper)) { | ||||
631 | ch = ch - 'A' + 10; | ||||
632 | } else { | ||||
633 | ch = ch - 'a' + 10; | ||||
634 | } | ||||
635 | return ch; | ||||
636 | } | ||||
637 | |||||
638 | /* | ||||
639 | * Convert the "%" hex hex escape sequences in the URL 'location' in place. | ||||
640 | */ | ||||
641 | static void | ||||
642 | pkix_pl_UnescapeURL( | ||||
643 | char *location) | ||||
644 | { | ||||
645 | const char *src; | ||||
646 | char *dst; | ||||
647 | |||||
648 | for (src = dst = location; *src != '\0'; src++, dst++) { | ||||
649 | if (*src == '%' && isxdigit((unsigned char)*(src+1))((*__ctype_b_loc ())[(int) (((unsigned char)*(src+1)))] & (unsigned short int) _ISxdigit) && | ||||
650 | isxdigit((unsigned char)*(src+2))((*__ctype_b_loc ())[(int) (((unsigned char)*(src+2)))] & (unsigned short int) _ISxdigit)) { | ||||
651 | *dst = pkix_pl_HexDigitToInt((unsigned char)*(src+1)); | ||||
652 | *dst *= 16; | ||||
653 | *dst += pkix_pl_HexDigitToInt((unsigned char)*(src+2)); | ||||
654 | src += 2; | ||||
655 | } else { | ||||
656 | *dst = *src; | ||||
657 | } | ||||
658 | } | ||||
659 | *dst = *src; /* the terminating null */ | ||||
660 | } | ||||
661 | |||||
662 | /* | ||||
663 | * FUNCTION: pkix_pl_InfoAccess_ParseLocation | ||||
664 | * DESCRIPTION: | ||||
665 | * | ||||
666 | * This function parses the GeneralName pointed to by "generalName" into the | ||||
667 | * fields of the LDAPRequestParams pointed to by "request" and a domainName | ||||
668 | * pointed to by "pDomainName", using the PLArenaPool pointed to by "arena" to | ||||
669 | * allocate storage for the request components and for the domainName string. | ||||
670 | * | ||||
671 | * The expected GeneralName string should be in the format described by the | ||||
672 | * following BNF: | ||||
673 | * | ||||
674 | * ldap://<ldap-server-site>/[cn=<cname>][,o=<org>][,c=<country>]? | ||||
675 | * [caCertificate|crossCertificatPair|certificateRevocationList]; | ||||
676 | * [binary|<other-type>] | ||||
677 | * [[,caCertificate|crossCertificatPair|certificateRevocationList] | ||||
678 | * [binary|<other-type>]]* | ||||
679 | * | ||||
680 | * PARAMETERS | ||||
681 | * "gName" | ||||
682 | * Address of the GeneralName whose LDAPLocation is to be parsed. Must be | ||||
683 | * non-NULL. | ||||
684 | * "arena" | ||||
685 | * Address of PLArenaPool to be used for the domainName and for components | ||||
686 | * of the LDAPRequest. Must be non-NULL. | ||||
687 | * "request" | ||||
688 | * Address of the LDAPRequestParams into which request components are | ||||
689 | * stored. Must be non-NULL. | ||||
690 | * *pDomainName" | ||||
691 | * Address at which the domainName is stored. Must be non-NULL. | ||||
692 | * "plContext" | ||||
693 | * Platform-specific context pointer. | ||||
694 | * THREAD SAFETY: | ||||
695 | * Thread Safe (see Thread Safety Definitions in Programmer's Guide) | ||||
696 | * RETURNS: | ||||
697 | * Returns NULL if the function succeeds. | ||||
698 | * Returns an InfoAccess Error if the function fails in a non-fatal way. | ||||
699 | * Returns a Fatal Error if the function fails in an unrecoverable way. | ||||
700 | */ | ||||
701 | PKIX_Error * | ||||
702 | pkix_pl_InfoAccess_ParseLocation( | ||||
703 | PKIX_PL_GeneralName *gName, | ||||
704 | PLArenaPool *arena, | ||||
705 | LDAPRequestParams *request, | ||||
706 | char **pDomainName, | ||||
707 | void *plContext) | ||||
708 | { | ||||
709 | PKIX_PL_String *locationString = NULL((void*)0); | ||||
710 | PKIX_UInt32 len = 0; | ||||
711 | PKIX_UInt32 ncIndex = 0; | ||||
712 | char *domainName = NULL((void*)0); | ||||
713 | char **avaArray = NULL((void*)0); | ||||
714 | char **attrArray = NULL((void*)0); | ||||
| |||||
715 | char *attr = NULL((void*)0); | ||||
716 | char *locationAscii = NULL((void*)0); | ||||
717 | char *startPos = NULL((void*)0); | ||||
718 | char *endPos = NULL((void*)0); | ||||
719 | char *avaPtr = NULL((void*)0); | ||||
720 | LdapAttrMask attrBit = 0; | ||||
721 | LDAPNameComponent **setOfNameComponent = NULL((void*)0); | ||||
722 | LDAPNameComponent *nameComponent = NULL((void*)0); | ||||
723 | |||||
724 | PKIX_ENTER(INFOACCESS, "pkix_pl_InfoAccess_ParseLocation")static const char cMyFuncName[] = {"pkix_pl_InfoAccess_ParseLocation" }; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName ; stdVars.aPkixType = PKIX_INFOACCESS_ERROR; ; do { if (pkixLoggersDebugTrace ) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName , ">>>", stdVars.aPkixType, 5, plContext); } } while (0);; | ||||
725 | PKIX_NULLCHECK_FOUR(gName, arena, request, pDomainName)do { if (((gName) == ((void*)0)) || ((arena) == ((void*)0)) || ((request) == ((void*)0)) || ((pDomainName) == ((void*)0))){ stdVars.aPkixErrorReceived = ((PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_NULLARGUMENT; return PKIX_DoReturn(&stdVars, (PKIX_FATAL_ERROR ), ((PKIX_Boolean) 1), plContext);; } } while (0); | ||||
726 | |||||
727 | PKIX_TOSTRING(gName, &locationString, plContext,do { int descNum; if ((gName) != ((void*)0)) { stdVars.aPkixErrorResult = PKIX_PL_Object_ToString((PKIX_PL_Object *)(gName), (&locationString ), (plContext)); descNum = (PKIX_GENERALNAMETOSTRINGFAILED); } else { stdVars.aPkixErrorResult = PKIX_PL_String_Create(0, "(null)" , 0, (&locationString), (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) | ||||
728 | PKIX_GENERALNAMETOSTRINGFAILED)do { int descNum; if ((gName) != ((void*)0)) { stdVars.aPkixErrorResult = PKIX_PL_Object_ToString((PKIX_PL_Object *)(gName), (&locationString ), (plContext)); descNum = (PKIX_GENERALNAMETOSTRINGFAILED); } else { stdVars.aPkixErrorResult = PKIX_PL_String_Create(0, "(null)" , 0, (&locationString), (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); | ||||
729 | |||||
730 | PKIX_CHECK(PKIX_PL_String_GetEncodeddo { stdVars.aPkixErrorResult = (PKIX_PL_String_GetEncoded (locationString , 0, (void **)&locationAscii, &len, plContext)); if ( stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars .aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_STRINGGETENCODEDFAILED ; goto cleanup; } } while (0) | ||||
731 | (locationString,do { stdVars.aPkixErrorResult = (PKIX_PL_String_GetEncoded (locationString , 0, (void **)&locationAscii, &len, plContext)); if ( stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars .aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_STRINGGETENCODEDFAILED ; goto cleanup; } } while (0) | ||||
732 | PKIX_ESCASCII,do { stdVars.aPkixErrorResult = (PKIX_PL_String_GetEncoded (locationString , 0, (void **)&locationAscii, &len, plContext)); if ( stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars .aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_STRINGGETENCODEDFAILED ; goto cleanup; } } while (0) | ||||
733 | (void **)&locationAscii,do { stdVars.aPkixErrorResult = (PKIX_PL_String_GetEncoded (locationString , 0, (void **)&locationAscii, &len, plContext)); if ( stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars .aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_STRINGGETENCODEDFAILED ; goto cleanup; } } while (0) | ||||
734 | &len,do { stdVars.aPkixErrorResult = (PKIX_PL_String_GetEncoded (locationString , 0, (void **)&locationAscii, &len, plContext)); if ( stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars .aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_STRINGGETENCODEDFAILED ; goto cleanup; } } while (0) | ||||
735 | plContext),do { stdVars.aPkixErrorResult = (PKIX_PL_String_GetEncoded (locationString , 0, (void **)&locationAscii, &len, plContext)); if ( stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars .aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_STRINGGETENCODEDFAILED ; goto cleanup; } } while (0) | ||||
736 | PKIX_STRINGGETENCODEDFAILED)do { stdVars.aPkixErrorResult = (PKIX_PL_String_GetEncoded (locationString , 0, (void **)&locationAscii, &len, plContext)); if ( stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars .aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_STRINGGETENCODEDFAILED ; goto cleanup; } } while (0); | ||||
737 | |||||
738 | pkix_pl_UnescapeURL(locationAscii); | ||||
739 | |||||
740 | /* Skip "ldap:" */ | ||||
741 | endPos = locationAscii; | ||||
742 | while (*endPos != ':' && *endPos != '\0') { | ||||
743 | endPos++; | ||||
744 | } | ||||
745 | if (*endPos == '\0') { | ||||
746 | PKIX_ERROR(PKIX_GENERALNAMESTRINGMISSINGLOCATIONTYPE){ { if (pkixLoggersErrors) { pkix_Logger_CheckWithCode(pkixLoggersErrors , PKIX_GENERALNAMESTRINGMISSINGLOCATIONTYPE, ((void*)0), stdVars .aPkixType, 2, plContext); } } stdVars.aPkixErrorReceived = ( (PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_GENERALNAMESTRINGMISSINGLOCATIONTYPE ; goto cleanup; }; | ||||
747 | } | ||||
748 | |||||
749 | /* Skip "//" */ | ||||
750 | endPos++; | ||||
751 | if (*endPos != '\0' && *(endPos+1) != '0' && | ||||
752 | *endPos == '/' && *(endPos+1) == '/') { | ||||
753 | endPos += 2; | ||||
754 | } else { | ||||
755 | PKIX_ERROR(PKIX_GENERALNAMESTRINGMISSINGDOUBLESLASH){ { if (pkixLoggersErrors) { pkix_Logger_CheckWithCode(pkixLoggersErrors , PKIX_GENERALNAMESTRINGMISSINGDOUBLESLASH, ((void*)0), stdVars .aPkixType, 2, plContext); } } stdVars.aPkixErrorReceived = ( (PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_GENERALNAMESTRINGMISSINGDOUBLESLASH ; goto cleanup; }; | ||||
756 | } | ||||
757 | |||||
758 | /* Get the server-site */ | ||||
759 | startPos = endPos; | ||||
760 | while(*endPos != '/' && *(endPos) != '\0') { | ||||
761 | endPos++; | ||||
762 | } | ||||
763 | if (*endPos == '\0') { | ||||
764 | PKIX_ERROR(PKIX_GENERALNAMESTRINGMISSINGSERVERSITE){ { if (pkixLoggersErrors) { pkix_Logger_CheckWithCode(pkixLoggersErrors , PKIX_GENERALNAMESTRINGMISSINGSERVERSITE, ((void*)0), stdVars .aPkixType, 2, plContext); } } stdVars.aPkixErrorReceived = ( (PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_GENERALNAMESTRINGMISSINGSERVERSITE ; goto cleanup; }; | ||||
765 | } | ||||
766 | |||||
767 | len = endPos - startPos; | ||||
768 | endPos++; | ||||
769 | |||||
770 | domainName = PORT_ArenaZAllocPORT_ArenaZAlloc_Util(arena, len + 1); | ||||
771 | if (!domainName) { | ||||
772 | 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; }; | ||||
773 | } | ||||
774 | |||||
775 | PORT_Memcpymemcpy(domainName, startPos, len); | ||||
776 | |||||
777 | domainName[len] = '\0'; | ||||
778 | |||||
779 | *pDomainName = domainName; | ||||
780 | |||||
781 | /* | ||||
782 | * Get a list of AttrValueAssertions (such as | ||||
783 | * "cn=CommonName, o=Organization, c=US" into a null-terminated array | ||||
784 | */ | ||||
785 | startPos = endPos; | ||||
786 | PKIX_CHECK(pkix_pl_InfoAccess_ParseTokensdo { stdVars.aPkixErrorResult = (pkix_pl_InfoAccess_ParseTokens (arena, &startPos, (char ***) &avaArray, ',', '?', plContext )); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_INFOACCESSPARSETOKENSFAILED; goto cleanup; } } while ( 0) | ||||
787 | (arena,do { stdVars.aPkixErrorResult = (pkix_pl_InfoAccess_ParseTokens (arena, &startPos, (char ***) &avaArray, ',', '?', plContext )); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_INFOACCESSPARSETOKENSFAILED; goto cleanup; } } while ( 0) | ||||
788 | &startPos,do { stdVars.aPkixErrorResult = (pkix_pl_InfoAccess_ParseTokens (arena, &startPos, (char ***) &avaArray, ',', '?', plContext )); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_INFOACCESSPARSETOKENSFAILED; goto cleanup; } } while ( 0) | ||||
789 | (char ***) &avaArray,do { stdVars.aPkixErrorResult = (pkix_pl_InfoAccess_ParseTokens (arena, &startPos, (char ***) &avaArray, ',', '?', plContext )); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_INFOACCESSPARSETOKENSFAILED; goto cleanup; } } while ( 0) | ||||
790 | ',',do { stdVars.aPkixErrorResult = (pkix_pl_InfoAccess_ParseTokens (arena, &startPos, (char ***) &avaArray, ',', '?', plContext )); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_INFOACCESSPARSETOKENSFAILED; goto cleanup; } } while ( 0) | ||||
791 | '?',do { stdVars.aPkixErrorResult = (pkix_pl_InfoAccess_ParseTokens (arena, &startPos, (char ***) &avaArray, ',', '?', plContext )); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_INFOACCESSPARSETOKENSFAILED; goto cleanup; } } while ( 0) | ||||
792 | plContext),do { stdVars.aPkixErrorResult = (pkix_pl_InfoAccess_ParseTokens (arena, &startPos, (char ***) &avaArray, ',', '?', plContext )); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_INFOACCESSPARSETOKENSFAILED; goto cleanup; } } while ( 0) | ||||
793 | PKIX_INFOACCESSPARSETOKENSFAILED)do { stdVars.aPkixErrorResult = (pkix_pl_InfoAccess_ParseTokens (arena, &startPos, (char ***) &avaArray, ',', '?', plContext )); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_INFOACCESSPARSETOKENSFAILED; goto cleanup; } } while ( 0); | ||||
794 | |||||
795 | /* Count how many AVAs we have */ | ||||
796 | for (len = 0; avaArray[len] != NULL((void*)0); len++) {} | ||||
797 | |||||
798 | if (len
| ||||
799 | PKIX_ERROR(PKIX_NOTENOUGHNAMECOMPONENTSINGENERALNAME){ { if (pkixLoggersErrors) { pkix_Logger_CheckWithCode(pkixLoggersErrors , PKIX_NOTENOUGHNAMECOMPONENTSINGENERALNAME, ((void*)0), stdVars .aPkixType, 2, plContext); } } stdVars.aPkixErrorReceived = ( (PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_NOTENOUGHNAMECOMPONENTSINGENERALNAME ; goto cleanup; }; | ||||
800 | } | ||||
801 | |||||
802 | /* Use last name component for baseObject */ | ||||
803 | request->baseObject = avaArray[len - 1]; | ||||
804 | |||||
805 | /* Use only one component for filter. LDAP servers aren't too smart. */ | ||||
806 | len = 2; /* Eliminate this when servers get smarter. */ | ||||
807 | |||||
808 | avaArray[len - 1] = NULL((void*)0); | ||||
809 | |||||
810 | /* Get room for null-terminated array of (LdapNameComponent *) */ | ||||
811 | setOfNameComponent = PORT_ArenaZNewArray(arena, LDAPNameComponent *, len)(LDAPNameComponent * *)PORT_ArenaZAlloc_Util(arena, sizeof(LDAPNameComponent *) * (len)); | ||||
812 | if (setOfNameComponent == NULL((void*)0)) { | ||||
813 | 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; }; | ||||
814 | } | ||||
815 | |||||
816 | /* Get room for the remaining LdapNameComponents */ | ||||
817 | nameComponent = PORT_ArenaZNewArray(arena, LDAPNameComponent, --len)(LDAPNameComponent *)PORT_ArenaZAlloc_Util(arena, sizeof(LDAPNameComponent ) * (--len)); | ||||
818 | if (nameComponent == NULL((void*)0)) { | ||||
819 | 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; }; | ||||
820 | } | ||||
821 | |||||
822 | /* Convert remaining AVAs to LDAPNameComponents */ | ||||
823 | for (ncIndex = 0; ncIndex < len; ncIndex ++) { | ||||
824 | setOfNameComponent[ncIndex] = nameComponent; | ||||
825 | avaPtr = avaArray[ncIndex]; | ||||
826 | nameComponent->attrType = (unsigned char *)avaPtr; | ||||
827 | while ((*avaPtr != '=') && (*avaPtr != '\0')) { | ||||
828 | avaPtr++; | ||||
829 | if (*avaPtr == '\0') { | ||||
830 | PKIX_ERROR(PKIX_NAMECOMPONENTWITHNOEQ){ { if (pkixLoggersErrors) { pkix_Logger_CheckWithCode(pkixLoggersErrors , PKIX_NAMECOMPONENTWITHNOEQ, ((void*)0), stdVars.aPkixType, 2 , plContext); } } stdVars.aPkixErrorReceived = ((PKIX_Boolean ) 1); stdVars.aPkixErrorCode = PKIX_NAMECOMPONENTWITHNOEQ; goto cleanup; }; | ||||
831 | } | ||||
832 | } | ||||
833 | *(avaPtr++) = '\0'; | ||||
834 | nameComponent->attrValue = (unsigned char *)avaPtr; | ||||
835 | nameComponent++; | ||||
836 | } | ||||
837 | |||||
838 | setOfNameComponent[len] = NULL((void*)0); | ||||
839 | request->nc = setOfNameComponent; | ||||
840 | |||||
841 | /* | ||||
842 | * Get a list of AttrTypes (such as | ||||
843 | * "caCertificate;binary, crossCertificatePair;binary") into | ||||
844 | * a null-terminated array | ||||
845 | */ | ||||
846 | |||||
847 | PKIX_CHECK(pkix_pl_InfoAccess_ParseTokensdo { stdVars.aPkixErrorResult = (pkix_pl_InfoAccess_ParseTokens (arena, (char **) &startPos, (char ***) &attrArray, ',' , '\0', plContext)); if (stdVars.aPkixErrorResult) { stdVars. aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars .aPkixErrorCode = PKIX_INFOACCESSPARSETOKENSFAILED; goto cleanup ; } } while (0) | ||||
848 | (arena,do { stdVars.aPkixErrorResult = (pkix_pl_InfoAccess_ParseTokens (arena, (char **) &startPos, (char ***) &attrArray, ',' , '\0', plContext)); if (stdVars.aPkixErrorResult) { stdVars. aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars .aPkixErrorCode = PKIX_INFOACCESSPARSETOKENSFAILED; goto cleanup ; } } while (0) | ||||
849 | (char **) &startPos,do { stdVars.aPkixErrorResult = (pkix_pl_InfoAccess_ParseTokens (arena, (char **) &startPos, (char ***) &attrArray, ',' , '\0', plContext)); if (stdVars.aPkixErrorResult) { stdVars. aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars .aPkixErrorCode = PKIX_INFOACCESSPARSETOKENSFAILED; goto cleanup ; } } while (0) | ||||
850 | (char ***) &attrArray,do { stdVars.aPkixErrorResult = (pkix_pl_InfoAccess_ParseTokens (arena, (char **) &startPos, (char ***) &attrArray, ',' , '\0', plContext)); if (stdVars.aPkixErrorResult) { stdVars. aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars .aPkixErrorCode = PKIX_INFOACCESSPARSETOKENSFAILED; goto cleanup ; } } while (0) | ||||
851 | ',',do { stdVars.aPkixErrorResult = (pkix_pl_InfoAccess_ParseTokens (arena, (char **) &startPos, (char ***) &attrArray, ',' , '\0', plContext)); if (stdVars.aPkixErrorResult) { stdVars. aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars .aPkixErrorCode = PKIX_INFOACCESSPARSETOKENSFAILED; goto cleanup ; } } while (0) | ||||
852 | '\0',do { stdVars.aPkixErrorResult = (pkix_pl_InfoAccess_ParseTokens (arena, (char **) &startPos, (char ***) &attrArray, ',' , '\0', plContext)); if (stdVars.aPkixErrorResult) { stdVars. aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars .aPkixErrorCode = PKIX_INFOACCESSPARSETOKENSFAILED; goto cleanup ; } } while (0) | ||||
853 | plContext),do { stdVars.aPkixErrorResult = (pkix_pl_InfoAccess_ParseTokens (arena, (char **) &startPos, (char ***) &attrArray, ',' , '\0', plContext)); if (stdVars.aPkixErrorResult) { stdVars. aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars .aPkixErrorCode = PKIX_INFOACCESSPARSETOKENSFAILED; goto cleanup ; } } while (0) | ||||
854 | PKIX_INFOACCESSPARSETOKENSFAILED)do { stdVars.aPkixErrorResult = (pkix_pl_InfoAccess_ParseTokens (arena, (char **) &startPos, (char ***) &attrArray, ',' , '\0', plContext)); if (stdVars.aPkixErrorResult) { stdVars. aPkixErrorClass = stdVars.aPkixErrorResult->errClass; stdVars .aPkixErrorCode = PKIX_INFOACCESSPARSETOKENSFAILED; goto cleanup ; } } while (0); | ||||
855 | |||||
856 | /* Convert array of Attr Types into a bit mask */ | ||||
857 | request->attributes = 0; | ||||
858 | attr = attrArray[0]; | ||||
| |||||
859 | while (attr != NULL((void*)0)) { | ||||
860 | PKIX_CHECK(pkix_pl_LdapRequest_AttrStringToBitdo { stdVars.aPkixErrorResult = (pkix_pl_LdapRequest_AttrStringToBit (attr, &attrBit, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_LDAPREQUESTATTRSTRINGTOBITFAILED ; goto cleanup; } } while (0) | ||||
861 | (attr, &attrBit, plContext),do { stdVars.aPkixErrorResult = (pkix_pl_LdapRequest_AttrStringToBit (attr, &attrBit, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_LDAPREQUESTATTRSTRINGTOBITFAILED ; goto cleanup; } } while (0) | ||||
862 | PKIX_LDAPREQUESTATTRSTRINGTOBITFAILED)do { stdVars.aPkixErrorResult = (pkix_pl_LdapRequest_AttrStringToBit (attr, &attrBit, plContext)); if (stdVars.aPkixErrorResult ) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass ; stdVars.aPkixErrorCode = PKIX_LDAPREQUESTATTRSTRINGTOBITFAILED ; goto cleanup; } } while (0); | ||||
863 | request->attributes |= attrBit; | ||||
864 | attr = *(++attrArray); | ||||
865 | } | ||||
866 | |||||
867 | cleanup: | ||||
868 | |||||
869 | PKIX_PL_Free(locationAscii, plContext); | ||||
870 | PKIX_DECREF(locationString)do { if (locationString){ stdVars.aPkixTempResult = PKIX_PL_Object_DecRef ((PKIX_PL_Object *)(locationString), plContext); if (stdVars .aPkixTempResult) { PKIX_DoAddError(&stdVars, stdVars.aPkixTempResult , plContext); stdVars.aPkixTempResult = ((void*)0); } locationString = ((void*)0); } } while (0); | ||||
871 | |||||
872 | PKIX_RETURN(INFOACCESS)return PKIX_DoReturn(&stdVars, (PKIX_INFOACCESS_ERROR), ( (PKIX_Boolean) 1), plContext);; | ||||
873 | } | ||||
874 | #endif /* !NSS_PKIX_NO_LDAP */ |