| 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;
|
| -}
|
|
|