| Index: net/third_party/nss/patches/clientauth.patch
|
| ===================================================================
|
| --- net/third_party/nss/patches/clientauth.patch (revision 196870)
|
| +++ net/third_party/nss/patches/clientauth.patch (working copy)
|
| @@ -1,7 +1,7 @@
|
| -diff -puN -r a/net/third_party/nss/ssl/ssl3con.c b/net/third_party/nss/ssl/ssl3con.c
|
| ---- a/net/third_party/nss/ssl/ssl3con.c 2012-11-09 15:34:12.258133766 -0800
|
| -+++ b/net/third_party/nss/ssl/ssl3con.c 2012-11-09 15:35:08.488958561 -0800
|
| -@@ -2033,6 +2033,9 @@ ssl3_ClientAuthTokenPresent(sslSessionID
|
| +diff -puN a/nss/lib/ssl/ssl3con.c b/nss/lib/ssl/ssl3con.c
|
| +--- a/nss/lib/ssl/ssl3con.c 2013-04-27 09:20:13.658889025 -0700
|
| ++++ b/nss/lib/ssl/ssl3con.c 2013-04-27 09:20:50.169405985 -0700
|
| +@@ -2155,6 +2155,9 @@ ssl3_ClientAuthTokenPresent(sslSessionID
|
| PRBool isPresent = PR_TRUE;
|
|
|
| /* we only care if we are doing client auth */
|
| @@ -11,7 +11,7 @@
|
| if (!sid || !sid->u.ssl3.clAuthValid) {
|
| return PR_TRUE;
|
| }
|
| -@@ -5226,24 +5229,33 @@ ssl3_SendCertificateVerify(sslSocket *ss
|
| +@@ -5348,24 +5351,35 @@ ssl3_SendCertificateVerify(sslSocket *ss
|
| }
|
|
|
| isTLS = (PRBool)(ss->ssl3.pwSpec->version > SSL_LIBRARY_VERSION_3_0);
|
| @@ -21,8 +21,10 @@
|
| - sslSessionID * sid = ss->sec.ci.sid;
|
| + if (ss->ssl3.platformClientKey) {
|
| +#ifdef NSS_PLATFORM_CLIENT_AUTH
|
| -+ rv = ssl3_PlatformSignHashes(&hashes, ss->ssl3.platformClientKey,
|
| -+ &buf, isTLS);
|
| ++ rv = ssl3_PlatformSignHashes(
|
| ++ &hashes, ss->ssl3.platformClientKey, &buf, isTLS,
|
| ++ CERT_GetCertKeyType(
|
| ++ &ss->ssl3.clientCertificate->subjectPublicKeyInfo));
|
| + ssl_FreePlatformKey(ss->ssl3.platformClientKey);
|
| + ss->ssl3.platformClientKey = (PlatformKey)NULL;
|
| +#endif /* NSS_PLATFORM_CLIENT_AUTH */
|
| @@ -61,7 +63,7 @@
|
| if (rv != SECSuccess) {
|
| goto done; /* err code was set by ssl3_SignHashes */
|
| }
|
| -@@ -5311,6 +5323,12 @@ ssl3_HandleServerHello(sslSocket *ss, SS
|
| +@@ -5433,6 +5447,12 @@ ssl3_HandleServerHello(sslSocket *ss, SS
|
| SECKEY_DestroyPrivateKey(ss->ssl3.clientPrivateKey);
|
| ss->ssl3.clientPrivateKey = NULL;
|
| }
|
| @@ -74,7 +76,7 @@
|
|
|
| temp = ssl3_ConsumeHandshakeNumber(ss, 2, &b, &length);
|
| if (temp < 0) {
|
| -@@ -5901,6 +5919,10 @@ ssl3_HandleCertificateRequest(sslSocket
|
| +@@ -6022,6 +6042,10 @@ ssl3_HandleCertificateRequest(sslSocket
|
| SSL3AlertDescription desc = illegal_parameter;
|
| SECItem cert_types = {siBuffer, NULL, 0};
|
| CERTDistNames ca_list;
|
| @@ -85,7 +87,7 @@
|
|
|
| SSL_TRC(3, ("%d: SSL3[%d]: handle certificate_request handshake",
|
| SSL_GETPID(), ss->fd));
|
| -@@ -5917,6 +5939,7 @@ ssl3_HandleCertificateRequest(sslSocket
|
| +@@ -6038,6 +6062,7 @@ ssl3_HandleCertificateRequest(sslSocket
|
| PORT_Assert(ss->ssl3.clientCertChain == NULL);
|
| PORT_Assert(ss->ssl3.clientCertificate == NULL);
|
| PORT_Assert(ss->ssl3.clientPrivateKey == NULL);
|
| @@ -93,7 +95,7 @@
|
|
|
| isTLS = (PRBool)(ss->ssl3.prSpec->version > SSL_LIBRARY_VERSION_3_0);
|
| rv = ssl3_ConsumeHandshakeVariable(ss, &cert_types, 1, &b, &length);
|
| -@@ -5983,6 +6006,18 @@ ssl3_HandleCertificateRequest(sslSocket
|
| +@@ -6104,6 +6129,18 @@ ssl3_HandleCertificateRequest(sslSocket
|
| desc = no_certificate;
|
| ss->ssl3.hs.ws = wait_hello_done;
|
|
|
| @@ -109,12 +111,12 @@
|
| + &ss->ssl3.clientPrivateKey);
|
| + } else
|
| +#endif
|
| - if (ss->getClientAuthData == NULL) {
|
| - rv = SECFailure; /* force it to send a no_certificate alert */
|
| + if (ss->getClientAuthData != NULL) {
|
| + /* XXX Should pass cert_types in this call!! */
|
| + rv = (SECStatus)(*ss->getClientAuthData)(ss->getClientAuthDataArg,
|
| +@@ -6113,12 +6150,52 @@ ssl3_HandleCertificateRequest(sslSocket
|
| } else {
|
| -@@ -5992,12 +6029,52 @@ ssl3_HandleCertificateRequest(sslSocket
|
| - &ss->ssl3.clientCertificate,
|
| - &ss->ssl3.clientPrivateKey);
|
| + rv = SECFailure; /* force it to send a no_certificate alert */
|
| }
|
| +
|
| switch (rv) {
|
| @@ -165,7 +167,7 @@
|
| /* check what the callback function returned */
|
| if ((!ss->ssl3.clientCertificate) || (!ss->ssl3.clientPrivateKey)) {
|
| /* we are missing either the key or cert */
|
| -@@ -6060,6 +6137,10 @@ loser:
|
| +@@ -6181,6 +6258,10 @@ loser:
|
| done:
|
| if (arena != NULL)
|
| PORT_FreeArena(arena, PR_FALSE);
|
| @@ -176,7 +178,7 @@
|
| return rv;
|
| }
|
|
|
| -@@ -6134,7 +6215,8 @@ ssl3_SendClientSecondRound(sslSocket *ss
|
| +@@ -6262,7 +6343,8 @@ ssl3_SendClientSecondRound(sslSocket *ss
|
|
|
| sendClientCert = !ss->ssl3.sendEmptyCert &&
|
| ss->ssl3.clientCertChain != NULL &&
|
| @@ -186,7 +188,7 @@
|
|
|
| /* We must wait for the server's certificate to be authenticated before
|
| * sending the client certificate in order to disclosing the client
|
| -@@ -10446,6 +10528,10 @@ ssl3_DestroySSL3Info(sslSocket *ss)
|
| +@@ -10815,6 +10897,10 @@ ssl3_DestroySSL3Info(sslSocket *ss)
|
|
|
| if (ss->ssl3.clientPrivateKey != NULL)
|
| SECKEY_DestroyPrivateKey(ss->ssl3.clientPrivateKey);
|
| @@ -197,9 +199,9 @@
|
|
|
| if (ss->ssl3.peerCertArena != NULL)
|
| ssl3_CleanupPeerCerts(ss);
|
| -diff -puN -r a/net/third_party/nss/ssl/ssl3ext.c b/net/third_party/nss/ssl/ssl3ext.c
|
| ---- a/net/third_party/nss/ssl/ssl3ext.c 2012-11-09 15:34:12.258133766 -0800
|
| -+++ b/net/third_party/nss/ssl/ssl3ext.c 2012-11-09 15:35:08.488958561 -0800
|
| +diff -puN a/nss/lib/ssl/ssl3ext.c b/nss/lib/ssl/ssl3ext.c
|
| +--- a/nss/lib/ssl/ssl3ext.c 2013-04-27 09:17:17.216390477 -0700
|
| ++++ b/nss/lib/ssl/ssl3ext.c 2013-04-27 09:20:50.169405985 -0700
|
| @@ -11,8 +11,8 @@
|
| #include "nssrenam.h"
|
| #include "nss.h"
|
| @@ -210,10 +212,10 @@
|
| #include "pk11pub.h"
|
| #ifdef NO_PKCS11_BYPASS
|
| #include "blapit.h"
|
| -diff -puN -r a/net/third_party/nss/ssl/sslauth.c b/net/third_party/nss/ssl/sslauth.c
|
| ---- a/net/third_party/nss/ssl/sslauth.c 2012-11-09 15:27:15.952019947 -0800
|
| -+++ b/net/third_party/nss/ssl/sslauth.c 2012-11-09 15:35:08.488958561 -0800
|
| -@@ -219,6 +219,28 @@ SSL_GetClientAuthDataHook(PRFileDesc *s,
|
| +diff -puN a/nss/lib/ssl/sslauth.c b/nss/lib/ssl/sslauth.c
|
| +--- a/nss/lib/ssl/sslauth.c 2013-04-27 09:20:36.319209880 -0700
|
| ++++ b/nss/lib/ssl/sslauth.c 2013-04-27 09:20:50.359408673 -0700
|
| +@@ -220,6 +220,28 @@ SSL_GetClientAuthDataHook(PRFileDesc *s,
|
| return SECSuccess;
|
| }
|
|
|
| @@ -242,10 +244,10 @@
|
| /* NEED LOCKS IN HERE. */
|
| SECStatus
|
| SSL_SetPKCS11PinArg(PRFileDesc *s, void *arg)
|
| -diff -puN -r a/net/third_party/nss/ssl/ssl.h b/net/third_party/nss/ssl/ssl.h
|
| ---- a/net/third_party/nss/ssl/ssl.h 2012-11-09 15:34:12.258133766 -0800
|
| -+++ b/net/third_party/nss/ssl/ssl.h 2012-11-09 15:35:08.488958561 -0800
|
| -@@ -483,6 +483,48 @@ typedef SECStatus (PR_CALLBACK *SSLGetCl
|
| +diff -puN a/nss/lib/ssl/ssl.h b/nss/lib/ssl/ssl.h
|
| +--- a/nss/lib/ssl/ssl.h 2013-04-27 09:20:36.319209880 -0700
|
| ++++ b/nss/lib/ssl/ssl.h 2013-04-27 09:20:50.409409383 -0700
|
| +@@ -505,6 +505,48 @@ typedef SECStatus (PR_CALLBACK *SSLGetCl
|
| SSL_IMPORT SECStatus SSL_GetClientAuthDataHook(PRFileDesc *fd,
|
| SSLGetClientAuthData f, void *a);
|
|
|
| @@ -294,10 +296,18 @@
|
|
|
| /*
|
| ** SNI extension processing callback function.
|
| -diff -puN -r a/net/third_party/nss/ssl/sslimpl.h b/net/third_party/nss/ssl/sslimpl.h
|
| ---- a/net/third_party/nss/ssl/sslimpl.h 2012-11-09 15:34:12.258133766 -0800
|
| -+++ b/net/third_party/nss/ssl/sslimpl.h 2012-11-09 15:36:42.600338478 -0800
|
| -@@ -32,6 +32,15 @@
|
| +diff -puN a/nss/lib/ssl/sslimpl.h b/nss/lib/ssl/sslimpl.h
|
| +--- a/nss/lib/ssl/sslimpl.h 2013-04-27 09:20:13.658889025 -0700
|
| ++++ b/nss/lib/ssl/sslimpl.h 2013-04-27 09:20:50.409409383 -0700
|
| +@@ -21,6 +21,7 @@
|
| + #include "sslerr.h"
|
| + #include "ssl3prot.h"
|
| + #include "hasht.h"
|
| ++#include "keythi.h"
|
| + #include "nssilock.h"
|
| + #include "pkcs11t.h"
|
| + #if defined(XP_UNIX) || defined(XP_BEOS)
|
| +@@ -32,6 +33,15 @@
|
|
|
| #include "sslt.h" /* for some formerly private types, now public */
|
|
|
| @@ -313,7 +323,7 @@
|
| /* to make some of these old enums public without namespace pollution,
|
| ** it was necessary to prepend ssl_ to the names.
|
| ** These #defines preserve compatibility with the old code here in libssl.
|
| -@@ -446,6 +455,14 @@ typedef SECStatus (*SSLCompressor)(void
|
| +@@ -444,6 +454,14 @@ typedef SECStatus (*SSLCompressor)(void
|
| int inlen);
|
| typedef SECStatus (*SSLDestroy)(void *context, PRBool freeit);
|
|
|
| @@ -328,7 +338,7 @@
|
|
|
|
|
| /*
|
| -@@ -870,6 +887,10 @@ struct ssl3StateStr {
|
| +@@ -862,6 +880,10 @@ struct ssl3StateStr {
|
|
|
| CERTCertificate * clientCertificate; /* used by client */
|
| SECKEYPrivateKey * clientPrivateKey; /* used by client */
|
| @@ -339,7 +349,7 @@
|
| CERTCertificateList *clientCertChain; /* used by client */
|
| PRBool sendEmptyCert; /* used by client */
|
|
|
| -@@ -1127,6 +1148,10 @@ const unsigned char * preferredCipher;
|
| +@@ -1119,6 +1141,10 @@ const unsigned char * preferredCipher;
|
| void *authCertificateArg;
|
| SSLGetClientAuthData getClientAuthData;
|
| void *getClientAuthDataArg;
|
| @@ -350,7 +360,7 @@
|
| SSLSNISocketConfig sniSocketConfig;
|
| void *sniSocketConfigArg;
|
| SSLBadCertHandler handleBadCert;
|
| -@@ -1700,7 +1725,6 @@ extern void ssl_FreePRSocket(PRFileDesc
|
| +@@ -1691,7 +1717,6 @@ extern void ssl_FreePRSocket(PRFileDesc
|
| * various ciphers */
|
| extern int ssl3_config_match_init(sslSocket *);
|
|
|
| @@ -358,7 +368,7 @@
|
| /* Create a new ref counted key pair object from two keys. */
|
| extern ssl3KeyPair * ssl3_NewKeyPair( SECKEYPrivateKey * privKey,
|
| SECKEYPublicKey * pubKey);
|
| -@@ -1740,6 +1764,26 @@ extern SECStatus ssl_InitSessionCacheLoc
|
| +@@ -1731,6 +1756,26 @@ extern SECStatus ssl_InitSessionCacheLoc
|
|
|
| extern SECStatus ssl_FreeSessionCacheLocks(void);
|
|
|
| @@ -371,7 +381,7 @@
|
| +// Implement the client CertificateVerify message for SSL3/TLS1.0
|
| +extern SECStatus ssl3_PlatformSignHashes(SSL3Hashes *hash,
|
| + PlatformKey key, SECItem *buf,
|
| -+ PRBool isTLS);
|
| ++ PRBool isTLS, KeyType keyType);
|
| +
|
| +// Converts a CERTCertList* (A collection of CERTCertificates) into a
|
| +// CERTCertificateList* (A collection of SECItems), or returns NULL if
|
| @@ -385,10 +395,10 @@
|
|
|
| /**************** DTLS-specific functions **************/
|
| extern void dtls_FreeQueuedMessage(DTLSQueuedMessage *msg);
|
| -diff -puN -r a/net/third_party/nss/ssl/sslplatf.c b/net/third_party/nss/ssl/sslplatf.c
|
| ---- a/net/third_party/nss/ssl/sslplatf.c 1969-12-31 16:00:00.000000000 -0800
|
| -+++ b/net/third_party/nss/ssl/sslplatf.c 2012-11-09 15:35:08.498958708 -0800
|
| -@@ -0,0 +1,399 @@
|
| +diff -puN a/nss/lib/ssl/sslplatf.c b/nss/lib/ssl/sslplatf.c
|
| +--- a/nss/lib/ssl/sslplatf.c 1969-12-31 16:00:00.000000000 -0800
|
| ++++ b/nss/lib/ssl/sslplatf.c 2013-04-27 09:20:50.409409383 -0700
|
| +@@ -0,0 +1,383 @@
|
| +/*
|
| + * Platform specific crypto wrappers
|
| + *
|
| @@ -501,15 +511,13 @@
|
| +}
|
| +
|
| +SECStatus
|
| -+ssl3_PlatformSignHashes(SSL3Hashes *hash, PlatformKey key, SECItem *buf,
|
| -+ PRBool isTLS)
|
| ++ssl3_PlatformSignHashes(SSL3Hashes *hash, PlatformKey key, SECItem *buf,
|
| ++ PRBool isTLS, KeyType keyType)
|
| +{
|
| + SECStatus rv = SECFailure;
|
| + PRBool doDerEncode = PR_FALSE;
|
| + SECItem hashItem;
|
| -+ HCRYPTKEY hKey = 0;
|
| + DWORD argLen = 0;
|
| -+ ALG_ID keyAlg = 0;
|
| + DWORD signatureLen = 0;
|
| + ALG_ID hashAlg = 0;
|
| + HCRYPTHASH hHash = 0;
|
| @@ -517,31 +525,16 @@
|
| + unsigned int i = 0;
|
| +
|
| + buf->data = NULL;
|
| -+ if (!CryptGetUserKey(key->hCryptProv, key->dwKeySpec, &hKey)) {
|
| -+ if (GetLastError() == NTE_NO_KEY) {
|
| -+ PORT_SetError(SEC_ERROR_NO_KEY);
|
| -+ } else {
|
| -+ PORT_SetError(SEC_ERROR_INVALID_KEY);
|
| -+ }
|
| -+ goto done;
|
| -+ }
|
| +
|
| -+ argLen = sizeof(keyAlg);
|
| -+ if (!CryptGetKeyParam(hKey, KP_ALGID, (BYTE*)&keyAlg, &argLen, 0)) {
|
| -+ PORT_SetError(SEC_ERROR_INVALID_KEY);
|
| -+ goto done;
|
| -+ }
|
| -+
|
| -+ switch (keyAlg) {
|
| -+ case CALG_RSA_KEYX:
|
| -+ case CALG_RSA_SIGN:
|
| ++ switch (keyType) {
|
| ++ case rsaKey:
|
| + hashAlg = CALG_SSL3_SHAMD5;
|
| + hashItem.data = hash->md5;
|
| + hashItem.len = sizeof(SSL3Hashes);
|
| + break;
|
| -+ case CALG_DSS_SIGN:
|
| -+ case CALG_ECDSA:
|
| -+ if (keyAlg == CALG_ECDSA) {
|
| ++ case dsaKey:
|
| ++ case ecKey:
|
| ++ if (keyType == ecKey) {
|
| + doDerEncode = PR_TRUE;
|
| + } else {
|
| + doDerEncode = isTLS;
|
| @@ -558,7 +551,7 @@
|
| +
|
| + if (!CryptCreateHash(key->hCryptProv, hashAlg, 0, 0, &hHash)) {
|
| + PORT_SetError(SSL_ERROR_SIGN_HASHES_FAILURE);
|
| -+ goto done;
|
| ++ goto done;
|
| + }
|
| + argLen = sizeof(hashLen);
|
| + if (!CryptGetHashParam(hHash, HP_HASHSIZE, (BYTE*)&hashLen, &argLen, 0)) {
|
| @@ -614,8 +607,6 @@
|
| +done:
|
| + if (hHash)
|
| + CryptDestroyHash(hHash);
|
| -+ if (hKey)
|
| -+ CryptDestroyKey(hKey);
|
| + if (rv != SECSuccess && buf->data) {
|
| + PORT_Free(buf->data);
|
| + buf->data = NULL;
|
| @@ -633,8 +624,8 @@
|
| +}
|
| +
|
| +SECStatus
|
| -+ssl3_PlatformSignHashes(SSL3Hashes *hash, PlatformKey key, SECItem *buf,
|
| -+ PRBool isTLS)
|
| ++ssl3_PlatformSignHashes(SSL3Hashes *hash, PlatformKey key, SECItem *buf,
|
| ++ PRBool isTLS, KeyType keyType)
|
| +{
|
| + SECStatus rv = SECFailure;
|
| + PRBool doDerEncode = PR_FALSE;
|
| @@ -667,7 +658,7 @@
|
| + * needed information is readily available on the key itself.
|
| + */
|
| + signatureLen = (cssmKey->KeyHeader.LogicalKeySizeInBits + 7) / 8;
|
| -+
|
| ++
|
| + if (signatureLen == 0) {
|
| + PORT_SetError(SEC_ERROR_INVALID_KEY);
|
| + goto done;
|
| @@ -678,16 +669,19 @@
|
| + goto done; /* error code was set. */
|
| +
|
| + sigAlg = cssmKey->KeyHeader.AlgorithmId;
|
| -+ switch (sigAlg) {
|
| -+ case CSSM_ALGID_RSA:
|
| ++ switch (keyType) {
|
| ++ case rsaKey:
|
| ++ PORT_Assert(sigAlg == CSSM_ALGID_RSA);
|
| + hashData.Data = hash->md5;
|
| + hashData.Length = sizeof(SSL3Hashes);
|
| + break;
|
| -+ case CSSM_ALGID_ECDSA:
|
| -+ case CSSM_ALGID_DSA:
|
| -+ if (sigAlg == CSSM_ALGID_ECDSA) {
|
| ++ case dsaKey:
|
| ++ case ecKey:
|
| ++ if (keyType == ecKey) {
|
| ++ PORT_Assert(sigAlg == CSSM_ALGID_ECDSA);
|
| + doDerEncode = PR_TRUE;
|
| + } else {
|
| ++ PORT_Assert(sigAlg == CSSM_ALGID_DSA);
|
| + doDerEncode = isTLS;
|
| + }
|
| + hashData.Data = hash->sha;
|
| @@ -712,7 +706,7 @@
|
| +
|
| + signatureData.Length = signatureLen;
|
| + signatureData.Data = (uint8*)buf->data;
|
| -+
|
| ++
|
| + cssmRv = CSSM_CSP_CreateSignatureContext(cspHandle, sigAlg, cssmCreds,
|
| + cssmKey, &cssmSignature);
|
| + if (cssmRv) {
|
| @@ -780,7 +774,7 @@
|
| +
|
| +SECStatus
|
| +ssl3_PlatformSignHashes(SSL3Hashes *hash, PlatformKey key, SECItem *buf,
|
| -+ PRBool isTLS)
|
| ++ PRBool isTLS, KeyType keyType)
|
| +{
|
| + PORT_SetError(PR_NOT_IMPLEMENTED_ERROR);
|
| + return SECFailure;
|
| @@ -788,10 +782,10 @@
|
| +#endif
|
| +
|
| +#endif /* NSS_PLATFORM_CLIENT_AUTH */
|
| -diff -puN -r a/net/third_party/nss/ssl/sslsock.c b/net/third_party/nss/ssl/sslsock.c
|
| ---- a/net/third_party/nss/ssl/sslsock.c 2012-11-09 15:34:12.268133912 -0800
|
| -+++ b/net/third_party/nss/ssl/sslsock.c 2012-11-09 15:35:08.498958708 -0800
|
| -@@ -335,6 +335,10 @@ ssl_DupSocket(sslSocket *os)
|
| +diff -puN a/nss/lib/ssl/sslsock.c b/nss/lib/ssl/sslsock.c
|
| +--- a/nss/lib/ssl/sslsock.c 2013-04-27 09:19:05.777927838 -0700
|
| ++++ b/nss/lib/ssl/sslsock.c 2013-04-27 09:20:50.419409524 -0700
|
| +@@ -337,6 +337,10 @@ ssl_DupSocket(sslSocket *os)
|
| ss->authCertificateArg = os->authCertificateArg;
|
| ss->getClientAuthData = os->getClientAuthData;
|
| ss->getClientAuthDataArg = os->getClientAuthDataArg;
|
| @@ -802,7 +796,7 @@
|
| ss->sniSocketConfig = os->sniSocketConfig;
|
| ss->sniSocketConfigArg = os->sniSocketConfigArg;
|
| ss->handleBadCert = os->handleBadCert;
|
| -@@ -1712,6 +1716,12 @@ SSL_ReconfigFD(PRFileDesc *model, PRFile
|
| +@@ -1725,6 +1729,12 @@ SSL_ReconfigFD(PRFileDesc *model, PRFile
|
| ss->getClientAuthData = sm->getClientAuthData;
|
| if (sm->getClientAuthDataArg)
|
| ss->getClientAuthDataArg = sm->getClientAuthDataArg;
|
| @@ -815,7 +809,7 @@
|
| if (sm->sniSocketConfig)
|
| ss->sniSocketConfig = sm->sniSocketConfig;
|
| if (sm->sniSocketConfigArg)
|
| -@@ -2942,6 +2952,10 @@ ssl_NewSocket(PRBool makeLocks, SSLProto
|
| +@@ -2977,6 +2987,10 @@ ssl_NewSocket(PRBool makeLocks, SSLProto
|
| ss->sniSocketConfig = NULL;
|
| ss->sniSocketConfigArg = NULL;
|
| ss->getClientAuthData = NULL;
|
|
|