| Index: net/socket/ssl_client_socket_nss.cc
|
| ===================================================================
|
| --- net/socket/ssl_client_socket_nss.cc (revision 64813)
|
| +++ net/socket/ssl_client_socket_nss.cc (working copy)
|
| @@ -366,7 +366,7 @@
|
| // and the other elements are in the order given by the server.
|
| class PeerCertificateChain {
|
| public:
|
| - PeerCertificateChain(PRFileDesc* nss_fd)
|
| + explicit PeerCertificateChain(PRFileDesc* nss_fd)
|
| : num_certs_(0),
|
| certs_(NULL) {
|
| SECStatus rv = SSL_PeerCertificateChain(nss_fd, NULL, &num_certs_);
|
| @@ -1105,6 +1105,8 @@
|
| SSL_CONNECTION_COMPRESSION_MASK) <<
|
| SSL_CONNECTION_COMPRESSION_SHIFT;
|
|
|
| + // NSS 3.12.x doesn't have version macros for TLS 1.1 and 1.2 (because NSS
|
| + // doesn't support them yet), so we use 0x0302 and 0x0303 directly.
|
| int version = SSL_CONNECTION_VERSION_UNKNOWN;
|
| if (channel_info.protocolVersion < SSL_LIBRARY_VERSION_3_0) {
|
| // All versions less than SSL_LIBRARY_VERSION_3_0 are treated as SSL
|
| @@ -1114,6 +1116,10 @@
|
| version = SSL_CONNECTION_VERSION_SSL3;
|
| } else if (channel_info.protocolVersion == SSL_LIBRARY_VERSION_3_1_TLS) {
|
| version = SSL_CONNECTION_VERSION_TLS1;
|
| + } else if (channel_info.protocolVersion == 0x0302) {
|
| + version = SSL_CONNECTION_VERSION_TLS1_1;
|
| + } else if (channel_info.protocolVersion == 0x0303) {
|
| + version = SSL_CONNECTION_VERSION_TLS1_2;
|
| }
|
| ssl_connection_status_ |=
|
| (version & SSL_CONNECTION_VERSION_MASK) <<
|
| @@ -1651,6 +1657,11 @@
|
| CERTDistNames* ca_names,
|
| CERTCertificate** result_certificate,
|
| SECKEYPrivateKey** result_private_key) {
|
| + // NSS passes a null ca_names if SSL 2.0 is used. Just fail rather than
|
| + // trying to make this work, as we plan to remove SSL 2.0 support soon.
|
| + if (!ca_names)
|
| + return SECFailure;
|
| +
|
| SSLClientSocketNSS* that = reinterpret_cast<SSLClientSocketNSS*>(arg);
|
|
|
| that->client_auth_cert_needed_ = !that->ssl_config_.send_client_cert;
|
|
|