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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: mozilla/security/nss/lib/softoken/sftkpars.c
===================================================================
--- mozilla/security/nss/lib/softoken/sftkpars.c (revision 166571)
+++ mozilla/security/nss/lib/softoken/sftkpars.c (working copy)
@@ -6,301 +6,34 @@
* NSS. This file is written to abstract away how the modules are
* stored so we can deside that later.
*/
-#include "sftkpars.h"
#include "pkcs11i.h"
#include "sdb.h"
#include "prprf.h"
#include "prenv.h"
+#include "utilpars.h"
-/*
- * this file contains routines for parsing PKCS #11 module spec
- * strings.
- */
-
-#define SFTK_HANDLE_STRING_ARG(param,target,value,command) \
- if (PORT_Strncasecmp(param,value,sizeof(value)-1) == 0) { \
- param += sizeof(value)-1; \
- if (target) \
- PORT_Free(target); \
- target = sftk_argFetchValue(param,&next); \
- param += next; \
- command ;\
- } else
-
-#define SFTK_HANDLE_FINAL_ARG(param) \
- { param = sftk_argSkipParameter(param); } param = sftk_argStrip(param);
-
-static PRBool sftk_argGetPair(char c) {
- switch (c) {
- case '\'': return c;
- case '\"': return c;
- case '<': return '>';
- case '{': return '}';
- case '[': return ']';
- case '(': return ')';
- default: break;
- }
- return ' ';
-}
-
-static PRBool sftk_argIsBlank(char c) {
- return isspace((unsigned char )c);
-}
-
-static PRBool sftk_argIsEscape(char c) {
- return c == '\\';
-}
-
-static PRBool sftk_argIsQuote(char c) {
- switch (c) {
- case '\'':
- case '\"':
- case '<':
- case '{': /* } end curly to keep vi bracket matching working */
- case '(': /* ) */
- case '[': /* ] */ return PR_TRUE;
- default: break;
- }
- return PR_FALSE;
-}
-
-char *sftk_argStrip(char *c) {
- while (*c && sftk_argIsBlank(*c)) c++;
- return c;
-}
-
-static char *
-sftk_argFindEnd(char *string) {
- char endChar = ' ';
- PRBool lastEscape = PR_FALSE;
-
- if (sftk_argIsQuote(*string)) {
- endChar = sftk_argGetPair(*string);
- string++;
- }
-
- for (;*string; string++) {
- if (lastEscape) {
- lastEscape = PR_FALSE;
- continue;
- }
- if (sftk_argIsEscape(*string) && !lastEscape) {
- lastEscape = PR_TRUE;
- continue;
- }
- if ((endChar == ' ') && sftk_argIsBlank(*string)) break;
- if (*string == endChar) {
- break;
- }
- }
-
- return string;
-}
-
-char *
-sftk_argFetchValue(char *string, int *pcount)
-{
- char *end = sftk_argFindEnd(string);
- char *retString, *copyString;
- PRBool lastEscape = PR_FALSE;
- int len;
-
- len = end - string;
- if (len == 0) {
- *pcount = 0;
- return NULL;
- }
-
- copyString = retString = (char *)PORT_Alloc(len+1);
-
- if (*end) len++;
- *pcount = len;
- if (retString == NULL) return NULL;
-
-
- if (sftk_argIsQuote(*string)) string++;
- for (; string < end; string++) {
- if (sftk_argIsEscape(*string) && !lastEscape) {
- lastEscape = PR_TRUE;
- continue;
- }
- lastEscape = PR_FALSE;
- *copyString++ = *string;
- }
- *copyString = 0;
- return retString;
-}
-
-static char *
-sftk_argSkipParameter(char *string)
-{
- char *end;
- /* look for the end of the <name>= */
- for (;*string; string++) {
- if (*string == '=') { string++; break; }
- if (sftk_argIsBlank(*string)) return(string);
- }
-
- end = sftk_argFindEnd(string);
- if (*end) end++;
- return end;
-}
-
-char *
-sftk_argGetParamValue(char *paramName,char *parameters)
-{
- char searchValue[256];
- int paramLen = strlen(paramName);
- char *returnValue = NULL;
- int next;
-
- if ((parameters == NULL) || (*parameters == 0)) return NULL;
-
- PORT_Assert(paramLen+2 < sizeof(searchValue));
-
- PORT_Strcpy(searchValue,paramName);
- PORT_Strcat(searchValue,"=");
- while (*parameters) {
- if (PORT_Strncasecmp(parameters,searchValue,paramLen+1) == 0) {
- parameters += paramLen+1;
- returnValue = sftk_argFetchValue(parameters,&next);
- break;
- } else {
- parameters = sftk_argSkipParameter(parameters);
- }
- parameters = sftk_argStrip(parameters);
- }
- return returnValue;
-}
-
-static char *
-sftk_argNextFlag(char *flags)
-{
- for (; *flags ; flags++) {
- if (*flags == ',') {
- flags++;
- break;
- }
- }
- return flags;
-}
-
-static PRBool
-sftk_argHasFlag(char *label, char *flag, char *parameters)
-{
- char *flags,*index;
- int len = strlen(flag);
- PRBool found = PR_FALSE;
-
- flags = sftk_argGetParamValue(label,parameters);
- if (flags == NULL) return PR_FALSE;
-
- for (index=flags; *index; index=sftk_argNextFlag(index)) {
- if (PORT_Strncasecmp(index,flag,len) == 0) {
- found=PR_TRUE;
- break;
- }
- }
- PORT_Free(flags);
- return found;
-}
-
-/*
- * decode a number. handle octal (leading '0'), hex (leading '0x') or decimal
- */
-static long
-sftk_argDecodeNumber(char *num)
-{
- int radix = 10;
- unsigned long value = 0;
- long retValue = 0;
- int sign = 1;
- int digit;
-
- if (num == NULL) return retValue;
-
- num = sftk_argStrip(num);
-
- if (*num == '-') {
- sign = -1;
- num++;
- }
-
- if (*num == '0') {
- radix = 8;
- num++;
- if ((*num == 'x') || (*num == 'X')) {
- radix = 16;
- num++;
- }
- }
-
-
- for ( ;*num; num++ ) {
- if (isdigit(*num)) {
- digit = *num - '0';
- } else if ((*num >= 'a') && (*num <= 'f')) {
- digit = *num - 'a' + 10;
- } else if ((*num >= 'A') && (*num <= 'F')) {
- digit = *num - 'A' + 10;
- } else {
- break;
- }
- if (digit >= radix) break;
- value = value*radix + digit;
- }
-
- retValue = ((int) value) * sign;
- return retValue;
-}
-
-static char *
-sftk_argGetName(char *inString, int *next)
-{
- char *name=NULL;
- char *string;
- int len;
-
- /* look for the end of the <name>= */
- for (string = inString;*string; string++) {
- if (*string == '=') { break; }
- if (sftk_argIsBlank(*string)) break;
- }
-
- len = string - inString;
-
- *next = len;
- if (*string == '=') (*next) += 1;
- if (len > 0) {
- name = PORT_Alloc(len+1);
- PORT_Strncpy(name,inString,len);
- name[len] = 0;
- }
- return name;
-}
-
#define FREE_CLEAR(p) if (p) { PORT_Free(p); p = NULL; }
static void
sftk_parseTokenFlags(char *tmp, sftk_token_parameters *parsed) {
- parsed->readOnly = sftk_argHasFlag("flags","readOnly",tmp);
- parsed->noCertDB = sftk_argHasFlag("flags","noCertDB",tmp);
- parsed->noKeyDB = sftk_argHasFlag("flags","noKeyDB",tmp);
- parsed->forceOpen = sftk_argHasFlag("flags","forceOpen",tmp);
- parsed->pwRequired = sftk_argHasFlag("flags","passwordRequired",tmp);
- parsed->optimizeSpace = sftk_argHasFlag("flags","optimizeSpace",tmp);
+ parsed->readOnly = NSSUTIL_ArgHasFlag("flags","readOnly",tmp);
+ parsed->noCertDB = NSSUTIL_ArgHasFlag("flags","noCertDB",tmp);
+ parsed->noKeyDB = NSSUTIL_ArgHasFlag("flags","noKeyDB",tmp);
+ parsed->forceOpen = NSSUTIL_ArgHasFlag("flags","forceOpen",tmp);
+ parsed->pwRequired = NSSUTIL_ArgHasFlag("flags","passwordRequired",tmp);
+ parsed->optimizeSpace = NSSUTIL_ArgHasFlag("flags","optimizeSpace",tmp);
return;
}
static void
sftk_parseFlags(char *tmp, sftk_parameters *parsed) {
- parsed->noModDB = sftk_argHasFlag("flags","noModDB",tmp);
- parsed->readOnly = sftk_argHasFlag("flags","readOnly",tmp);
+ parsed->noModDB = NSSUTIL_ArgHasFlag("flags","noModDB",tmp);
+ parsed->readOnly = NSSUTIL_ArgHasFlag("flags","readOnly",tmp);
/* keep legacy interface working */
- parsed->noCertDB = sftk_argHasFlag("flags","noCertDB",tmp);
- parsed->forceOpen = sftk_argHasFlag("flags","forceOpen",tmp);
- parsed->pwRequired = sftk_argHasFlag("flags","passwordRequired",tmp);
- parsed->optimizeSpace = sftk_argHasFlag("flags","optimizeSpace",tmp);
+ parsed->noCertDB = NSSUTIL_ArgHasFlag("flags","noCertDB",tmp);
+ parsed->forceOpen = NSSUTIL_ArgHasFlag("flags","forceOpen",tmp);
+ parsed->pwRequired = NSSUTIL_ArgHasFlag("flags","passwordRequired",tmp);
+ parsed->optimizeSpace = NSSUTIL_ArgHasFlag("flags","optimizeSpace",tmp);
return;
}
@@ -310,25 +43,28 @@
int next;
char *tmp = NULL;
char *index;
- index = sftk_argStrip(param);
+ index = NSSUTIL_ArgStrip(param);
while (*index) {
- SFTK_HANDLE_STRING_ARG(index,parsed->configdir,"configDir=",;)
- SFTK_HANDLE_STRING_ARG(index,parsed->updatedir,"updateDir=",;)
- SFTK_HANDLE_STRING_ARG(index,parsed->updCertPrefix,"updateCertPrefix=",;)
- SFTK_HANDLE_STRING_ARG(index,parsed->updKeyPrefix,"updateKeyPrefix=",;)
- SFTK_HANDLE_STRING_ARG(index,parsed->updateID,"updateID=",;)
- SFTK_HANDLE_STRING_ARG(index,parsed->certPrefix,"certPrefix=",;)
- SFTK_HANDLE_STRING_ARG(index,parsed->keyPrefix,"keyPrefix=",;)
- SFTK_HANDLE_STRING_ARG(index,parsed->tokdes,"tokenDescription=",;)
- SFTK_HANDLE_STRING_ARG(index,parsed->updtokdes,
+ NSSUTIL_HANDLE_STRING_ARG(index,parsed->configdir,"configDir=",;)
+ NSSUTIL_HANDLE_STRING_ARG(index,parsed->updatedir,"updateDir=",;)
+ NSSUTIL_HANDLE_STRING_ARG(index,parsed->updCertPrefix,
+ "updateCertPrefix=",;)
+ NSSUTIL_HANDLE_STRING_ARG(index,parsed->updKeyPrefix,
+ "updateKeyPrefix=",;)
+ NSSUTIL_HANDLE_STRING_ARG(index,parsed->updateID,"updateID=",;)
+ NSSUTIL_HANDLE_STRING_ARG(index,parsed->certPrefix,"certPrefix=",;)
+ NSSUTIL_HANDLE_STRING_ARG(index,parsed->keyPrefix,"keyPrefix=",;)
+ NSSUTIL_HANDLE_STRING_ARG(index,parsed->tokdes,"tokenDescription=",;)
+ NSSUTIL_HANDLE_STRING_ARG(index,parsed->updtokdes,
"updateTokenDescription=",;)
- SFTK_HANDLE_STRING_ARG(index,parsed->slotdes,"slotDescription=",;)
- SFTK_HANDLE_STRING_ARG(index,tmp,"minPWLen=",
+ NSSUTIL_HANDLE_STRING_ARG(index,parsed->slotdes,"slotDescription=",;)
+ NSSUTIL_HANDLE_STRING_ARG(index,tmp,"minPWLen=",
if(tmp) { parsed->minPW=atoi(tmp); PORT_Free(tmp); tmp = NULL; })
- SFTK_HANDLE_STRING_ARG(index,tmp,"flags=",
- if(tmp) { sftk_parseTokenFlags(param,parsed); PORT_Free(tmp); tmp = NULL; })
- SFTK_HANDLE_FINAL_ARG(index)
+ NSSUTIL_HANDLE_STRING_ARG(index,tmp,"flags=",
+ if(tmp) { sftk_parseTokenFlags(param,parsed); PORT_Free(tmp);
+ tmp = NULL; })
+ NSSUTIL_HANDLE_FINAL_ARG(index)
}
return CKR_OK;
}
@@ -343,8 +79,8 @@
if ((tokenParams == NULL) || (*tokenParams == 0)) return;
/* first count the number of slots */
- for (tokenIndex = sftk_argStrip(tokenParams); *tokenIndex;
- tokenIndex = sftk_argStrip(sftk_argSkipParameter(tokenIndex))) {
+ for (tokenIndex = NSSUTIL_ArgStrip(tokenParams); *tokenIndex;
+ tokenIndex = NSSUTIL_ArgStrip(NSSUTIL_ArgSkipParameter(tokenIndex))) {
count++;
}
@@ -353,18 +89,18 @@
PORT_ZAlloc(count*sizeof(sftk_token_parameters));
if (tokens == NULL) return;
- for (tokenIndex = sftk_argStrip(tokenParams), i = 0;
+ for (tokenIndex = NSSUTIL_ArgStrip(tokenParams), i = 0;
*tokenIndex && i < count ; i++ ) {
char *name;
- name = sftk_argGetName(tokenIndex,&next);
+ name = NSSUTIL_ArgGetLabel(tokenIndex,&next);
tokenIndex += next;
- tokens[i].slotID = sftk_argDecodeNumber(name);
+ tokens[i].slotID = NSSUTIL_ArgDecodeNumber(name);
tokens[i].readOnly = PR_FALSE;
tokens[i].noCertDB = PR_FALSE;
tokens[i].noKeyDB = PR_FALSE;
- if (!sftk_argIsBlank(*tokenIndex)) {
- char *args = sftk_argFetchValue(tokenIndex,&next);
+ if (!NSSUTIL_ArgIsBlank(*tokenIndex)) {
+ char *args = NSSUTIL_ArgFetchValue(tokenIndex,&next);
tokenIndex += next;
if (args) {
sftk_parseTokenParameters(args,&tokens[i]);
@@ -372,7 +108,7 @@
}
}
if (name) PORT_Free(name);
- tokenIndex = sftk_argStrip(tokenIndex);
+ tokenIndex = NSSUTIL_ArgStrip(tokenIndex);
}
parsed->token_count = i;
parsed->tokens = tokens;
@@ -390,34 +126,35 @@
char *slotdes = NULL, *pslotdes = NULL;
char *fslotdes = NULL, *ftokdes = NULL;
char *minPW = NULL;
- index = sftk_argStrip(param);
+ index = NSSUTIL_ArgStrip(param);
PORT_Memset(parsed, 0, sizeof(sftk_parameters));
while (*index) {
- SFTK_HANDLE_STRING_ARG(index,parsed->configdir,"configDir=",;)
- SFTK_HANDLE_STRING_ARG(index,parsed->updatedir,"updateDir=",;)
- SFTK_HANDLE_STRING_ARG(index,parsed->updateID,"updateID=",;)
- SFTK_HANDLE_STRING_ARG(index,parsed->secmodName,"secmod=",;)
- SFTK_HANDLE_STRING_ARG(index,parsed->man,"manufacturerID=",;)
- SFTK_HANDLE_STRING_ARG(index,parsed->libdes,"libraryDescription=",;)
+ NSSUTIL_HANDLE_STRING_ARG(index,parsed->configdir,"configDir=",;)
+ NSSUTIL_HANDLE_STRING_ARG(index,parsed->updatedir,"updateDir=",;)
+ NSSUTIL_HANDLE_STRING_ARG(index,parsed->updateID,"updateID=",;)
+ NSSUTIL_HANDLE_STRING_ARG(index,parsed->secmodName,"secmod=",;)
+ NSSUTIL_HANDLE_STRING_ARG(index,parsed->man,"manufacturerID=",;)
+ NSSUTIL_HANDLE_STRING_ARG(index,parsed->libdes,"libraryDescription=",;)
/* constructed values, used so legacy interfaces still work */
- SFTK_HANDLE_STRING_ARG(index,certPrefix,"certPrefix=",;)
- SFTK_HANDLE_STRING_ARG(index,keyPrefix,"keyPrefix=",;)
- SFTK_HANDLE_STRING_ARG(index,tokdes,"cryptoTokenDescription=",;)
- SFTK_HANDLE_STRING_ARG(index,ptokdes,"dbTokenDescription=",;)
- SFTK_HANDLE_STRING_ARG(index,slotdes,"cryptoSlotDescription=",;)
- SFTK_HANDLE_STRING_ARG(index,pslotdes,"dbSlotDescription=",;)
- SFTK_HANDLE_STRING_ARG(index,fslotdes,"FIPSSlotDescription=",;)
- SFTK_HANDLE_STRING_ARG(index,ftokdes,"FIPSTokenDescription=",;)
- SFTK_HANDLE_STRING_ARG(index,pupdtokdes, "updateTokenDescription=",;)
- SFTK_HANDLE_STRING_ARG(index,minPW,"minPWLen=",;)
+ NSSUTIL_HANDLE_STRING_ARG(index,certPrefix,"certPrefix=",;)
+ NSSUTIL_HANDLE_STRING_ARG(index,keyPrefix,"keyPrefix=",;)
+ NSSUTIL_HANDLE_STRING_ARG(index,tokdes,"cryptoTokenDescription=",;)
+ NSSUTIL_HANDLE_STRING_ARG(index,ptokdes,"dbTokenDescription=",;)
+ NSSUTIL_HANDLE_STRING_ARG(index,slotdes,"cryptoSlotDescription=",;)
+ NSSUTIL_HANDLE_STRING_ARG(index,pslotdes,"dbSlotDescription=",;)
+ NSSUTIL_HANDLE_STRING_ARG(index,fslotdes,"FIPSSlotDescription=",;)
+ NSSUTIL_HANDLE_STRING_ARG(index,ftokdes,"FIPSTokenDescription=",;)
+ NSSUTIL_HANDLE_STRING_ARG(index,pupdtokdes, "updateTokenDescription=",;)
+ NSSUTIL_HANDLE_STRING_ARG(index,minPW,"minPWLen=",;)
- SFTK_HANDLE_STRING_ARG(index,tmp,"flags=",
- if(tmp) { sftk_parseFlags(param,parsed); PORT_Free(tmp); tmp = NULL; })
- SFTK_HANDLE_STRING_ARG(index,tmp,"tokens=",
- if(tmp) { sftk_parseTokens(tmp,parsed); PORT_Free(tmp); tmp = NULL; })
- SFTK_HANDLE_FINAL_ARG(index)
+ NSSUTIL_HANDLE_STRING_ARG(index,tmp,"flags=",
+ if(tmp) { sftk_parseFlags(param,parsed); PORT_Free(tmp);
+ tmp = NULL; })
+ NSSUTIL_HANDLE_STRING_ARG(index,tmp,"tokens=",
+ if(tmp) { sftk_parseTokens(tmp,parsed); PORT_Free(tmp); tmp = NULL; })
+ NSSUTIL_HANDLE_FINAL_ARG(index)
}
if (parsed->tokens == NULL) {
int count = isFIPS ? 1 : 2;
@@ -509,116 +246,3 @@
FREE_CLEAR(params->updateID);
}
-#define SQLDB "sql:"
-#define EXTERNDB "extern:"
-#define LEGACY "dbm:"
-const char *
-sftk_EvaluateConfigDir(const char *configdir, SDBType *dbType, char **appName)
-{
- *appName = NULL;
-#ifdef NSS_DISABLE_DBM
- *dbType = SDB_SQL;
-#else
- *dbType = SDB_LEGACY;
-#endif
- if (PORT_Strncmp(configdir, MULTIACCESS, sizeof(MULTIACCESS)-1) == 0) {
- char *cdir;
- *dbType = SDB_MULTIACCESS;
-
- *appName = PORT_Strdup(configdir+sizeof(MULTIACCESS)-1);
- if (*appName == NULL) {
- return configdir;
- }
- cdir = *appName;
- while (*cdir && *cdir != ':') {
- cdir++;
- }
- if (*cdir == ':') {
- *cdir = 0;
- cdir++;
- }
- configdir = cdir;
- } else if (PORT_Strncmp(configdir, SQLDB, sizeof(SQLDB)-1) == 0) {
- *dbType = SDB_SQL;
- configdir = configdir + sizeof(SQLDB) -1;
- } else if (PORT_Strncmp(configdir, EXTERNDB, sizeof(EXTERNDB)-1) == 0) {
- *dbType = SDB_EXTERN;
- configdir = configdir + sizeof(EXTERNDB) -1;
- } else if (PORT_Strncmp(configdir, LEGACY, sizeof(LEGACY)-1) == 0) {
- *dbType = SDB_LEGACY;
- configdir = configdir + sizeof(LEGACY) -1;
- } else {
- /* look up the default from the environment */
- char *defaultType = PR_GetEnv("NSS_DEFAULT_DB_TYPE");
- if (defaultType == NULL) {
- /* none specified, go with the legacy */
- return configdir;
- }
- if (PORT_Strncmp(defaultType, SQLDB, sizeof(SQLDB)-2) == 0) {
- *dbType = SDB_SQL;
- } else if (PORT_Strncmp(defaultType,EXTERNDB,sizeof(EXTERNDB)-2)==0) {
- *dbType = SDB_EXTERN;
- } else if (PORT_Strncmp(defaultType, LEGACY, sizeof(LEGACY)-2) == 0) {
- *dbType = SDB_LEGACY;
- }
- }
- return configdir;
-}
-
-char *
-sftk_getSecmodName(char *param, SDBType *dbType, char **appName,
- char **filename, PRBool *rw)
-{
- int next;
- char *configdir = NULL;
- char *secmodName = NULL;
- char *value = NULL;
- char *save_params = param;
- const char *lconfigdir;
- PRBool noModDB = PR_FALSE;
- param = sftk_argStrip(param);
-
-
- while (*param) {
- SFTK_HANDLE_STRING_ARG(param,configdir,"configDir=",;)
- SFTK_HANDLE_STRING_ARG(param,secmodName,"secmod=",;)
- SFTK_HANDLE_FINAL_ARG(param)
- }
-
- *rw = PR_TRUE;
- if (sftk_argHasFlag("flags","readOnly",save_params)) {
- *rw = PR_FALSE;
- }
-
- if (!secmodName || *secmodName == '\0') {
- if (secmodName) PORT_Free(secmodName);
- secmodName = PORT_Strdup(SECMOD_DB);
- }
-
- *filename = secmodName;
- lconfigdir = sftk_EvaluateConfigDir(configdir, dbType, appName);
-
- if (sftk_argHasFlag("flags","noModDB",save_params)) {
- /* there isn't a module db, don't load the legacy support */
- noModDB = PR_TRUE;
- *dbType = SDB_SQL;
- PORT_Free(*filename);
- *filename = NULL;
- *rw = PR_FALSE;
- }
-
- /* only use the renamed secmod for legacy databases */
- if ((*dbType != SDB_LEGACY) && (*dbType != SDB_MULTIACCESS)) {
- secmodName="pkcs11.txt";
- }
-
- if (noModDB) {
- value = NULL;
- } else if (lconfigdir && lconfigdir[0] != '\0') {
- value = PR_smprintf("%s" PATH_SEPARATOR "%s",lconfigdir,secmodName);
- } else {
- value = PR_smprintf("%s",secmodName);
- }
- if (configdir) PORT_Free(configdir);
- return value;
-}

Powered by Google App Engine
This is Rietveld 408576698