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

Unified Diff: net/third_party/nss/patches/peercertchain2.patch

Issue 25107004: Change SSL_PeerCertificateChain to return a CERTCertList. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Sync Created 7 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/third_party/nss/patches/applypatches.sh ('k') | net/third_party/nss/ssl/ssl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/third_party/nss/patches/peercertchain2.patch
===================================================================
--- net/third_party/nss/patches/peercertchain2.patch (revision 0)
+++ net/third_party/nss/patches/peercertchain2.patch (revision 0)
@@ -0,0 +1,107 @@
+Index: net/third_party/nss/ssl/ssl.h
+===================================================================
+--- net/third_party/nss/ssl/ssl.h (revision 225295)
++++ net/third_party/nss/ssl/ssl.h (working copy)
+@@ -434,6 +434,15 @@
+ */
+ SSL_IMPORT CERTCertificate *SSL_PeerCertificate(PRFileDesc *fd);
+
++/*
++** Return the certificates presented by the SSL peer. If the SSL peer
++** did not present certificates, return NULL with the
++** SSL_ERROR_NO_CERTIFICATE error. On failure, return NULL with an error
++** code other than SSL_ERROR_NO_CERTIFICATE.
++** "fd" the socket "file" descriptor
++*/
++SSL_IMPORT CERTCertList *SSL_PeerCertificateChain(PRFileDesc *fd);
++
+ /* SSL_PeerStapledOCSPResponses returns the OCSP responses that were provided
+ * by the TLS server. The return value is a pointer to an internal SECItemArray
+ * that contains the returned OCSP responses; it is only valid until the
+@@ -463,18 +472,6 @@
+ SSLKEAType kea);
+
+ /*
+-** Return references to the certificates presented by the SSL peer.
+-** |maxNumCerts| must contain the size of the |certs| array. On successful
+-** return, |*numCerts| contains the number of certificates available and
+-** |certs| will contain references to as many certificates as would fit.
+-** Therefore if |*numCerts| contains a value less than or equal to
+-** |maxNumCerts|, then all certificates were returned.
+-*/
+-SSL_IMPORT SECStatus SSL_PeerCertificateChain(
+- PRFileDesc *fd, CERTCertificate **certs,
+- unsigned int *numCerts, unsigned int maxNumCerts);
+-
+-/*
+ ** Authenticate certificate hook. Called when a certificate comes in
+ ** (because of SSL_REQUIRE_CERTIFICATE in SSL_Enable) to authenticate the
+ ** certificate.
+Index: net/third_party/nss/ssl/sslauth.c
+===================================================================
+--- net/third_party/nss/ssl/sslauth.c (revision 225295)
++++ net/third_party/nss/ssl/sslauth.c (working copy)
+@@ -28,38 +28,43 @@
+ }
+
+ /* NEED LOCKS IN HERE. */
+-SECStatus
+-SSL_PeerCertificateChain(PRFileDesc *fd, CERTCertificate **certs,
+- unsigned int *numCerts, unsigned int maxNumCerts)
++CERTCertList *
++SSL_PeerCertificateChain(PRFileDesc *fd)
+ {
+ sslSocket *ss;
+- ssl3CertNode* cur;
++ CERTCertList *chain = NULL;
++ CERTCertificate *cert;
++ ssl3CertNode *cur;
+
+ ss = ssl_FindSocket(fd);
+ if (!ss) {
+ SSL_DBG(("%d: SSL[%d]: bad socket in PeerCertificateChain",
+ SSL_GETPID(), fd));
+- return SECFailure;
++ return NULL;
+ }
+- if (!ss->opt.useSecurity)
+- return SECFailure;
+-
+- if (ss->sec.peerCert == NULL) {
+- *numCerts = 0;
+- return SECSuccess;
++ if (!ss->opt.useSecurity || !ss->sec.peerCert) {
++ PORT_SetError(SSL_ERROR_NO_CERTIFICATE);
++ return NULL;
+ }
+-
+- *numCerts = 1; /* for the leaf certificate */
+- if (maxNumCerts > 0)
+- certs[0] = CERT_DupCertificate(ss->sec.peerCert);
+-
++ chain = CERT_NewCertList();
++ if (!chain) {
++ return NULL;
++ }
++ cert = CERT_DupCertificate(ss->sec.peerCert);
++ if (CERT_AddCertToListTail(chain, cert) != SECSuccess) {
++ goto loser;
++ }
+ for (cur = ss->ssl3.peerCertChain; cur; cur = cur->next) {
+- if (*numCerts < maxNumCerts)
+- certs[*numCerts] = CERT_DupCertificate(cur->cert);
+- (*numCerts)++;
++ cert = CERT_DupCertificate(cur->cert);
++ if (CERT_AddCertToListTail(chain, cert) != SECSuccess) {
++ goto loser;
++ }
+ }
++ return chain;
+
+- return SECSuccess;
++loser:
++ CERT_DestroyCertList(chain);
++ return NULL;
+ }
+
+ /* NEED LOCKS IN HERE. */
« no previous file with comments | « net/third_party/nss/patches/applypatches.sh ('k') | net/third_party/nss/ssl/ssl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698