/* * This only gets called when cspAttacher get deleted, i.e., when this code * is actually unloaded from the process's address space. */ CSPAttacher::~CSPAttacher() { StLock<Mutex> _(mLock); if(mCspHand != CSSM_INVALID_HANDLE) { CSSM_ModuleDetach(mCspHand); CSSM_ModuleUnload(&gGuidAppleCSP, NULL, NULL); } if(mCspDlHand != CSSM_INVALID_HANDLE) { CSSM_ModuleDetach(mCspDlHand); CSSM_ModuleUnload(&gGuidAppleCSPDL, NULL, NULL); } }
/* * Detach and unload from a CSP. */ CSSM_RETURN cspShutdown( CSSM_CSP_HANDLE cspHand, CSSM_BOOL bareCsp) // true ==> CSP, false ==> CSP/DL { CSSM_RETURN crtn; const CSSM_GUID *guid; char *modName; if(bareCsp) { guid = &gGuidAppleCSP; modName = (char *) "AppleCSP"; } else { guid = &gGuidAppleCSPDL; modName = (char *) "AppleCSPDL"; } crtn = CSSM_ModuleDetach(cspHand); if(crtn) { printf("Error detaching from %s\n", modName); printError("CSSM_ModuleDetach", crtn); return crtn; } crtn = CSSM_ModuleUnload(guid, NULL, NULL); if(crtn) { printf("Error unloading %s\n", modName); printError("CSSM_ModuleUnload", crtn); } return crtn; }
void cdsaShutdown(void) { CSSM_ModuleDetach(cspHandle); CSSM_ModuleUnload(&gGuidAppleCSP, /*AppNotifyCallback*/ NULL, /*AppNotifyCallbackCtx*/ NULL); CSSM_Terminate(); }
CSSM_RETURN pkiClDetachUnload( CSSM_CL_HANDLE clHand) { CSSM_RETURN crtn = CSSM_ModuleDetach(clHand); if(crtn) { return crtn; } return CSSM_ModuleUnload(&gGuidAppleX509CL, NULL, NULL); }
CSSM_RETURN cuTpDetachUnload( CSSM_TP_HANDLE tpHand) { CSSM_RETURN crtn = CSSM_ModuleDetach(tpHand); if(crtn) { return crtn; } return CSSM_ModuleUnload(&gGuidAppleX509TP, NULL, NULL); }
CSSM_RETURN cuDlDetachUnload( CSSM_DL_HANDLE dlHand) { CSSM_RETURN crtn = CSSM_ModuleDetach(dlHand); if(crtn) { return crtn; } return CSSM_ModuleUnload(&gGuidAppleCSPDL, NULL, NULL); }
/* detach and unload */ CSSM_RETURN cuCspDetachUnload( CSSM_CSP_HANDLE cspHand, CSSM_BOOL bareCsp) // true ==> CSP, false ==> CSP/DL { CSSM_RETURN crtn = CSSM_ModuleDetach(cspHand); if(crtn) { return crtn; } const CSSM_GUID *guid; if(bareCsp) { guid = &gGuidAppleCSP; } else { guid = &gGuidAppleCSPDL; } return CSSM_ModuleUnload(guid, NULL, NULL); }
void clShutdown( CSSM_CL_HANDLE clHand) { CSSM_RETURN crtn; crtn = CSSM_ModuleDetach(clHand); if(crtn) { printf("Error detaching from AppleCL\n"); printError("CSSM_ModuleDetach", crtn); return; } crtn = CSSM_ModuleUnload(&gGuidAppleX509CL, NULL, NULL); if(crtn) { printf("Error unloading AppleCL\n"); printError("CSSM_ModuleUnload", crtn); } }
void tpShutdown( CSSM_TP_HANDLE tpHand) { CSSM_RETURN crtn; crtn = CSSM_ModuleDetach(tpHand); if(crtn) { printf("Error detaching from AppleTP\n"); printError("CSSM_ModuleDetach", crtn); return; } crtn = CSSM_ModuleUnload(&gGuidAppleX509TP, NULL, NULL); if(crtn) { printf("Error unloading AppleTP\n"); printError("CSSM_ModuleUnload", crtn); } }
int main(int argc, char **argv) { int arg; char *argp; CSSM_HANDLE modHand = 0; void *foo; CSSM_SERVICE_TYPE svcType = CSSM_SERVICE_CSP; const CSSM_GUID *guid = &gGuidAppleCSP; const char *modName = "AppleCSP"; CSSM_RETURN crtn; CSSM_BOOL doLoad = CSSM_FALSE; CSSM_BOOL doUnload = CSSM_FALSE; /* force link against malloc */ foo = malloc(1); for(arg=1; arg<argc; arg++) { argp = argv[arg]; switch(argp[0]) { case 'l': doLoad = CSSM_TRUE; break; case 'u': doLoad = doUnload = CSSM_TRUE; break; case 'd': guid = &gGuidAppleCSPDL; modName = "AppleCSPDL"; break; case 'c': guid = &gGuidAppleX509CL; svcType = CSSM_SERVICE_CL; modName = "AppleX509CL"; break; case 't': guid = &gGuidAppleX509TP; svcType = CSSM_SERVICE_TP; modName = "AppleX509TP"; break; case 'h': default: usage(argv); } } if(doPause("Top of test")) { goto done; } /* CSSM init, just once */ if(!cssmStartup()) { printf("Oops, error starting up CSSM\n"); exit(1); } if(doPause("CSSM initialized")) { goto done; } if(!doLoad) { /* load, just once */ crtn = CSSM_ModuleLoad(guid, CSSM_KEY_HIERARCHY_NONE, NULL, // eventHandler NULL); // AppNotifyCallbackCtx if(crtn) { printf("Error loading %s\n", modName); printError("CSSM_ModuleLoad", crtn); return 0; } if(doPause("CSSM_ModuleLoad() complete")) { goto done; } } while(1) { if(doLoad) { /* load, each time */ crtn = CSSM_ModuleLoad(guid, CSSM_KEY_HIERARCHY_NONE, NULL, // eventHandler NULL); // AppNotifyCallbackCtx if(crtn) { printf("Error loading %s\n", modName); printError("CSSM_ModuleLoad", crtn); return 0; } if(doPause("CSSM_ModuleLoad() complete")) { break; } } crtn = CSSM_ModuleAttach (guid, &vers, &memFuncs, // memFuncs 0, // SubserviceID svcType, 0, // AttachFlags CSSM_KEY_HIERARCHY_NONE, NULL, // FunctionTable 0, // NumFuncTable NULL, // reserved &modHand); if(crtn) { printf("Error attaching to %s\n", modName); printError("CSSM_ModuleAttach", crtn); return 0; } if(doPause("ModuleAttach() complete")) { break; } CSSM_ModuleDetach(modHand); modHand = 0; if(doPause("ModuleDetach() complete")) { break; } if(doUnload) { /* unload, each time */ crtn = CSSM_ModuleUnload(guid, NULL, NULL); if(crtn) { printf("Error unloading %s\n", modName); printError("CSSM_ModuleUnload", crtn); return 0; } if(doPause("ModuleUnload() complete")) { break; } } /* unloading */ } /* main loop */ done: fpurge(stdin); if(modHand) { CSSM_ModuleDetach(modHand); printf("Final detach complete; cr to exit: "); } else { printf("Test complete; cr to exit: "); } getchar(); return 0; }