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

Side by Side Diff: mozilla/security/nss/lib/pki/pki3hack.c

Issue 12197027: Merge NSS_3_14_2_RTM. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/nss/
Patch Set: Created 7 years, 10 months 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
« no previous file with comments | « mozilla/security/nss/lib/pkcs7/p7decode.c ('k') | mozilla/security/nss/lib/softoken/pkcs11c.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #ifdef DEBUG 5 #ifdef DEBUG
6 static const char CVS_ID[] = "@(#) $RCSfile: pki3hack.c,v $ $Revision: 1.109 $ $ Date: 2012/07/27 21:41:52 $"; 6 static const char CVS_ID[] = "@(#) $RCSfile: pki3hack.c,v $ $Revision: 1.111 $ $ Date: 2013/01/07 04:11:51 $";
7 #endif /* DEBUG */ 7 #endif /* DEBUG */
8 8
9 /* 9 /*
10 * Hacks to integrate NSS 3.4 and NSS 4.0 certificates. 10 * Hacks to integrate NSS 3.4 and NSS 4.0 certificates.
11 */ 11 */
12 12
13 #ifndef NSSPKI_H 13 #ifndef NSSPKI_H
14 #include "nsspki.h" 14 #include "nsspki.h"
15 #endif /* NSSPKI_H */ 15 #endif /* NSSPKI_H */
16 16
(...skipping 781 matching lines...) Expand 10 before | Expand all | Expand 10 after
798 c->serial.data = cc->serialNumber.data; 798 c->serial.data = cc->serialNumber.data;
799 c->serial.size = cc->serialNumber.len; 799 c->serial.size = cc->serialNumber.len;
800 nssTrust = nssTrustDomain_FindTrustForCertificate(context->td, c); 800 nssTrust = nssTrustDomain_FindTrustForCertificate(context->td, c);
801 } 801 }
802 if (nssTrust) { 802 if (nssTrust) {
803 trust = cert_trust_from_stan_trust(nssTrust, cc->arena); 803 trust = cert_trust_from_stan_trust(nssTrust, cc->arena);
804 if (trust) { 804 if (trust) {
805 /* we should destroy cc->trust before replacing it, but it's 805 /* we should destroy cc->trust before replacing it, but it's
806 allocated in cc->arena, so memory growth will occur on each 806 allocated in cc->arena, so memory growth will occur on each
807 refresh */ 807 refresh */
808 CERT_LockCertTrust(cc);
808 cc->trust = trust; 809 cc->trust = trust;
810 CERT_UnlockCertTrust(cc);
809 } 811 }
810 nssTrust_Destroy(nssTrust); 812 nssTrust_Destroy(nssTrust);
811 } 813 }
812 } else if (instance) { 814 } else if (instance) {
813 /* slot */ 815 /* slot */
814 if (cc->slot != instance->token->pk11slot) { 816 if (cc->slot != instance->token->pk11slot) {
815 if (cc->slot) { 817 if (cc->slot) {
816 PK11_FreeSlot(cc->slot); 818 PK11_FreeSlot(cc->slot);
817 } 819 }
818 cc->slot = PK11_ReferenceSlot(instance->token->pk11slot); 820 cc->slot = PK11_ReferenceSlot(instance->token->pk11slot);
819 } 821 }
820 cc->ownSlot = PR_TRUE; 822 cc->ownSlot = PR_TRUE;
821 /* pkcs11ID */ 823 /* pkcs11ID */
822 cc->pkcs11ID = instance->handle; 824 cc->pkcs11ID = instance->handle;
823 /* trust */ 825 /* trust */
824 trust = nssTrust_GetCERTCertTrustForCert(c, cc); 826 trust = nssTrust_GetCERTCertTrustForCert(c, cc);
825 if (trust) { 827 if (trust) {
826 /* we should destroy cc->trust before replacing it, but it's 828 /* we should destroy cc->trust before replacing it, but it's
827 allocated in cc->arena, so memory growth will occur on each 829 allocated in cc->arena, so memory growth will occur on each
828 refresh */ 830 refresh */
831 CERT_LockCertTrust(cc);
829 cc->trust = trust; 832 cc->trust = trust;
833 CERT_UnlockCertTrust(cc);
830 } 834 }
831 nssCryptokiObject_Destroy(instance); 835 nssCryptokiObject_Destroy(instance);
832 } 836 }
833 /* database handle is now the trust domain */ 837 /* database handle is now the trust domain */
834 cc->dbhandle = c->object.trustDomain; 838 cc->dbhandle = c->object.trustDomain;
835 /* subjectList ? */ 839 /* subjectList ? */
836 /* istemp and isperm are supported in NSS 3.4 */ 840 /* istemp and isperm are supported in NSS 3.4 */
837 cc->istemp = PR_FALSE; /* CERT_NewTemp will override this */ 841 cc->istemp = PR_FALSE; /* CERT_NewTemp will override this */
838 cc->isperm = PR_TRUE; /* by default */ 842 cc->isperm = PR_TRUE; /* by default */
839 /* pointer back */ 843 /* pointer back */
840 cc->nssCertificate = c; 844 cc->nssCertificate = c;
841 if (trust) { 845 if (trust) {
842 /* force the cert type to be recomputed to include trust info */ 846 /* force the cert type to be recomputed to include trust info */
843 PRUint32 nsCertType = cert_ComputeCertType(cc); 847 PRUint32 nsCertType = cert_ComputeCertType(cc);
844 848
845 /* Assert that it is safe to cast &cc->nsCertType to "PRInt32 *" */ 849 /* Assert that it is safe to cast &cc->nsCertType to "PRInt32 *" */
846 PORT_Assert(sizeof(cc->nsCertType) == sizeof(PRInt32)); 850 PORT_Assert(sizeof(cc->nsCertType) == sizeof(PRInt32));
847 PR_ATOMIC_SET((PRInt32 *)&cc->nsCertType, nsCertType); 851 PR_ATOMIC_SET((PRInt32 *)&cc->nsCertType, nsCertType);
848 } 852 }
849 } 853 }
850 854
851 static CERTCertificate * 855 static CERTCertificate *
852 stan_GetCERTCertificate(NSSCertificate *c, PRBool forceUpdate) 856 stan_GetCERTCertificate(NSSCertificate *c, PRBool forceUpdate)
853 { 857 {
854 nssDecodedCert *dc = NULL; 858 nssDecodedCert *dc = NULL;
855 CERTCertificate *cc = NULL; 859 CERTCertificate *cc = NULL;
860 CERTCertTrust certTrust;
856 861
857 nssPKIObject_Lock(&c->object); 862 nssPKIObject_Lock(&c->object);
858 863
859 dc = c->decoding; 864 dc = c->decoding;
860 if (!dc) { 865 if (!dc) {
861 dc = nssDecodedPKIXCertificate_Create(NULL, &c->encoding); 866 dc = nssDecodedPKIXCertificate_Create(NULL, &c->encoding);
862 if (!dc) { 867 if (!dc) {
863 goto loser; 868 goto loser;
864 } 869 }
865 cc = (CERTCertificate *)dc->data; 870 cc = (CERTCertificate *)dc->data;
(...skipping 14 matching lines...) Expand all
880 } 885 }
881 } 886 }
882 cc = (CERTCertificate *)dc->data; 887 cc = (CERTCertificate *)dc->data;
883 PORT_Assert(cc); 888 PORT_Assert(cc);
884 if (!cc) { 889 if (!cc) {
885 nss_SetError(NSS_ERROR_INTERNAL_ERROR); 890 nss_SetError(NSS_ERROR_INTERNAL_ERROR);
886 goto loser; 891 goto loser;
887 } 892 }
888 if (!cc->nssCertificate || forceUpdate) { 893 if (!cc->nssCertificate || forceUpdate) {
889 fill_CERTCertificateFields(c, cc, forceUpdate); 894 fill_CERTCertificateFields(c, cc, forceUpdate);
890 } else if (!cc->trust && !c->object.cryptoContext) { 895 } else if (CERT_GetCertTrust(cc, &certTrust) != SECSuccess &&
896 !c->object.cryptoContext) {
891 /* if it's a perm cert, it might have been stored before the 897 /* if it's a perm cert, it might have been stored before the
892 * trust, so look for the trust again. But a temp cert can be 898 * trust, so look for the trust again. But a temp cert can be
893 * ignored. 899 * ignored.
894 */ 900 */
895 CERTCertTrust* trust = NULL; 901 CERTCertTrust* trust = NULL;
896 trust = nssTrust_GetCERTCertTrustForCert(c, cc); 902 trust = nssTrust_GetCERTCertTrustForCert(c, cc);
903
904 CERT_LockCertTrust(cc);
897 cc->trust = trust; 905 cc->trust = trust;
906 CERT_UnlockCertTrust(cc);
898 } 907 }
899 908
900 loser: 909 loser:
901 nssPKIObject_Unlock(&c->object); 910 nssPKIObject_Unlock(&c->object);
902 return cc; 911 return cc;
903 } 912 }
904 913
905 NSS_IMPLEMENT CERTCertificate * 914 NSS_IMPLEMENT CERTCertificate *
906 STAN_ForceCERTCertificateUpdate(NSSCertificate *c) 915 STAN_ForceCERTCertificateUpdate(NSSCertificate *c)
907 { 916 {
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
1079 NSS_EXTERN PRStatus 1088 NSS_EXTERN PRStatus
1080 STAN_ChangeCertTrust(CERTCertificate *cc, CERTCertTrust *trust) 1089 STAN_ChangeCertTrust(CERTCertificate *cc, CERTCertTrust *trust)
1081 { 1090 {
1082 PRStatus nssrv; 1091 PRStatus nssrv;
1083 NSSCertificate *c = STAN_GetNSSCertificate(cc); 1092 NSSCertificate *c = STAN_GetNSSCertificate(cc);
1084 NSSToken *tok; 1093 NSSToken *tok;
1085 NSSTrustDomain *td; 1094 NSSTrustDomain *td;
1086 NSSTrust *nssTrust; 1095 NSSTrust *nssTrust;
1087 NSSArena *arena; 1096 NSSArena *arena;
1088 CERTCertTrust *oldTrust; 1097 CERTCertTrust *oldTrust;
1098 CERTCertTrust *newTrust;
1089 nssListIterator *tokens; 1099 nssListIterator *tokens;
1090 PRBool moving_object; 1100 PRBool moving_object;
1091 nssCryptokiObject *newInstance; 1101 nssCryptokiObject *newInstance;
1092 nssPKIObject *pkiob; 1102 nssPKIObject *pkiob;
1093 1103
1094 if (c == NULL) { 1104 if (c == NULL) {
1095 return SECFailure; 1105 return PR_FAILURE;
1096 } 1106 }
1097 oldTrust = nssTrust_GetCERTCertTrustForCert(c, cc); 1107 oldTrust = nssTrust_GetCERTCertTrustForCert(c, cc);
1098 if (oldTrust) { 1108 if (oldTrust) {
1099 if (memcmp(oldTrust, trust, sizeof (CERTCertTrust)) == 0) { 1109 if (memcmp(oldTrust, trust, sizeof (CERTCertTrust)) == 0) {
1100 /* ... and the new trust is no different, done) */ 1110 /* ... and the new trust is no different, done) */
1101 return PR_SUCCESS; 1111 return PR_SUCCESS;
1102 } else { 1112 } else {
1103 /* take over memory already allocated in cc's arena */ 1113 /* take over memory already allocated in cc's arena */
1104 » cc->trust = oldTrust; 1114 » newTrust = oldTrust;
1105 } 1115 }
1106 } else { 1116 } else {
1107 » cc->trust = PORT_ArenaAlloc(cc->arena, sizeof(CERTCertTrust)); 1117 » newTrust = PORT_ArenaAlloc(cc->arena, sizeof(CERTCertTrust));
1108 } 1118 }
1109 memcpy(cc->trust, trust, sizeof(CERTCertTrust)); 1119 memcpy(newTrust, trust, sizeof(CERTCertTrust));
1120 CERT_LockCertTrust(cc);
1121 cc->trust = newTrust;
1122 CERT_UnlockCertTrust(cc);
1110 /* Set the NSSCerticate's trust */ 1123 /* Set the NSSCerticate's trust */
1111 arena = nssArena_Create(); 1124 arena = nssArena_Create();
1112 if (!arena) return PR_FAILURE; 1125 if (!arena) return PR_FAILURE;
1113 nssTrust = nss_ZNEW(arena, NSSTrust); 1126 nssTrust = nss_ZNEW(arena, NSSTrust);
1114 if (!nssTrust) { 1127 if (!nssTrust) {
1115 nssArena_Destroy(arena); 1128 nssArena_Destroy(arena);
1116 return PR_FAILURE; 1129 return PR_FAILURE;
1117 } 1130 }
1118 pkiob = nssPKIObject_Create(arena, NULL, cc->dbhandle, NULL, nssPKILock); 1131 pkiob = nssPKIObject_Create(arena, NULL, cc->dbhandle, NULL, nssPKILock);
1119 if (!pkiob) { 1132 if (!pkiob) {
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after
1413 td = STAN_GetDefaultTrustDomain(); 1426 td = STAN_GetDefaultTrustDomain();
1414 cc = STAN_GetDefaultCryptoContext(); 1427 cc = STAN_GetDefaultCryptoContext();
1415 printf("\n\nCertificates in the cache:\n"); 1428 printf("\n\nCertificates in the cache:\n");
1416 nssTrustDomain_DumpCacheInfo(td, cert_dump_iter, NULL); 1429 nssTrustDomain_DumpCacheInfo(td, cert_dump_iter, NULL);
1417 printf("\n\nCertificates in the temporary store:\n"); 1430 printf("\n\nCertificates in the temporary store:\n");
1418 if (cc->certStore) { 1431 if (cc->certStore) {
1419 nssCertificateStore_DumpStoreInfo(cc->certStore, cert_dump_iter, NULL); 1432 nssCertificateStore_DumpStoreInfo(cc->certStore, cert_dump_iter, NULL);
1420 } 1433 }
1421 } 1434 }
1422 1435
OLDNEW
« no previous file with comments | « mozilla/security/nss/lib/pkcs7/p7decode.c ('k') | mozilla/security/nss/lib/softoken/pkcs11c.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698