Implement saving peer cert as part of session.
diff --git a/library/ssl_tls.c b/library/ssl_tls.c
index 6ecdceb..5337895 100644
--- a/library/ssl_tls.c
+++ b/library/ssl_tls.c
@@ -3224,6 +3224,7 @@
int ssl_get_session( const ssl_context *ssl, ssl_session *dst )
{
+ int ret;
ssl_session *src;
if( ssl == NULL ||
@@ -3239,10 +3240,23 @@
ssl_session_free( dst );
memcpy( dst, src, sizeof( ssl_session ) );
- /*
- * For now, just set peer_cert to NULL, deep-copy not implemented yet
- */
- dst->peer_cert = NULL;
+#if defined(POLARSSL_X509_PARSE_C)
+ if( src->peer_cert != NULL )
+ {
+ if( ( dst->peer_cert = polarssl_malloc( sizeof(x509_cert) ) ) == NULL )
+ return( POLARSSL_ERR_SSL_MALLOC_FAILED );
+
+ memset( dst->peer_cert, 0, sizeof(x509_cert) );
+
+ if( ( ret = x509parse_crt( dst->peer_cert, src->peer_cert->raw.p,
+ src->peer_cert->raw.len ) != 0 ) )
+ {
+ polarssl_free( dst->peer_cert );
+ dst->peer_cert = NULL;
+ return( ret );
+ }
+ }
+#endif /* POLARSSL_X509_PARSE_C */
return( 0 );
}