Skip to content

Commit 65f3a1e

Browse files
committed
Implement SSL_CTX_set_cert_store
1 parent 902622d commit 65f3a1e

File tree

4 files changed

+27
-5
lines changed

4 files changed

+27
-5
lines changed

rustls-libssl/build.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ const ENTRYPOINTS: &[&str] = &[
9696
"SSL_CTX_set_alpn_protos",
9797
"SSL_CTX_set_alpn_select_cb",
9898
"SSL_CTX_set_cert_cb",
99+
"SSL_CTX_set_cert_store",
99100
"SSL_CTX_set_cipher_list",
100101
"SSL_CTX_set_ciphersuites",
101102
"SSL_CTX_set_client_CA_list",

rustls-libssl/src/entry.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,12 @@ entry! {
297297
}
298298
}
299299

300+
entry! {
301+
pub fn _SSL_CTX_set_cert_store(ctx: *mut SSL_CTX, store: *mut X509_STORE) {
302+
try_clone_arc!(ctx).get_mut().set_x509_store(store);
303+
}
304+
}
305+
300306
fn load_verify_files(
301307
ctx: &NotThreadSafe<SSL_CTX>,
302308
file_names: impl Iterator<Item = PathBuf>,

rustls-libssl/src/lib.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ use rustls::{
2121
};
2222

2323
use not_thread_safe::NotThreadSafe;
24+
use x509::OwnedX509Store;
2425

2526
mod bio;
2627
mod cache;
@@ -435,7 +436,7 @@ impl SslContext {
435436
verify_mode: VerifyMode::default(),
436437
verify_depth: -1,
437438
verify_roots: RootCertStore::empty(),
438-
verify_x509_store: x509::OwnedX509Store::new(),
439+
verify_x509_store: OwnedX509Store::default(),
439440
alpn: vec![],
440441
default_cert_file: None,
441442
default_cert_dir: None,
@@ -615,6 +616,13 @@ impl SslContext {
615616
self.verify_x509_store.pointer()
616617
}
617618

619+
fn set_x509_store(&mut self, store: *mut X509_STORE) {
620+
if store.is_null() {
621+
return;
622+
}
623+
self.verify_x509_store = OwnedX509Store::new(store);
624+
}
625+
618626
fn set_alpn_offer(&mut self, alpn: Vec<Vec<u8>>) {
619627
self.alpn = alpn;
620628
}

rustls-libssl/src/x509.rs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -237,17 +237,24 @@ pub struct OwnedX509Store {
237237
}
238238

239239
impl OwnedX509Store {
240-
pub fn new() -> Self {
241-
Self {
242-
raw: unsafe { X509_STORE_new() },
243-
}
240+
/// Create a new one, from a (donated) existing ref.
241+
pub fn new(store: *mut X509_STORE) -> Self {
242+
Self { raw: store }
244243
}
245244

246245
pub fn pointer(&self) -> *mut X509_STORE {
247246
self.raw
248247
}
249248
}
250249

250+
impl Default for OwnedX509Store {
251+
fn default() -> Self {
252+
Self {
253+
raw: unsafe { X509_STORE_new() },
254+
}
255+
}
256+
}
257+
251258
impl Drop for OwnedX509Store {
252259
fn drop(&mut self) {
253260
unsafe {

0 commit comments

Comments
 (0)