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

Side by Side Diff: nss/lib/libpkix/pkix_pl_nss/module/pkix_pl_pk11certstore.c

Issue 1504923011: Update NSS to 3.21 RTM and NSPR to 4.11 RTM (Closed) Base URL: http://src.chromium.org/svn/trunk/deps/third_party/nss
Patch Set: Created 5 years 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* This Source Code Form is subject to the terms of the Mozilla Public 1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this 2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4 /* 4 /*
5 * pkix_pl_pk11certstore.c 5 * pkix_pl_pk11certstore.c
6 * 6 *
7 * PKCS11CertStore Function Definitions 7 * PKCS11CertStore Function Definitions
8 * 8 *
9 */ 9 */
10 10
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 PRTime time, 372 PRTime time,
373 PKIX_Boolean *pHasFetchedCrlInCache, 373 PKIX_Boolean *pHasFetchedCrlInCache,
374 void *plContext) 374 void *plContext)
375 { 375 {
376 /* Returning true result in this case will mean, that case info 376 /* Returning true result in this case will mean, that case info
377 * is currect and should used as is. */ 377 * is currect and should used as is. */
378 NamedCRLCache* nameCrlCache = NULL; 378 NamedCRLCache* nameCrlCache = NULL;
379 PKIX_Boolean hasFetchedCrlInCache = PKIX_TRUE; 379 PKIX_Boolean hasFetchedCrlInCache = PKIX_TRUE;
380 PKIX_List *dpList = NULL; 380 PKIX_List *dpList = NULL;
381 pkix_pl_CrlDp *dp = NULL; 381 pkix_pl_CrlDp *dp = NULL;
382 CERTCertificate *cert;
383 PKIX_UInt32 dpIndex = 0; 382 PKIX_UInt32 dpIndex = 0;
384 SECStatus rv = SECSuccess; 383 SECStatus rv = SECSuccess;
385 PRTime reloadDelay = 0, badCrlInvalDelay = 0; 384 PRTime reloadDelay = 0, badCrlInvalDelay = 0;
386 385
387 PKIX_ENTER(CERTSTORE, "ChechCacheHasFetchedCrl"); 386 PKIX_ENTER(CERTSTORE, "ChechCacheHasFetchedCrl");
388 387
389 cert = pkixCert->nssCert;
390 reloadDelay = 388 reloadDelay =
391 ((PKIX_PL_NssContext*)plContext)->crlReloadDelay * 389 ((PKIX_PL_NssContext*)plContext)->crlReloadDelay *
392 PR_USEC_PER_SEC; 390 PR_USEC_PER_SEC;
393 badCrlInvalDelay = 391 badCrlInvalDelay =
394 ((PKIX_PL_NssContext*)plContext)->badDerCrlReloadDelay * 392 ((PKIX_PL_NssContext*)plContext)->badDerCrlReloadDelay *
395 PR_USEC_PER_SEC; 393 PR_USEC_PER_SEC;
396 if (!time) { 394 if (!time) {
397 time = PR_Now(); 395 time = PR_Now();
398 } 396 }
399 /* If we already download the crl and inserted into the cache, then 397 /* If we already download the crl and inserted into the cache, then
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
473 * Returns a CertStore Error if the function fails in a non-fatal way. 471 * Returns a CertStore Error if the function fails in a non-fatal way.
474 * Returns a Fatal Error if the function fails in an unrecoverable way. 472 * Returns a Fatal Error if the function fails in an unrecoverable way.
475 */ 473 */
476 static PKIX_Error * 474 static PKIX_Error *
477 pkix_pl_Pk11CertStore_CheckRevByCrl( 475 pkix_pl_Pk11CertStore_CheckRevByCrl(
478 PKIX_CertStore *store, 476 PKIX_CertStore *store,
479 PKIX_PL_Cert *pkixCert, 477 PKIX_PL_Cert *pkixCert,
480 PKIX_PL_Cert *pkixIssuer, 478 PKIX_PL_Cert *pkixIssuer,
481 PKIX_PL_Date *date, 479 PKIX_PL_Date *date,
482 PKIX_Boolean crlDownloadDone, 480 PKIX_Boolean crlDownloadDone,
483 PKIX_UInt32 *pReasonCode, 481 CERTCRLEntryReasonCode *pReasonCode,
484 PKIX_RevocationStatus *pStatus, 482 PKIX_RevocationStatus *pStatus,
485 void *plContext) 483 void *plContext)
486 { 484 {
487 PKIX_RevocationStatus pkixRevStatus = PKIX_RevStatus_NoInfo; 485 PKIX_RevocationStatus pkixRevStatus = PKIX_RevStatus_NoInfo;
488 CERTRevocationStatus revStatus = certRevocationStatusUnknown; 486 CERTRevocationStatus revStatus = certRevocationStatusUnknown;
489 PKIX_Boolean hasFetchedCrlInCache = PKIX_TRUE; 487 PKIX_Boolean hasFetchedCrlInCache = PKIX_TRUE;
490 CERTCertificate *cert = NULL, *issuer = NULL; 488 CERTCertificate *cert = NULL, *issuer = NULL;
491 SECStatus rv = SECSuccess; 489 SECStatus rv = SECSuccess;
492 void *wincx = NULL; 490 void *wincx = NULL;
493 PRTime time = 0; 491 PRTime time = 0;
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
668 666
669 PKIX_RETURN(CERTSTORE); 667 PKIX_RETURN(CERTSTORE);
670 } 668 }
671 669
672 static PKIX_Error * 670 static PKIX_Error *
673 RemovePartitionedDpsFromList(PKIX_List *dpList, PKIX_PL_Date *date, 671 RemovePartitionedDpsFromList(PKIX_List *dpList, PKIX_PL_Date *date,
674 void *plContext) 672 void *plContext)
675 { 673 {
676 NamedCRLCache* nameCrlCache = NULL; 674 NamedCRLCache* nameCrlCache = NULL;
677 pkix_pl_CrlDp *dp = NULL; 675 pkix_pl_CrlDp *dp = NULL;
678 int dpIndex = 0; 676 unsigned int dpIndex = 0;
679 PRTime time; 677 PRTime time;
680 PRTime reloadDelay = 0, badCrlInvalDelay = 0; 678 PRTime reloadDelay = 0, badCrlInvalDelay = 0;
681 SECStatus rv; 679 SECStatus rv;
682 680
683 PKIX_ENTER(CERTSTORE, "pkix_pl_Pk11CertStore_ListRemovePrtDp"); 681 PKIX_ENTER(CERTSTORE, "pkix_pl_Pk11CertStore_ListRemovePrtDp");
684 682
685 if (!dpList || !dpList->length) { 683 if (!dpList || !dpList->length) {
686 PKIX_RETURN(CERTSTORE); 684 PKIX_RETURN(CERTSTORE);
687 } 685 }
688 reloadDelay = 686 reloadDelay =
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
772 PRUint16 port; 770 PRUint16 port;
773 SEC_HTTP_SERVER_SESSION pServerSession = NULL; 771 SEC_HTTP_SERVER_SESSION pServerSession = NULL;
774 SEC_HTTP_REQUEST_SESSION pRequestSession = NULL; 772 SEC_HTTP_REQUEST_SESSION pRequestSession = NULL;
775 PRUint16 myHttpResponseCode; 773 PRUint16 myHttpResponseCode;
776 const char *myHttpResponseData = NULL; 774 const char *myHttpResponseData = NULL;
777 PRUint32 myHttpResponseDataLen; 775 PRUint32 myHttpResponseDataLen;
778 SECItem *uri = NULL; 776 SECItem *uri = NULL;
779 SECItem *derCrlCopy = NULL; 777 SECItem *derCrlCopy = NULL;
780 CERTSignedCrl *nssCrl = NULL; 778 CERTSignedCrl *nssCrl = NULL;
781 CERTGeneralName *genName = NULL; 779 CERTGeneralName *genName = NULL;
782 PKIX_Int32 savedError = -1;
783 SECItem **derGenNames = NULL; 780 SECItem **derGenNames = NULL;
784 SECItem *derGenName = NULL; 781 SECItem *derGenName = NULL;
785 782
786 PKIX_ENTER(CERTSTORE, "pkix_pl_Pk11CertStore_DownloadCrl"); 783 PKIX_ENTER(CERTSTORE, "pkix_pl_Pk11CertStore_DownloadCrl");
787 784
788 /* Do not support dps others than a one with GeneralName 785 /* Do not support dps others than a one with GeneralName
789 * name type. */ 786 * name type. */
790 if (dp->distPointType != generalName || 787 if (dp->distPointType != generalName ||
791 !dp->nssdp->derFullName) { 788 !dp->nssdp->derFullName) {
792 PKIX_ERROR(PKIX_UNSUPPORTEDCRLDPTYPE); 789 PKIX_ERROR(PKIX_UNSUPPORTEDCRLDPTYPE);
793 } 790 }
794 genName = dp->name.fullName; 791 genName = dp->name.fullName;
795 derGenNames = dp->nssdp->derFullName; 792 derGenNames = dp->nssdp->derFullName;
796 do { 793 do {
797 derGenName = *derGenNames; 794 derGenName = *derGenNames;
798 do { 795 do {
799 if (!derGenName || 796 if (!derGenName ||
800 !genName->name.other.data) { 797 !genName->name.other.data) {
801 /* get to next name if no data. */ 798 /* get to next name if no data. */
802 savedError = PKIX_UNSUPPORTEDCRLDPTYPE;
803 break; 799 break;
804 } 800 }
805 uri = &genName->name.other; 801 uri = &genName->name.other;
806 location = (char*)PR_Malloc(1 + uri->len); 802 location = (char*)PR_Malloc(1 + uri->len);
807 if (!location) { 803 if (!location) {
808 savedError = PKIX_ALLOCERROR;
809 break; 804 break;
810 } 805 }
811 PORT_Memcpy(location, uri->data, uri->len); 806 PORT_Memcpy(location, uri->data, uri->len);
812 location[uri->len] = 0; 807 location[uri->len] = 0;
813 if (CERT_ParseURL(location, &hostname, 808 if (CERT_ParseURL(location, &hostname,
814 &port, &path) != SECSuccess) { 809 &port, &path) != SECSuccess) {
815 PORT_SetError(SEC_ERROR_BAD_CRL_DP_URL); 810 PORT_SetError(SEC_ERROR_BAD_CRL_DP_URL);
816 savedError = PKIX_URLPARSINGFAILED;
817 break; 811 break;
818 } 812 }
819 813
820 PORT_Assert(hostname != NULL); 814 PORT_Assert(hostname != NULL);
821 PORT_Assert(path != NULL); 815 PORT_Assert(path != NULL);
822 816
823 if ((*hcv1->createSessionFcn)(hostname, port, 817 if ((*hcv1->createSessionFcn)(hostname, port,
824 &pServerSession) != SECSuccess) { 818 &pServerSession) != SECSuccess) {
825 PORT_SetError(SEC_ERROR_BAD_CRL_DP_URL); 819 PORT_SetError(SEC_ERROR_BAD_CRL_DP_URL);
826 savedError = PKIX_URLPARSINGFAILED;
827 break; 820 break;
828 } 821 }
829 822
830 if ((*hcv1->createFcn)(pServerSession, "http", path, "GET", 823 if ((*hcv1->createFcn)(pServerSession, "http", path, "GET",
831 /* Users with slow connections might not get CRL revocation 824 /* Users with slow connections might not get CRL revocation
832 checking for certs that use big CRLs because of the timeout 825 checking for certs that use big CRLs because of the timeout
833 We absolutely need code that limits our retry attempts. 826 We absolutely need code that limits our retry attempts.
834 */ 827 */
835 PR_SecondsToInterval( 828 PR_SecondsToInterval(
836 ((PKIX_PL_NssContext*)plContext)->timeoutSeconds), 829 ((PKIX_PL_NssContext*)plContext)->timeoutSeconds),
837 &pRequestSession) != SECSuccess) { 830 &pRequestSession) != SECSuccess) {
838 savedError = PKIX_HTTPSERVERERROR;
839 break; 831 break;
840 } 832 }
841 833
842 myHttpResponseDataLen = 834 myHttpResponseDataLen =
843 ((PKIX_PL_NssContext*)plContext)->maxResponseLength; 835 ((PKIX_PL_NssContext*)plContext)->maxResponseLength;
844 if (myHttpResponseDataLen < PKIX_DEFAULT_MAX_CRL_RESPONSE_LENGTH) 836 if (myHttpResponseDataLen < PKIX_DEFAULT_MAX_CRL_RESPONSE_LENGTH)
845 myHttpResponseDataLen = PKIX_DEFAULT_MAX_CRL_RESPONSE_LENGTH; 837 myHttpResponseDataLen = PKIX_DEFAULT_MAX_CRL_RESPONSE_LENGTH;
846 838
847 /* We use a non-zero timeout, which means: 839 /* We use a non-zero timeout, which means:
848 - the client will use blocking I/O 840 - the client will use blocking I/O
849 - TryFcn will not return WOULD_BLOCK nor a poll descriptor 841 - TryFcn will not return WOULD_BLOCK nor a poll descriptor
850 - it's sufficient to call TryFcn once 842 - it's sufficient to call TryFcn once
851 */ 843 */
852 /* we don't want result objects larger than this: */ 844 /* we don't want result objects larger than this: */
853 if ((*hcv1->trySendAndReceiveFcn)( 845 if ((*hcv1->trySendAndReceiveFcn)(
854 pRequestSession, 846 pRequestSession,
855 NULL, 847 NULL,
856 &myHttpResponseCode, 848 &myHttpResponseCode,
857 NULL, 849 NULL,
858 NULL, 850 NULL,
859 &myHttpResponseData, 851 &myHttpResponseData,
860 &myHttpResponseDataLen) != SECSuccess) { 852 &myHttpResponseDataLen) != SECSuccess) {
861 savedError = PKIX_HTTPSERVERERROR;
862 break; 853 break;
863 } 854 }
864 855
865 if (myHttpResponseCode != 200) { 856 if (myHttpResponseCode != 200) {
866 savedError = PKIX_HTTPSERVERERROR;
867 break; 857 break;
868 } 858 }
869 } while(0); 859 } while(0);
870 if (!myHttpResponseData) { 860 if (!myHttpResponseData) {
871 /* Going to the next one. */ 861 /* Going to the next one. */
872 genName = CERT_GetNextGeneralName(genName); 862 genName = CERT_GetNextGeneralName(genName);
873 derGenNames++; 863 derGenNames++;
874 } 864 }
875 /* Staing in the loop through all the names until 865 /* Staing in the loop through all the names until
876 * we have a successful download. */ 866 * we have a successful download. */
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
1040 &certStore, 1030 &certStore,
1041 plContext), 1031 plContext),
1042 PKIX_CERTSTORECREATEFAILED); 1032 PKIX_CERTSTORECREATEFAILED);
1043 1033
1044 *pCertStore = certStore; 1034 *pCertStore = certStore;
1045 1035
1046 cleanup: 1036 cleanup:
1047 1037
1048 PKIX_RETURN(CERTSTORE); 1038 PKIX_RETURN(CERTSTORE);
1049 } 1039 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698