Chromium Code Reviews| Index: net/socket/ssl_server_socket_openssl.cc |
| diff --git a/net/socket/ssl_server_socket_openssl.cc b/net/socket/ssl_server_socket_openssl.cc |
| index 556f87d33e3298703eb01aebad33aa365bca8c08..034a34b68e82275eb0278eaa5eeaf4dad5dfd5ff 100644 |
| --- a/net/socket/ssl_server_socket_openssl.cc |
| +++ b/net/socket/ssl_server_socket_openssl.cc |
| @@ -616,10 +616,31 @@ int SSLServerSocketOpenSSL::Init() { |
| // Set certificate and private key. |
| DCHECK(cert_->os_cert_handle()); |
| +#if defined(USE_OPENSSL_CERTS) |
| if (SSL_use_certificate(ssl_, cert_->os_cert_handle()) != 1) { |
| LOG(ERROR) << "Cannot set certificate."; |
| return ERR_UNEXPECTED; |
| } |
| +#else |
| + // Convert OSCertHandle to X509 structure. |
| + std::string der_string; |
| + if (!X509Certificate::GetDEREncoded(cert_->os_cert_handle(), &der_string)) |
| + return ERR_UNEXPECTED; |
| + |
| + const unsigned char* der_string_array = |
| + reinterpret_cast<const unsigned char*>(der_string.data()); |
| + |
| + X509* cert = d2i_X509(NULL, &der_string_array, der_string.length()); |
|
wtc
2014/06/11 16:50:39
Nit: the |cert_| member is of the X509Certificate
haavardm
2014/06/11 18:09:27
Done.
|
| + if (!cert) |
| + return ERR_UNEXPECTED; |
| + |
| + // On success, SSL_use_certificate counts up the reference count on cert. |
| + if (SSL_use_certificate(ssl_, cert) != 1) { |
|
wtc
2014/06/11 16:50:39
Does |ssl_| own |cert| if this SSL_use_certificate
haavardm
2014/06/11 18:09:27
It counts up the reference counting and will free
|
| + LOG(ERROR) << "Cannot set certificate."; |
| + X509_free(cert); |
| + return ERR_UNEXPECTED; |
| + } |
| +#endif // USE_OPENSSL_CERTS |
| DCHECK(key_->key()); |
| if (SSL_use_PrivateKey(ssl_, key_->key()) != 1) { |