mirror of
https://github.com/rn10950/RetroZilla.git
synced 2024-11-10 01:40:17 +01:00
336 lines
13 KiB
C
336 lines
13 KiB
C
|
/* ***** BEGIN LICENSE BLOCK *****
|
||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||
|
*
|
||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||
|
* the License. You may obtain a copy of the License at
|
||
|
* http://www.mozilla.org/MPL/
|
||
|
*
|
||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||
|
* for the specific language governing rights and limitations under the
|
||
|
* License.
|
||
|
*
|
||
|
* The Original Code is the Netscape security libraries.
|
||
|
*
|
||
|
* The Initial Developer of the Original Code is
|
||
|
* Netscape Communications Corporation.
|
||
|
* Portions created by the Initial Developer are Copyright (C) 1994-2000
|
||
|
* the Initial Developer. All Rights Reserved.
|
||
|
*
|
||
|
* Contributor(s):
|
||
|
* Sun Microsystems
|
||
|
*
|
||
|
* Alternatively, the contents of this file may be used under the terms of
|
||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||
|
* of those above. If you wish to allow use of your version of this file only
|
||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||
|
* use your version of this file under the terms of the MPL, indicate your
|
||
|
* decision by deleting the provisions above and replace them with the notice
|
||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||
|
* the provisions above, a recipient may use your version of this file under
|
||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||
|
*
|
||
|
* ***** END LICENSE BLOCK ***** */
|
||
|
/*
|
||
|
* testwrapper.c
|
||
|
*
|
||
|
* Wrpper programm for libpkix tests.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#include <stdio.h>
|
||
|
|
||
|
#include "nspr.h"
|
||
|
#include "plgetopt.h"
|
||
|
|
||
|
#include "nss.h"
|
||
|
#include "secport.h"
|
||
|
|
||
|
typedef int (*mainTestFn)(int argc, char* argv[]);
|
||
|
|
||
|
extern int libpkix_buildthreads(int argc, char *argv[]);
|
||
|
extern int nss_threads(int argc, char *argv[]);
|
||
|
extern int test_certselector(int argc, char *argv[]);
|
||
|
extern int test_comcertselparams(int argc, char *argv[]);
|
||
|
extern int test_certchainchecker(int argc, char *argv[]);
|
||
|
extern int test_comcrlselparams(int argc, char *argv[]);
|
||
|
extern int test_crlselector(int argc, char *argv[]);
|
||
|
|
||
|
/* This test fails to build. Need to fix */
|
||
|
/* extern int test_buildparams(int argc, char *argv[]); */
|
||
|
extern int test_procparams(int argc, char *argv[]);
|
||
|
extern int test_resourcelimits(int argc, char *argv[]);
|
||
|
extern int test_trustanchor(int argc, char *argv[]);
|
||
|
extern int test_valparams(int argc, char *argv[]);
|
||
|
extern int test_buildresult(int argc, char *argv[]);
|
||
|
extern int test_policynode(int argc, char *argv[]);
|
||
|
extern int test_valresult(int argc, char *argv[]);
|
||
|
extern int test_verifynode(int argc, char *argv[]);
|
||
|
extern int test_store(int argc, char *argv[]);
|
||
|
extern int test_basicchecker(int argc, char *argv[]);
|
||
|
extern int test_basicconstraintschecker(int argc, char *argv[]);
|
||
|
extern int test_buildchain(int argc, char *argv[]);
|
||
|
extern int test_buildchain_partialchain(int argc, char *argv[]);
|
||
|
extern int test_buildchain_resourcelimits(int argc, char *argv[]);
|
||
|
extern int test_buildchain_uchecker(int argc, char *argv[]);
|
||
|
extern int test_customcrlchecker(int argc, char *argv[]);
|
||
|
extern int test_defaultcrlchecker2stores(int argc, char *argv[]);
|
||
|
extern int test_ocsp(int argc, char *argv[]);
|
||
|
extern int test_policychecker(int argc, char *argv[]);
|
||
|
extern int test_subjaltnamechecker(int argc, char *argv[]);
|
||
|
extern int test_validatechain(int argc, char *argv[]);
|
||
|
extern int test_validatechain_NB(int argc, char *argv[]);
|
||
|
extern int test_validatechain_bc(int argc, char *argv[]);
|
||
|
extern int test_error(int argc, char *argv[]);
|
||
|
extern int test_list(int argc, char *argv[]);
|
||
|
extern int test_list2(int argc, char *argv[]);
|
||
|
extern int test_logger(int argc, char *argv[]);
|
||
|
extern int test_colcertstore(int argc, char *argv[]);
|
||
|
extern int test_ekuchecker(int argc, char *argv[]);
|
||
|
extern int test_httpcertstore(int argc, char *argv[]);
|
||
|
extern int test_pk11certstore(int argc, char *argv[]);
|
||
|
extern int test_socket(int argc, char *argv[]);
|
||
|
extern int test_authorityinfoaccess(int argc, char *argv[]);
|
||
|
extern int test_cert(int argc, char *argv[]);
|
||
|
extern int test_crl(int argc, char *argv[]);
|
||
|
extern int test_crlentry(int argc, char *argv[]);
|
||
|
extern int test_date(int argc, char *argv[]);
|
||
|
extern int test_generalname(int argc, char *argv[]);
|
||
|
extern int test_nameconstraints(int argc, char *argv[]);
|
||
|
extern int test_subjectinfoaccess(int argc, char *argv[]);
|
||
|
extern int test_x500name(int argc, char *argv[]);
|
||
|
extern int stress_test(int argc, char *argv[]);
|
||
|
extern int test_bigint(int argc, char *argv[]);
|
||
|
extern int test_bytearray(int argc, char *argv[]);
|
||
|
extern int test_hashtable(int argc, char *argv[]);
|
||
|
extern int test_mem(int argc, char *argv[]);
|
||
|
extern int test_monitorlock(int argc, char *argv[]);
|
||
|
extern int test_mutex(int argc, char *argv[]);
|
||
|
extern int test_mutex2(int argc, char *argv[]);
|
||
|
extern int test_mutex3(int argc, char *argv[]);
|
||
|
extern int test_object(int argc, char *argv[]);
|
||
|
extern int test_oid(int argc, char *argv[]);
|
||
|
|
||
|
/* Taken out. Problem with build */
|
||
|
/* extern int test_rwlock(int argc, char *argv[]); */
|
||
|
extern int test_string(int argc, char *argv[]);
|
||
|
extern int test_string2(int argc, char *argv[]);
|
||
|
extern int build_chain(int argc, char *argv[]);
|
||
|
extern int dumpcert(int argc, char *argv[]);
|
||
|
extern int dumpcrl(int argc, char *argv[]);
|
||
|
extern int validate_chain(int argc, char *argv[]);
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
char *fnName;
|
||
|
mainTestFn fnPointer;
|
||
|
} testFunctionRef;
|
||
|
|
||
|
testFunctionRef testFnRefTable[] = {
|
||
|
{"libpkix_buildthreads", libpkix_buildthreads},
|
||
|
{"nss_threads", nss_threads},
|
||
|
{"test_certselector", test_certselector},
|
||
|
{"test_comcertselparams", test_comcertselparams},
|
||
|
{"test_certchainchecker", test_certchainchecker},
|
||
|
{"test_comcrlselparams", test_comcrlselparams},
|
||
|
{"test_crlselector", test_crlselector},
|
||
|
/* {"test_buildparams", test_buildparams}*/
|
||
|
{"test_procparams", test_procparams},
|
||
|
{"test_resourcelimits", test_resourcelimits},
|
||
|
{"test_trustanchor", test_trustanchor},
|
||
|
{"test_valparams", test_valparams},
|
||
|
{"test_buildresult", test_buildresult},
|
||
|
{"test_policynode", test_policynode},
|
||
|
{"test_valresult", test_valresult},
|
||
|
{"test_verifynode", test_verifynode},
|
||
|
{"test_store", test_store},
|
||
|
{"test_basicchecker", test_basicchecker},
|
||
|
{"test_basicconstraintschecker", test_basicconstraintschecker},
|
||
|
{"test_buildchain", test_buildchain},
|
||
|
{"test_buildchain_partialchain", test_buildchain_partialchain},
|
||
|
{"test_buildchain_resourcelimits", test_buildchain_resourcelimits},
|
||
|
{"test_buildchain_uchecker", test_buildchain_uchecker},
|
||
|
{"test_customcrlchecker", test_customcrlchecker},
|
||
|
{"test_defaultcrlchecker2stores", test_defaultcrlchecker2stores},
|
||
|
{"test_ocsp", test_ocsp},
|
||
|
{"test_policychecker", test_policychecker},
|
||
|
{"test_subjaltnamechecker", test_subjaltnamechecker},
|
||
|
{"test_validatechain", test_validatechain},
|
||
|
{"test_validatechain_NB", test_validatechain_NB},
|
||
|
{"test_validatechain_bc", test_validatechain_bc},
|
||
|
{"test_error", test_error},
|
||
|
{"test_list", test_list},
|
||
|
{"test_list2", test_list2},
|
||
|
{"test_logger", test_logger},
|
||
|
{"test_colcertstore", test_colcertstore},
|
||
|
{"test_ekuchecker", test_ekuchecker},
|
||
|
{"test_httpcertstore", test_httpcertstore},
|
||
|
{"test_pk11certstore", test_pk11certstore},
|
||
|
{"test_socket", test_socket},
|
||
|
{"test_authorityinfoaccess", test_authorityinfoaccess},
|
||
|
{"test_cert", test_cert},
|
||
|
{"test_crl", test_crl},
|
||
|
{"test_crlentry", test_crlentry},
|
||
|
{"test_date", test_date},
|
||
|
{"test_generalname", test_generalname},
|
||
|
{"test_nameconstraints", test_nameconstraints},
|
||
|
{"test_subjectinfoaccess", test_subjectinfoaccess},
|
||
|
{"test_x500name", test_x500name},
|
||
|
{"stress_test", stress_test},
|
||
|
{"test_bigint", test_bigint},
|
||
|
{"test_bytearray", test_bytearray},
|
||
|
{"test_hashtable", test_hashtable},
|
||
|
{"test_mem", test_mem},
|
||
|
{"test_monitorlock", test_monitorlock},
|
||
|
{"test_mutex", test_mutex},
|
||
|
{"test_mutex2", test_mutex2},
|
||
|
{"test_mutex3", test_mutex3},
|
||
|
{"test_object", test_object},
|
||
|
{"test_oid", test_oid},
|
||
|
/* {"test_rwlock", test_rwlock, }*/
|
||
|
{"test_string", test_string},
|
||
|
{"test_string2", test_string2},
|
||
|
{"build_chain", build_chain},
|
||
|
{"dumpcert", dumpcert},
|
||
|
{"dumpcrl", dumpcrl},
|
||
|
{"validate_chain", validate_chain},
|
||
|
{NULL, NULL },
|
||
|
};
|
||
|
|
||
|
static
|
||
|
void printUsage(char *cmdName) {
|
||
|
int fnCounter = 0;
|
||
|
|
||
|
fprintf(stderr, "Usage: %s [test name] [arg1]...[argN]\n\n", cmdName);
|
||
|
fprintf(stderr, "List of possible names for the tests:");
|
||
|
while (testFnRefTable[fnCounter].fnName != NULL) {
|
||
|
if (fnCounter % 2 == 0) {
|
||
|
fprintf(stderr, "\n");
|
||
|
}
|
||
|
fprintf(stderr, " %-35s ", testFnRefTable[fnCounter].fnName);
|
||
|
fnCounter += 1;
|
||
|
}
|
||
|
fprintf(stderr, "\n");
|
||
|
}
|
||
|
|
||
|
static SECStatus
|
||
|
getTestArguments(int argc,
|
||
|
char **argv,
|
||
|
mainTestFn *ptestFn,
|
||
|
char **pdbPath,
|
||
|
int *pargc,
|
||
|
char ***pargv)
|
||
|
{
|
||
|
PLOptState *optstate = NULL;
|
||
|
PLOptStatus status;
|
||
|
mainTestFn testFunction = NULL;
|
||
|
char **wArgv = NULL;
|
||
|
char *dbPath = NULL;
|
||
|
char *fnName = NULL;
|
||
|
int wArgc = 0;
|
||
|
int fnCounter = 0;
|
||
|
|
||
|
if (argc < 2) {
|
||
|
printf("ERROR: insufficient number of arguments: %s.\n", fnName);
|
||
|
return SECFailure;
|
||
|
}
|
||
|
|
||
|
fnName = argv[1];
|
||
|
while (testFnRefTable[fnCounter].fnName != NULL) {
|
||
|
if (!PORT_Strcmp(fnName, testFnRefTable[fnCounter].fnName)) {
|
||
|
testFunction = testFnRefTable[fnCounter].fnPointer;
|
||
|
break;
|
||
|
}
|
||
|
fnCounter += 1;
|
||
|
}
|
||
|
if (!testFunction) {
|
||
|
printf("ERROR: unknown name of the test: %s.\n", fnName);
|
||
|
return SECFailure;
|
||
|
}
|
||
|
|
||
|
wArgv = PORT_ZNewArray(char*, argc);
|
||
|
if (!wArgv) {
|
||
|
return SECFailure;
|
||
|
}
|
||
|
|
||
|
/* set name of the function as a first arg and increment arg count. */
|
||
|
wArgv[0] = fnName;
|
||
|
wArgc += 1;
|
||
|
|
||
|
optstate = PL_CreateOptState(argc - 1, argv + 1, "d:");
|
||
|
while ((status = PL_GetNextOpt(optstate)) == PL_OPT_OK) {
|
||
|
switch (optstate->option) {
|
||
|
case 'd':
|
||
|
dbPath = (char*)optstate->value;
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
wArgv[wArgc] = (char*)optstate->value;
|
||
|
wArgc += 1;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
PL_DestroyOptState(optstate);
|
||
|
|
||
|
*ptestFn = testFunction;
|
||
|
*pdbPath = dbPath;
|
||
|
*pargc = wArgc;
|
||
|
*pargv = wArgv;
|
||
|
|
||
|
return SECSuccess;
|
||
|
}
|
||
|
|
||
|
|
||
|
static
|
||
|
int runCmd(mainTestFn fnPointer,
|
||
|
int argc,
|
||
|
char **argv,
|
||
|
char *dbPath)
|
||
|
{
|
||
|
int retStat = 0;
|
||
|
|
||
|
/* Initialize NSPR and NSS. */
|
||
|
PR_Init(PR_SYSTEM_THREAD, PR_PRIORITY_NORMAL, 1);
|
||
|
|
||
|
/* if using databases, use NSS_Init and not NSS_NoDB_Init */
|
||
|
if (dbPath && PORT_Strlen(dbPath) != 0) {
|
||
|
if (NSS_Init(dbPath) != SECSuccess)
|
||
|
return SECFailure;
|
||
|
} else {
|
||
|
if (NSS_NoDB_Init(NULL) != 0)
|
||
|
return SECFailure;
|
||
|
}
|
||
|
retStat = fnPointer(argc, argv);
|
||
|
|
||
|
if (NSS_Shutdown() != SECSuccess) {
|
||
|
exit(1);
|
||
|
}
|
||
|
PR_Cleanup();
|
||
|
return retStat;
|
||
|
}
|
||
|
|
||
|
int main(int argc, char **argv) {
|
||
|
mainTestFn testFunction = NULL;
|
||
|
char *dbPath = NULL;
|
||
|
char **testArgv = NULL;
|
||
|
int testArgc = 0;
|
||
|
int rv = 0;
|
||
|
|
||
|
rv = getTestArguments(argc, argv, &testFunction, &dbPath,
|
||
|
&testArgc, &testArgv);
|
||
|
if (rv != SECSuccess) {
|
||
|
printUsage(argv[0]);
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
rv = runCmd(testFunction, testArgc, testArgv, dbPath);
|
||
|
|
||
|
PORT_Free(testArgv);
|
||
|
|
||
|
return rv;
|
||
|
}
|
||
|
|