Fix set_hostname
It was previously failing to null terminate the hostname string (was anyone actually using this?). Also move the macro expansion to the C shim.
This commit is contained in:
parent
cb89b23a15
commit
9d0acfe615
|
|
@ -606,6 +606,8 @@ extern "C" {
|
||||||
pub fn SSL_CTX_add_extra_chain_cert(ctx: *mut SSL_CTX, x509: *mut X509) -> c_long;
|
pub fn SSL_CTX_add_extra_chain_cert(ctx: *mut SSL_CTX, x509: *mut X509) -> c_long;
|
||||||
#[link_name = "SSL_CTX_set_read_ahead_shim"]
|
#[link_name = "SSL_CTX_set_read_ahead_shim"]
|
||||||
pub fn SSL_CTX_set_read_ahead(ctx: *mut SSL_CTX, m: c_long) -> c_long;
|
pub fn SSL_CTX_set_read_ahead(ctx: *mut SSL_CTX, m: c_long) -> c_long;
|
||||||
|
#[link_name = "SSL_set_tlsext_host_name_shim"]
|
||||||
|
pub fn SSL_set_tlsext_host_name(s: *mut SSL, name: *const c_char) -> c_long;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub mod probe;
|
pub mod probe;
|
||||||
|
|
|
||||||
|
|
@ -78,3 +78,7 @@ long SSL_CTX_add_extra_chain_cert_shim(SSL_CTX *ctx, X509 *x509) {
|
||||||
long SSL_CTX_set_read_ahead_shim(SSL_CTX *ctx, long m) {
|
long SSL_CTX_set_read_ahead_shim(SSL_CTX *ctx, long m) {
|
||||||
return SSL_CTX_set_read_ahead(ctx, m);
|
return SSL_CTX_set_read_ahead(ctx, m);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
long SSL_set_tlsext_host_name_shim(SSL *s, char *name) {
|
||||||
|
return SSL_set_tlsext_host_name(s, name);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -655,16 +655,8 @@ impl Ssl {
|
||||||
|
|
||||||
/// Set the host name to be used with SNI (Server Name Indication).
|
/// Set the host name to be used with SNI (Server Name Indication).
|
||||||
pub fn set_hostname(&self, hostname: &str) -> Result<(), SslError> {
|
pub fn set_hostname(&self, hostname: &str) -> Result<(), SslError> {
|
||||||
let ret = unsafe {
|
let cstr = CString::new(hostname).unwrap();
|
||||||
// This is defined as a macro:
|
let ret = unsafe { ffi::SSL_set_tlsext_host_name(self.ssl, cstr.as_ptr()) };
|
||||||
// #define SSL_set_tlsext_host_name(s,name) \
|
|
||||||
// SSL_ctrl(s,SSL_CTRL_SET_TLSEXT_HOSTNAME,TLSEXT_NAMETYPE_host_name,(char *)name)
|
|
||||||
|
|
||||||
let hostname = CString::new(hostname.as_bytes()).unwrap();
|
|
||||||
ffi::SSL_ctrl(self.ssl, ffi::SSL_CTRL_SET_TLSEXT_HOSTNAME,
|
|
||||||
ffi::TLSEXT_NAMETYPE_host_name,
|
|
||||||
hostname.as_ptr() as *mut c_void)
|
|
||||||
};
|
|
||||||
|
|
||||||
// For this case, 0 indicates failure.
|
// For this case, 0 indicates failure.
|
||||||
if ret == 0 {
|
if ret == 0 {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue