Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(16)

Side by Side Diff: mozilla/security/nss/lib/softoken/sftkpars.c

Issue 11362174: Update NSS to NSS 3.14 pre-release snapshot 2012-06-28 01:00:00 PDT. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/nss/
Patch Set: Update the snapshot timestamp in README.chromium Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* This Source Code Form is subject to the terms of the Mozilla Public 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 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/. */ 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4 /* 4 /*
5 * The following code handles the storage of PKCS 11 modules used by the 5 * The following code handles the storage of PKCS 11 modules used by the
6 * NSS. This file is written to abstract away how the modules are 6 * NSS. This file is written to abstract away how the modules are
7 * stored so we can deside that later. 7 * stored so we can deside that later.
8 */ 8 */
9 #include "sftkpars.h"
10 #include "pkcs11i.h" 9 #include "pkcs11i.h"
11 #include "sdb.h" 10 #include "sdb.h"
12 #include "prprf.h" 11 #include "prprf.h"
13 #include "prenv.h" 12 #include "prenv.h"
14 13 #include "utilpars.h"
15 /*
16 * this file contains routines for parsing PKCS #11 module spec
17 * strings.
18 */
19
20 #define SFTK_HANDLE_STRING_ARG(param,target,value,command) \
21 if (PORT_Strncasecmp(param,value,sizeof(value)-1) == 0) { \
22 » param += sizeof(value)-1; \
23 » if (target) \
24 » PORT_Free(target); \
25 » target = sftk_argFetchValue(param,&next); \
26 » param += next; \
27 » command ;\
28 } else
29
30 #define SFTK_HANDLE_FINAL_ARG(param) \
31 { param = sftk_argSkipParameter(param); } param = sftk_argStrip(param);
32
33 static PRBool sftk_argGetPair(char c) {
34 switch (c) {
35 case '\'': return c;
36 case '\"': return c;
37 case '<': return '>';
38 case '{': return '}';
39 case '[': return ']';
40 case '(': return ')';
41 default: break;
42 }
43 return ' ';
44 }
45
46 static PRBool sftk_argIsBlank(char c) {
47 return isspace((unsigned char )c);
48 }
49
50 static PRBool sftk_argIsEscape(char c) {
51 return c == '\\';
52 }
53
54 static PRBool sftk_argIsQuote(char c) {
55 switch (c) {
56 case '\'':
57 case '\"':
58 case '<':
59 case '{': /* } end curly to keep vi bracket matching working */
60 case '(': /* ) */
61 case '[': /* ] */ return PR_TRUE;
62 default: break;
63 }
64 return PR_FALSE;
65 }
66
67 char *sftk_argStrip(char *c) {
68 while (*c && sftk_argIsBlank(*c)) c++;
69 return c;
70 }
71
72 static char *
73 sftk_argFindEnd(char *string) {
74 char endChar = ' ';
75 PRBool lastEscape = PR_FALSE;
76
77 if (sftk_argIsQuote(*string)) {
78 » endChar = sftk_argGetPair(*string);
79 » string++;
80 }
81
82 for (;*string; string++) {
83 » if (lastEscape) {
84 » lastEscape = PR_FALSE;
85 » continue;
86 » }
87 » if (sftk_argIsEscape(*string) && !lastEscape) {
88 » lastEscape = PR_TRUE;
89 » continue;
90 » }
91 » if ((endChar == ' ') && sftk_argIsBlank(*string)) break;
92 » if (*string == endChar) {
93 » break;
94 » }
95 }
96
97 return string;
98 }
99
100 char *
101 sftk_argFetchValue(char *string, int *pcount)
102 {
103 char *end = sftk_argFindEnd(string);
104 char *retString, *copyString;
105 PRBool lastEscape = PR_FALSE;
106 int len;
107
108 len = end - string;
109 if (len == 0) {
110 » *pcount = 0;
111 » return NULL;
112 }
113
114 copyString = retString = (char *)PORT_Alloc(len+1);
115
116 if (*end) len++;
117 *pcount = len;
118 if (retString == NULL) return NULL;
119
120
121 if (sftk_argIsQuote(*string)) string++;
122 for (; string < end; string++) {
123 » if (sftk_argIsEscape(*string) && !lastEscape) {
124 » lastEscape = PR_TRUE;
125 » continue;
126 » }
127 » lastEscape = PR_FALSE;
128 » *copyString++ = *string;
129 }
130 *copyString = 0;
131 return retString;
132 }
133
134 static char *
135 sftk_argSkipParameter(char *string)
136 {
137 char *end;
138 /* look for the end of the <name>= */
139 for (;*string; string++) {
140 » if (*string == '=') { string++; break; }
141 » if (sftk_argIsBlank(*string)) return(string);
142 }
143
144 end = sftk_argFindEnd(string);
145 if (*end) end++;
146 return end;
147 }
148
149 char *
150 sftk_argGetParamValue(char *paramName,char *parameters)
151 {
152 char searchValue[256];
153 int paramLen = strlen(paramName);
154 char *returnValue = NULL;
155 int next;
156
157 if ((parameters == NULL) || (*parameters == 0)) return NULL;
158
159 PORT_Assert(paramLen+2 < sizeof(searchValue));
160
161 PORT_Strcpy(searchValue,paramName);
162 PORT_Strcat(searchValue,"=");
163 while (*parameters) {
164 » if (PORT_Strncasecmp(parameters,searchValue,paramLen+1) == 0) {
165 » parameters += paramLen+1;
166 » returnValue = sftk_argFetchValue(parameters,&next);
167 » break;
168 » } else {
169 » parameters = sftk_argSkipParameter(parameters);
170 » }
171 » parameters = sftk_argStrip(parameters);
172 }
173 return returnValue;
174 }
175
176 static char *
177 sftk_argNextFlag(char *flags)
178 {
179 for (; *flags ; flags++) {
180 » if (*flags == ',') {
181 » flags++;
182 » break;
183 » }
184 }
185 return flags;
186 }
187
188 static PRBool
189 sftk_argHasFlag(char *label, char *flag, char *parameters)
190 {
191 char *flags,*index;
192 int len = strlen(flag);
193 PRBool found = PR_FALSE;
194
195 flags = sftk_argGetParamValue(label,parameters);
196 if (flags == NULL) return PR_FALSE;
197
198 for (index=flags; *index; index=sftk_argNextFlag(index)) {
199 » if (PORT_Strncasecmp(index,flag,len) == 0) {
200 » found=PR_TRUE;
201 » break;
202 » }
203 }
204 PORT_Free(flags);
205 return found;
206 }
207
208 /*
209 * decode a number. handle octal (leading '0'), hex (leading '0x') or decimal
210 */
211 static long
212 sftk_argDecodeNumber(char *num)
213 {
214 int»radix = 10;
215 unsigned long value = 0;
216 long retValue = 0;
217 int sign = 1;
218 int digit;
219
220 if (num == NULL) return retValue;
221
222 num = sftk_argStrip(num);
223
224 if (*num == '-') {
225 » sign = -1;
226 » num++;
227 }
228
229 if (*num == '0') {
230 » radix = 8;
231 » num++;
232 » if ((*num == 'x') || (*num == 'X')) {
233 » radix = 16;
234 » num++;
235 » }
236 }
237
238
239 for ( ;*num; num++ ) {
240 » if (isdigit(*num)) {
241 » digit = *num - '0';
242 » } else if ((*num >= 'a') && (*num <= 'f')) {
243 » digit = *num - 'a' + 10;
244 » } else if ((*num >= 'A') && (*num <= 'F')) {
245 » digit = *num - 'A' + 10;
246 » } else {
247 » break;
248 » }
249 » if (digit >= radix) break;
250 » value = value*radix + digit;
251 }
252
253 retValue = ((int) value) * sign;
254 return retValue;
255 }
256
257 static char *
258 sftk_argGetName(char *inString, int *next)
259 {
260 char *name=NULL;
261 char *string;
262 int len;
263
264 /* look for the end of the <name>= */
265 for (string = inString;*string; string++) {
266 » if (*string == '=') { break; }
267 » if (sftk_argIsBlank(*string)) break;
268 }
269
270 len = string - inString;
271
272 *next = len;
273 if (*string == '=') (*next) += 1;
274 if (len > 0) {
275 » name = PORT_Alloc(len+1);
276 » PORT_Strncpy(name,inString,len);
277 » name[len] = 0;
278 }
279 return name;
280 }
281 14
282 #define FREE_CLEAR(p) if (p) { PORT_Free(p); p = NULL; } 15 #define FREE_CLEAR(p) if (p) { PORT_Free(p); p = NULL; }
283 16
284 static void 17 static void
285 sftk_parseTokenFlags(char *tmp, sftk_token_parameters *parsed) { 18 sftk_parseTokenFlags(char *tmp, sftk_token_parameters *parsed) {
286 parsed->readOnly = sftk_argHasFlag("flags","readOnly",tmp); 19 parsed->readOnly = NSSUTIL_ArgHasFlag("flags","readOnly",tmp);
287 parsed->noCertDB = sftk_argHasFlag("flags","noCertDB",tmp); 20 parsed->noCertDB = NSSUTIL_ArgHasFlag("flags","noCertDB",tmp);
288 parsed->noKeyDB = sftk_argHasFlag("flags","noKeyDB",tmp); 21 parsed->noKeyDB = NSSUTIL_ArgHasFlag("flags","noKeyDB",tmp);
289 parsed->forceOpen = sftk_argHasFlag("flags","forceOpen",tmp); 22 parsed->forceOpen = NSSUTIL_ArgHasFlag("flags","forceOpen",tmp);
290 parsed->pwRequired = sftk_argHasFlag("flags","passwordRequired",tmp); 23 parsed->pwRequired = NSSUTIL_ArgHasFlag("flags","passwordRequired",tmp);
291 parsed->optimizeSpace = sftk_argHasFlag("flags","optimizeSpace",tmp); 24 parsed->optimizeSpace = NSSUTIL_ArgHasFlag("flags","optimizeSpace",tmp);
292 return; 25 return;
293 } 26 }
294 27
295 static void 28 static void
296 sftk_parseFlags(char *tmp, sftk_parameters *parsed) { 29 sftk_parseFlags(char *tmp, sftk_parameters *parsed) {
297 parsed->noModDB = sftk_argHasFlag("flags","noModDB",tmp); 30 parsed->noModDB = NSSUTIL_ArgHasFlag("flags","noModDB",tmp);
298 parsed->readOnly = sftk_argHasFlag("flags","readOnly",tmp); 31 parsed->readOnly = NSSUTIL_ArgHasFlag("flags","readOnly",tmp);
299 /* keep legacy interface working */ 32 /* keep legacy interface working */
300 parsed->noCertDB = sftk_argHasFlag("flags","noCertDB",tmp); 33 parsed->noCertDB = NSSUTIL_ArgHasFlag("flags","noCertDB",tmp);
301 parsed->forceOpen = sftk_argHasFlag("flags","forceOpen",tmp); 34 parsed->forceOpen = NSSUTIL_ArgHasFlag("flags","forceOpen",tmp);
302 parsed->pwRequired = sftk_argHasFlag("flags","passwordRequired",tmp); 35 parsed->pwRequired = NSSUTIL_ArgHasFlag("flags","passwordRequired",tmp);
303 parsed->optimizeSpace = sftk_argHasFlag("flags","optimizeSpace",tmp); 36 parsed->optimizeSpace = NSSUTIL_ArgHasFlag("flags","optimizeSpace",tmp);
304 return; 37 return;
305 } 38 }
306 39
307 static CK_RV 40 static CK_RV
308 sftk_parseTokenParameters(char *param, sftk_token_parameters *parsed) 41 sftk_parseTokenParameters(char *param, sftk_token_parameters *parsed)
309 { 42 {
310 int next; 43 int next;
311 char *tmp = NULL; 44 char *tmp = NULL;
312 char *index; 45 char *index;
313 index = sftk_argStrip(param); 46 index = NSSUTIL_ArgStrip(param);
314 47
315 while (*index) { 48 while (*index) {
316 » SFTK_HANDLE_STRING_ARG(index,parsed->configdir,"configDir=",;) 49 » NSSUTIL_HANDLE_STRING_ARG(index,parsed->configdir,"configDir=",;)
317 » SFTK_HANDLE_STRING_ARG(index,parsed->updatedir,"updateDir=",;) 50 » NSSUTIL_HANDLE_STRING_ARG(index,parsed->updatedir,"updateDir=",;)
318 » SFTK_HANDLE_STRING_ARG(index,parsed->updCertPrefix,"updateCertPrefix=",; ) 51 » NSSUTIL_HANDLE_STRING_ARG(index,parsed->updCertPrefix,
319 » SFTK_HANDLE_STRING_ARG(index,parsed->updKeyPrefix,"updateKeyPrefix=",;) 52 » » » » » » "updateCertPrefix=",;)
320 » SFTK_HANDLE_STRING_ARG(index,parsed->updateID,"updateID=",;) 53 » NSSUTIL_HANDLE_STRING_ARG(index,parsed->updKeyPrefix,
321 » SFTK_HANDLE_STRING_ARG(index,parsed->certPrefix,"certPrefix=",;) 54 » » » » » » "updateKeyPrefix=",;)
322 » SFTK_HANDLE_STRING_ARG(index,parsed->keyPrefix,"keyPrefix=",;) 55 » NSSUTIL_HANDLE_STRING_ARG(index,parsed->updateID,"updateID=",;)
323 » SFTK_HANDLE_STRING_ARG(index,parsed->tokdes,"tokenDescription=",;) 56 » NSSUTIL_HANDLE_STRING_ARG(index,parsed->certPrefix,"certPrefix=",;)
324 » SFTK_HANDLE_STRING_ARG(index,parsed->updtokdes, 57 » NSSUTIL_HANDLE_STRING_ARG(index,parsed->keyPrefix,"keyPrefix=",;)
58 » NSSUTIL_HANDLE_STRING_ARG(index,parsed->tokdes,"tokenDescription=",;)
59 » NSSUTIL_HANDLE_STRING_ARG(index,parsed->updtokdes,
325 "updateTokenDescription=",;) 60 "updateTokenDescription=",;)
326 » SFTK_HANDLE_STRING_ARG(index,parsed->slotdes,"slotDescription=",;) 61 » NSSUTIL_HANDLE_STRING_ARG(index,parsed->slotdes,"slotDescription=",;)
327 » SFTK_HANDLE_STRING_ARG(index,tmp,"minPWLen=", 62 » NSSUTIL_HANDLE_STRING_ARG(index,tmp,"minPWLen=",
328 if(tmp) { parsed->minPW=atoi(tmp); PORT_Free(tmp); tmp = NULL; }) 63 if(tmp) { parsed->minPW=atoi(tmp); PORT_Free(tmp); tmp = NULL; })
329 » SFTK_HANDLE_STRING_ARG(index,tmp,"flags=", 64 » NSSUTIL_HANDLE_STRING_ARG(index,tmp,"flags=",
330 » if(tmp) { sftk_parseTokenFlags(param,parsed); PORT_Free(tmp); tmp = N ULL; }) 65 » if(tmp) { sftk_parseTokenFlags(param,parsed); PORT_Free(tmp);
331 » SFTK_HANDLE_FINAL_ARG(index) 66 » » tmp = NULL; })
67 » NSSUTIL_HANDLE_FINAL_ARG(index)
332 } 68 }
333 return CKR_OK; 69 return CKR_OK;
334 } 70 }
335 71
336 static void 72 static void
337 sftk_parseTokens(char *tokenParams, sftk_parameters *parsed) 73 sftk_parseTokens(char *tokenParams, sftk_parameters *parsed)
338 { 74 {
339 char *tokenIndex; 75 char *tokenIndex;
340 sftk_token_parameters *tokens = NULL; 76 sftk_token_parameters *tokens = NULL;
341 int i=0,count = 0,next; 77 int i=0,count = 0,next;
342 78
343 if ((tokenParams == NULL) || (*tokenParams == 0)) return; 79 if ((tokenParams == NULL) || (*tokenParams == 0)) return;
344 80
345 /* first count the number of slots */ 81 /* first count the number of slots */
346 for (tokenIndex = sftk_argStrip(tokenParams); *tokenIndex; 82 for (tokenIndex = NSSUTIL_ArgStrip(tokenParams); *tokenIndex;
347 » tokenIndex = sftk_argStrip(sftk_argSkipParameter(tokenIndex))) { 83 » tokenIndex = NSSUTIL_ArgStrip(NSSUTIL_ArgSkipParameter(tokenIndex))) {
348 count++; 84 count++;
349 } 85 }
350 86
351 /* get the data structures */ 87 /* get the data structures */
352 tokens = (sftk_token_parameters *) 88 tokens = (sftk_token_parameters *)
353 PORT_ZAlloc(count*sizeof(sftk_token_parameters)); 89 PORT_ZAlloc(count*sizeof(sftk_token_parameters));
354 if (tokens == NULL) return; 90 if (tokens == NULL) return;
355 91
356 for (tokenIndex = sftk_argStrip(tokenParams), i = 0; 92 for (tokenIndex = NSSUTIL_ArgStrip(tokenParams), i = 0;
357 *tokenIndex && i < count ; i++ ) { 93 *tokenIndex && i < count ; i++ ) {
358 char *name; 94 char *name;
359 » name = sftk_argGetName(tokenIndex,&next); 95 » name = NSSUTIL_ArgGetLabel(tokenIndex,&next);
360 tokenIndex += next; 96 tokenIndex += next;
361 97
362 » tokens[i].slotID = sftk_argDecodeNumber(name); 98 » tokens[i].slotID = NSSUTIL_ArgDecodeNumber(name);
363 tokens[i].readOnly = PR_FALSE; 99 tokens[i].readOnly = PR_FALSE;
364 tokens[i].noCertDB = PR_FALSE; 100 tokens[i].noCertDB = PR_FALSE;
365 tokens[i].noKeyDB = PR_FALSE; 101 tokens[i].noKeyDB = PR_FALSE;
366 » if (!sftk_argIsBlank(*tokenIndex)) { 102 » if (!NSSUTIL_ArgIsBlank(*tokenIndex)) {
367 » char *args = sftk_argFetchValue(tokenIndex,&next); 103 » char *args = NSSUTIL_ArgFetchValue(tokenIndex,&next);
368 tokenIndex += next; 104 tokenIndex += next;
369 if (args) { 105 if (args) {
370 sftk_parseTokenParameters(args,&tokens[i]); 106 sftk_parseTokenParameters(args,&tokens[i]);
371 PORT_Free(args); 107 PORT_Free(args);
372 } 108 }
373 } 109 }
374 if (name) PORT_Free(name); 110 if (name) PORT_Free(name);
375 » tokenIndex = sftk_argStrip(tokenIndex); 111 » tokenIndex = NSSUTIL_ArgStrip(tokenIndex);
376 } 112 }
377 parsed->token_count = i; 113 parsed->token_count = i;
378 parsed->tokens = tokens; 114 parsed->tokens = tokens;
379 return; 115 return;
380 } 116 }
381 117
382 CK_RV 118 CK_RV
383 sftk_parseParameters(char *param, sftk_parameters *parsed, PRBool isFIPS) 119 sftk_parseParameters(char *param, sftk_parameters *parsed, PRBool isFIPS)
384 { 120 {
385 int next; 121 int next;
386 char *tmp = NULL; 122 char *tmp = NULL;
387 char *index; 123 char *index;
388 char *certPrefix = NULL, *keyPrefix = NULL; 124 char *certPrefix = NULL, *keyPrefix = NULL;
389 char *tokdes = NULL, *ptokdes = NULL, *pupdtokdes = NULL; 125 char *tokdes = NULL, *ptokdes = NULL, *pupdtokdes = NULL;
390 char *slotdes = NULL, *pslotdes = NULL; 126 char *slotdes = NULL, *pslotdes = NULL;
391 char *fslotdes = NULL, *ftokdes = NULL; 127 char *fslotdes = NULL, *ftokdes = NULL;
392 char *minPW = NULL; 128 char *minPW = NULL;
393 index = sftk_argStrip(param); 129 index = NSSUTIL_ArgStrip(param);
394 130
395 PORT_Memset(parsed, 0, sizeof(sftk_parameters)); 131 PORT_Memset(parsed, 0, sizeof(sftk_parameters));
396 132
397 while (*index) { 133 while (*index) {
398 » SFTK_HANDLE_STRING_ARG(index,parsed->configdir,"configDir=",;) 134 » NSSUTIL_HANDLE_STRING_ARG(index,parsed->configdir,"configDir=",;)
399 » SFTK_HANDLE_STRING_ARG(index,parsed->updatedir,"updateDir=",;) 135 » NSSUTIL_HANDLE_STRING_ARG(index,parsed->updatedir,"updateDir=",;)
400 » SFTK_HANDLE_STRING_ARG(index,parsed->updateID,"updateID=",;) 136 » NSSUTIL_HANDLE_STRING_ARG(index,parsed->updateID,"updateID=",;)
401 » SFTK_HANDLE_STRING_ARG(index,parsed->secmodName,"secmod=",;) 137 » NSSUTIL_HANDLE_STRING_ARG(index,parsed->secmodName,"secmod=",;)
402 » SFTK_HANDLE_STRING_ARG(index,parsed->man,"manufacturerID=",;) 138 » NSSUTIL_HANDLE_STRING_ARG(index,parsed->man,"manufacturerID=",;)
403 » SFTK_HANDLE_STRING_ARG(index,parsed->libdes,"libraryDescription=",;) 139 » NSSUTIL_HANDLE_STRING_ARG(index,parsed->libdes,"libraryDescription=",;)
404 /* constructed values, used so legacy interfaces still work */ 140 /* constructed values, used so legacy interfaces still work */
405 » SFTK_HANDLE_STRING_ARG(index,certPrefix,"certPrefix=",;) 141 » NSSUTIL_HANDLE_STRING_ARG(index,certPrefix,"certPrefix=",;)
406 SFTK_HANDLE_STRING_ARG(index,keyPrefix,"keyPrefix=",;) 142 NSSUTIL_HANDLE_STRING_ARG(index,keyPrefix,"keyPrefix=",;)
407 SFTK_HANDLE_STRING_ARG(index,tokdes,"cryptoTokenDescription=",;) 143 NSSUTIL_HANDLE_STRING_ARG(index,tokdes,"cryptoTokenDescription=",;)
408 SFTK_HANDLE_STRING_ARG(index,ptokdes,"dbTokenDescription=",;) 144 NSSUTIL_HANDLE_STRING_ARG(index,ptokdes,"dbTokenDescription=",;)
409 SFTK_HANDLE_STRING_ARG(index,slotdes,"cryptoSlotDescription=",;) 145 NSSUTIL_HANDLE_STRING_ARG(index,slotdes,"cryptoSlotDescription=",;)
410 SFTK_HANDLE_STRING_ARG(index,pslotdes,"dbSlotDescription=",;) 146 NSSUTIL_HANDLE_STRING_ARG(index,pslotdes,"dbSlotDescription=",;)
411 SFTK_HANDLE_STRING_ARG(index,fslotdes,"FIPSSlotDescription=",;) 147 NSSUTIL_HANDLE_STRING_ARG(index,fslotdes,"FIPSSlotDescription=",;)
412 SFTK_HANDLE_STRING_ARG(index,ftokdes,"FIPSTokenDescription=",;) 148 NSSUTIL_HANDLE_STRING_ARG(index,ftokdes,"FIPSTokenDescription=",;)
413 » SFTK_HANDLE_STRING_ARG(index,pupdtokdes, "updateTokenDescription=",;) 149 » NSSUTIL_HANDLE_STRING_ARG(index,pupdtokdes, "updateTokenDescription=",;)
414 » SFTK_HANDLE_STRING_ARG(index,minPW,"minPWLen=",;) 150 » NSSUTIL_HANDLE_STRING_ARG(index,minPW,"minPWLen=",;)
415 151
416 » SFTK_HANDLE_STRING_ARG(index,tmp,"flags=", 152 » NSSUTIL_HANDLE_STRING_ARG(index,tmp,"flags=",
417 » » if(tmp) { sftk_parseFlags(param,parsed); PORT_Free(tmp); tmp = N ULL; }) 153 » » if(tmp) { sftk_parseFlags(param,parsed); PORT_Free(tmp);
418 » SFTK_HANDLE_STRING_ARG(index,tmp,"tokens=", 154 » » » tmp = NULL; })
419 » » if(tmp) { sftk_parseTokens(tmp,parsed); PORT_Free(tmp); tmp = NU LL; }) 155 » NSSUTIL_HANDLE_STRING_ARG(index,tmp,"tokens=",
420 » SFTK_HANDLE_FINAL_ARG(index) 156 » » if(tmp) { sftk_parseTokens(tmp,parsed); PORT_Free(tmp); » » » » tmp = NULL; })
157 » NSSUTIL_HANDLE_FINAL_ARG(index)
421 } 158 }
422 if (parsed->tokens == NULL) { 159 if (parsed->tokens == NULL) {
423 int count = isFIPS ? 1 : 2; 160 int count = isFIPS ? 1 : 2;
424 int index = count-1; 161 int index = count-1;
425 sftk_token_parameters *tokens = NULL; 162 sftk_token_parameters *tokens = NULL;
426 163
427 tokens = (sftk_token_parameters *) 164 tokens = (sftk_token_parameters *)
428 PORT_ZAlloc(count*sizeof(sftk_token_parameters)); 165 PORT_ZAlloc(count*sizeof(sftk_token_parameters));
429 if (tokens == NULL) { 166 if (tokens == NULL) {
430 goto loser; 167 goto loser;
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 239
503 FREE_CLEAR(params->configdir); 240 FREE_CLEAR(params->configdir);
504 FREE_CLEAR(params->secmodName); 241 FREE_CLEAR(params->secmodName);
505 FREE_CLEAR(params->man); 242 FREE_CLEAR(params->man);
506 FREE_CLEAR(params->libdes); 243 FREE_CLEAR(params->libdes);
507 FREE_CLEAR(params->tokens); 244 FREE_CLEAR(params->tokens);
508 FREE_CLEAR(params->updatedir); 245 FREE_CLEAR(params->updatedir);
509 FREE_CLEAR(params->updateID); 246 FREE_CLEAR(params->updateID);
510 } 247 }
511 248
512 #define SQLDB "sql:"
513 #define EXTERNDB "extern:"
514 #define LEGACY "dbm:"
515 const char *
516 sftk_EvaluateConfigDir(const char *configdir, SDBType *dbType, char **appName)
517 {
518 *appName = NULL;
519 #ifdef NSS_DISABLE_DBM
520 *dbType = SDB_SQL;
521 #else
522 *dbType = SDB_LEGACY;
523 #endif
524 if (PORT_Strncmp(configdir, MULTIACCESS, sizeof(MULTIACCESS)-1) == 0) {
525 char *cdir;
526 *dbType = SDB_MULTIACCESS;
527
528 *appName = PORT_Strdup(configdir+sizeof(MULTIACCESS)-1);
529 if (*appName == NULL) {
530 return configdir;
531 }
532 cdir = *appName;
533 while (*cdir && *cdir != ':') {
534 cdir++;
535 }
536 if (*cdir == ':') {
537 *cdir = 0;
538 cdir++;
539 }
540 configdir = cdir;
541 } else if (PORT_Strncmp(configdir, SQLDB, sizeof(SQLDB)-1) == 0) {
542 *dbType = SDB_SQL;
543 configdir = configdir + sizeof(SQLDB) -1;
544 } else if (PORT_Strncmp(configdir, EXTERNDB, sizeof(EXTERNDB)-1) == 0) {
545 *dbType = SDB_EXTERN;
546 configdir = configdir + sizeof(EXTERNDB) -1;
547 } else if (PORT_Strncmp(configdir, LEGACY, sizeof(LEGACY)-1) == 0) {
548 *dbType = SDB_LEGACY;
549 configdir = configdir + sizeof(LEGACY) -1;
550 } else {
551 /* look up the default from the environment */
552 char *defaultType = PR_GetEnv("NSS_DEFAULT_DB_TYPE");
553 if (defaultType == NULL) {
554 /* none specified, go with the legacy */
555 return configdir;
556 }
557 if (PORT_Strncmp(defaultType, SQLDB, sizeof(SQLDB)-2) == 0) {
558 *dbType = SDB_SQL;
559 } else if (PORT_Strncmp(defaultType,EXTERNDB,sizeof(EXTERNDB)-2)==0) {
560 *dbType = SDB_EXTERN;
561 } else if (PORT_Strncmp(defaultType, LEGACY, sizeof(LEGACY)-2) == 0) {
562 *dbType = SDB_LEGACY;
563 }
564 }
565 return configdir;
566 }
567
568 char *
569 sftk_getSecmodName(char *param, SDBType *dbType, char **appName,
570 char **filename, PRBool *rw)
571 {
572 int next;
573 char *configdir = NULL;
574 char *secmodName = NULL;
575 char *value = NULL;
576 char *save_params = param;
577 const char *lconfigdir;
578 PRBool noModDB = PR_FALSE;
579 param = sftk_argStrip(param);
580
581
582 while (*param) {
583 SFTK_HANDLE_STRING_ARG(param,configdir,"configDir=",;)
584 SFTK_HANDLE_STRING_ARG(param,secmodName,"secmod=",;)
585 SFTK_HANDLE_FINAL_ARG(param)
586 }
587
588 *rw = PR_TRUE;
589 if (sftk_argHasFlag("flags","readOnly",save_params)) {
590 *rw = PR_FALSE;
591 }
592
593 if (!secmodName || *secmodName == '\0') {
594 if (secmodName) PORT_Free(secmodName);
595 secmodName = PORT_Strdup(SECMOD_DB);
596 }
597
598 *filename = secmodName;
599 lconfigdir = sftk_EvaluateConfigDir(configdir, dbType, appName);
600
601 if (sftk_argHasFlag("flags","noModDB",save_params)) {
602 /* there isn't a module db, don't load the legacy support */
603 noModDB = PR_TRUE;
604 *dbType = SDB_SQL;
605 PORT_Free(*filename);
606 *filename = NULL;
607 *rw = PR_FALSE;
608 }
609
610 /* only use the renamed secmod for legacy databases */
611 if ((*dbType != SDB_LEGACY) && (*dbType != SDB_MULTIACCESS)) {
612 secmodName="pkcs11.txt";
613 }
614
615 if (noModDB) {
616 value = NULL;
617 } else if (lconfigdir && lconfigdir[0] != '\0') {
618 value = PR_smprintf("%s" PATH_SEPARATOR "%s",lconfigdir,secmodName);
619 } else {
620 value = PR_smprintf("%s",secmodName);
621 }
622 if (configdir) PORT_Free(configdir);
623 return value;
624 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698