/* * FUNCTION: pkix_Logger_Duplicate * (see comments for PKIX_PL_DuplicateCallback in pkix_pl_system.h) */ static PKIX_Error * pkix_Logger_Duplicate( PKIX_PL_Object *object, PKIX_PL_Object **pNewObject, void *plContext) { PKIX_Logger *logger = NULL; PKIX_Logger *dupLogger = NULL; PKIX_ENTER(LOGGER, "pkix_Logger_Duplicate"); PKIX_NULLCHECK_TWO(object, pNewObject); PKIX_CHECK(pkix_CheckType ((PKIX_PL_Object *)object, PKIX_LOGGER_TYPE, plContext), PKIX_OBJECTNOTLOGGER); logger = (PKIX_Logger *) object; PKIX_CHECK(PKIX_PL_Object_Alloc (PKIX_LOGGER_TYPE, sizeof (PKIX_Logger), (PKIX_PL_Object **)&dupLogger, plContext), PKIX_COULDNOTCREATELOGGEROBJECT); dupLogger->callback = logger->callback; dupLogger->maxLevel = logger->maxLevel; PKIX_DUPLICATE (logger->context, &dupLogger->context, plContext, PKIX_OBJECTDUPLICATEFAILED); dupLogger->logComponent = logger->logComponent; *pNewObject = (PKIX_PL_Object *) dupLogger; cleanup: if (PKIX_ERROR_RECEIVED){ PKIX_DECREF(dupLogger); } PKIX_RETURN(LOGGER); }
/* * FUNCTION: PKIX_PL_CRL_GetCriticalExtensionOIDs * (see comments in pkix_pl_pki.h) */ PKIX_Error * PKIX_PL_CRL_GetCriticalExtensionOIDs( PKIX_PL_CRL *crl, PKIX_List **pExtensions, /* list of PKIX_PL_OID */ void *plContext) { PKIX_List *oidsList = NULL; CERTCertExtension **extensions = NULL; CERTCrl *nssSignedCrl = NULL; PKIX_ENTER(CRL, "PKIX_PL_CRL_GetCriticalExtensionOIDs"); PKIX_NULLCHECK_THREE(crl, crl->nssSignedCrl, pExtensions); /* Can call this function only with der been adopted. */ PORT_Assert(crl->adoptedDerCrl); /* if we don't have a cached copy from before, we create one */ if (crl->critExtOids == NULL) { PKIX_OBJECT_LOCK(crl); nssSignedCrl = &(crl->nssSignedCrl->crl); extensions = nssSignedCrl->extensions; if (crl->critExtOids == NULL) { PKIX_CHECK(pkix_pl_OID_GetCriticalExtensionOIDs (extensions, &oidsList, plContext), PKIX_GETCRITICALEXTENSIONOIDSFAILED); crl->critExtOids = oidsList; } PKIX_OBJECT_UNLOCK(crl); } /* We should return a copy of the List since this list changes */ PKIX_DUPLICATE(crl->critExtOids, pExtensions, plContext, PKIX_OBJECTDUPLICATELISTFAILED); cleanup: PKIX_RETURN(CRL); }
/* * FUNCTION: pkix_ComCertSelParams_Duplicate * (see comments for PKIX_PL_DuplicateCallback in pkix_pl_system.h) */ static PKIX_Error * pkix_ComCertSelParams_Duplicate( PKIX_PL_Object *object, PKIX_PL_Object **pNewObject, void *plContext) { PKIX_ComCertSelParams *params = NULL; PKIX_ComCertSelParams *paramsDuplicate = NULL; PKIX_ENTER(COMCERTSELPARAMS, "pkix_ComCertSelParams_Duplicate"); PKIX_NULLCHECK_TWO(object, pNewObject); PKIX_CHECK(pkix_CheckType (object, PKIX_COMCERTSELPARAMS_TYPE, plContext), PKIX_OBJECTNOTCOMCERTSELPARAMS); params = (PKIX_ComCertSelParams *)object; PKIX_CHECK(PKIX_ComCertSelParams_Create(¶msDuplicate, plContext), PKIX_COMCERTSELPARAMSCREATEFAILED); paramsDuplicate->minPathLength = params->minPathLength; paramsDuplicate->matchAllSubjAltNames = params->matchAllSubjAltNames; PKIX_DUPLICATE(params->subject, ¶msDuplicate->subject, plContext, PKIX_OBJECTDUPLICATEFAILED); PKIX_DUPLICATE(params->policies, ¶msDuplicate->policies, plContext, PKIX_OBJECTDUPLICATEFAILED); if (params->cert){ PKIX_CHECK(PKIX_PL_Object_Duplicate ((PKIX_PL_Object *)params->cert, (PKIX_PL_Object **)¶msDuplicate->cert, plContext), PKIX_OBJECTDUPLICATEFAILED); } PKIX_DUPLICATE (params->nameConstraints, ¶msDuplicate->nameConstraints, plContext, PKIX_OBJECTDUPLICATEFAILED); PKIX_DUPLICATE (params->pathToNames, ¶msDuplicate->pathToNames, plContext, PKIX_OBJECTDUPLICATEFAILED); PKIX_DUPLICATE (params->subjAltNames, ¶msDuplicate->subjAltNames, plContext, PKIX_OBJECTDUPLICATEFAILED); if (params->date){ PKIX_CHECK(PKIX_PL_Object_Duplicate ((PKIX_PL_Object *)params->date, (PKIX_PL_Object **)¶msDuplicate->date, plContext), PKIX_OBJECTDUPLICATEFAILED); } paramsDuplicate->keyUsage = params->keyUsage; PKIX_DUPLICATE(params->certValid, ¶msDuplicate->certValid, plContext, PKIX_OBJECTDUPLICATEFAILED); PKIX_DUPLICATE(params->issuer, ¶msDuplicate->issuer, plContext, PKIX_OBJECTDUPLICATEFAILED); PKIX_DUPLICATE(params->serialNumber, ¶msDuplicate->serialNumber, plContext, PKIX_OBJECTDUPLICATEFAILED); PKIX_DUPLICATE(params->authKeyId, ¶msDuplicate->authKeyId, plContext, PKIX_OBJECTDUPLICATEFAILED); PKIX_DUPLICATE(params->subjKeyId, ¶msDuplicate->subjKeyId, plContext, PKIX_OBJECTDUPLICATEFAILED); PKIX_DUPLICATE(params->subjPubKey, ¶msDuplicate->subjPubKey, plContext, PKIX_OBJECTDUPLICATEFAILED); PKIX_DUPLICATE(params->subjPKAlgId, ¶msDuplicate->subjPKAlgId, plContext, PKIX_OBJECTDUPLICATEFAILED); paramsDuplicate->leafCertFlag = params->leafCertFlag; *pNewObject = (PKIX_PL_Object *)paramsDuplicate; cleanup: if (PKIX_ERROR_RECEIVED){ PKIX_DECREF(paramsDuplicate); } PKIX_RETURN(COMCERTSELPARAMS); }
/* * FUNCTION: pkix_ProcessingParams_Duplicate * (see comments for PKIX_PL_DuplicateCallback in pkix_pl_system.h) */ static PKIX_Error * pkix_ProcessingParams_Duplicate( PKIX_PL_Object *object, PKIX_PL_Object **pNewObject, void *plContext) { PKIX_ProcessingParams *params = NULL; PKIX_ProcessingParams *paramsDuplicate = NULL; PKIX_ENTER(PROCESSINGPARAMS, "pkix_ProcessingParams_Duplicate"); PKIX_NULLCHECK_TWO(object, pNewObject); PKIX_CHECK(pkix_CheckType (object, PKIX_PROCESSINGPARAMS_TYPE, plContext), PKIX_OBJECTNOTPROCESSINGPARAMS); params = (PKIX_ProcessingParams *)object; PKIX_CHECK(PKIX_PL_Object_Alloc (PKIX_PROCESSINGPARAMS_TYPE, sizeof (PKIX_ProcessingParams), (PKIX_PL_Object **)¶msDuplicate, plContext), PKIX_PROCESSINGPARAMSCREATEFAILED); /* initialize fields */ PKIX_DUPLICATE (params->trustAnchors, &(paramsDuplicate->trustAnchors), plContext, PKIX_OBJECTDUPLICATEFAILED); PKIX_DUPLICATE (params->hintCerts, &(paramsDuplicate->hintCerts), plContext, PKIX_OBJECTDUPLICATEFAILED); PKIX_DUPLICATE (params->constraints, &(paramsDuplicate->constraints), plContext, PKIX_OBJECTDUPLICATEFAILED); PKIX_DUPLICATE (params->date, &(paramsDuplicate->date), plContext, PKIX_OBJECTDUPLICATEFAILED); PKIX_DUPLICATE (params->initialPolicies, &(paramsDuplicate->initialPolicies), plContext, PKIX_OBJECTDUPLICATEFAILED); paramsDuplicate->initialPolicyMappingInhibit = params->initialPolicyMappingInhibit; paramsDuplicate->initialAnyPolicyInhibit = params->initialAnyPolicyInhibit; paramsDuplicate->initialExplicitPolicy = params->initialExplicitPolicy; paramsDuplicate->qualifiersRejected = params->qualifiersRejected; PKIX_DUPLICATE (params->certChainCheckers, &(paramsDuplicate->certChainCheckers), plContext, PKIX_OBJECTDUPLICATEFAILED); PKIX_DUPLICATE (params->revCheckers, &(paramsDuplicate->revCheckers), plContext, PKIX_OBJECTDUPLICATEFAILED); PKIX_DUPLICATE (params->certStores, &(paramsDuplicate->certStores), plContext, PKIX_OBJECTDUPLICATEFAILED); PKIX_DUPLICATE (params->resourceLimits, &(paramsDuplicate->resourceLimits), plContext, PKIX_OBJECTDUPLICATEFAILED); paramsDuplicate->isCrlRevocationCheckingEnabled = params->isCrlRevocationCheckingEnabled; paramsDuplicate->isCrlRevocationCheckingEnabledWithNISTPolicy = params->isCrlRevocationCheckingEnabledWithNISTPolicy; *pNewObject = (PKIX_PL_Object *)paramsDuplicate; cleanup: if (PKIX_ERROR_RECEIVED){ PKIX_DECREF(paramsDuplicate); } PKIX_RETURN(PROCESSINGPARAMS); }