From: Martin Baulig Date: Wed, 16 Nov 2016 20:48:14 +0000 (+0100) Subject: Merge pull request #3950 from mono/work-btls-sni-2 X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=commitdiff_plain;h=f6a57ee08a1cc39df05809c04545bb854256b78b;p=mono.git Merge pull request #3950 from mono/work-btls-sni-2 [BTLS]: Add MonoBtlsSsl.GetServerName() and set MonoTlsConnectionInfo.PeerDomainName (cherry picked from commit e6aa904d9d47186f01e92afc1d1f6d334aa46d1e) --- diff --git a/mcs/class/System/Mono.Btls/MonoBtlsContext.cs b/mcs/class/System/Mono.Btls/MonoBtlsContext.cs index 051656ce053..343ecc47e45 100644 --- a/mcs/class/System/Mono.Btls/MonoBtlsContext.cs +++ b/mcs/class/System/Mono.Btls/MonoBtlsContext.cs @@ -270,11 +270,13 @@ namespace Mono.Btls var cipher = (CipherSuiteCode)ssl.GetCipher (); var protocol = (TlsProtocolCode)ssl.GetVersion (); + var serverName = ssl.GetServerName (); Debug ("GET CONNECTION INFO: {0:x}:{0} {1:x}:{1} {2}", cipher, protocol, (TlsProtocolCode)protocol); connectionInfo = new MonoTlsConnectionInfo { CipherSuiteCode = cipher, - ProtocolVersion = GetProtocol (protocol) + ProtocolVersion = GetProtocol (protocol), + PeerDomainName = serverName }; } diff --git a/mcs/class/System/Mono.Btls/MonoBtlsSsl.cs b/mcs/class/System/Mono.Btls/MonoBtlsSsl.cs index d7510901357..8ef902f3a1c 100644 --- a/mcs/class/System/Mono.Btls/MonoBtlsSsl.cs +++ b/mcs/class/System/Mono.Btls/MonoBtlsSsl.cs @@ -124,6 +124,9 @@ namespace Mono.Btls [DllImport (BTLS_DYLIB)] extern static int mono_btls_ssl_set_server_name (IntPtr handle, IntPtr name); + [DllImport (BTLS_DYLIB)] + extern static IntPtr mono_btls_ssl_get_server_name (IntPtr handle); + static BoringSslHandle Create_internal (MonoBtlsSslCtx ctx) { var handle = mono_btls_ssl_new (ctx.Handle.DangerousGetHandle ()); @@ -409,6 +412,16 @@ namespace Mono.Btls } } + public string GetServerName () + { + CheckThrow (); + var namePtr = mono_btls_ssl_get_server_name ( + Handle.DangerousGetHandle ()); + if (namePtr == IntPtr.Zero) + return null; + return Marshal.PtrToStringAnsi (namePtr); + } + protected override void Close () { mono_btls_ssl_close (Handle.DangerousGetHandle ()); diff --git a/mono/btls/btls-ssl.c b/mono/btls/btls-ssl.c index f18d6c19247..dda74ec4b5e 100644 --- a/mono/btls/btls-ssl.c +++ b/mono/btls/btls-ssl.c @@ -207,3 +207,9 @@ mono_btls_ssl_set_server_name (MonoBtlsSsl *ptr, const char *name) { return SSL_set_tlsext_host_name (ptr->ssl, name); } + +MONO_API const char * +mono_btls_ssl_get_server_name (MonoBtlsSsl *ptr) +{ + return SSL_get_servername (ptr->ssl, TLSEXT_NAMETYPE_host_name); +} diff --git a/mono/btls/btls-ssl.h b/mono/btls/btls-ssl.h index 10da4364881..98b017340e1 100644 --- a/mono/btls/btls-ssl.h +++ b/mono/btls/btls-ssl.h @@ -77,6 +77,9 @@ mono_btls_ssl_set_verify_param (MonoBtlsSsl *ptr, const MonoBtlsX509VerifyParam int mono_btls_ssl_set_server_name (MonoBtlsSsl *ptr, const char *name); +const char * +mono_btls_ssl_get_server_name (MonoBtlsSsl *ptr); + void mono_btls_ssl_destroy (MonoBtlsSsl *ptr);