(
vm: &VirtualMachine,
b: &mut SslContextBuilder,
)
| 4018 | static CERT_DIR: &'static str = "/system/etc/security/cacerts"; |
| 4019 | |
| 4020 | pub(super) fn load_client_ca_list( |
| 4021 | vm: &VirtualMachine, |
| 4022 | b: &mut SslContextBuilder, |
| 4023 | ) -> Result<(), PyBaseExceptionRef> { |
| 4024 | let root = Path::new(CERT_DIR); |
| 4025 | if !root.is_dir() { |
| 4026 | return Err(vm |
| 4027 | .new_os_subtype_error( |
| 4028 | vm.ctx.exceptions.file_not_found_error.to_owned(), |
| 4029 | None, |
| 4030 | CERT_DIR.to_string(), |
| 4031 | ) |
| 4032 | .upcast()); |
| 4033 | } |
| 4034 | |
| 4035 | let mut combined_pem = String::new(); |
| 4036 | let entries = read_dir(root) |
| 4037 | .map_err(|err| vm.new_os_error(format!("read cert root: {}", err)))?; |
| 4038 | for entry in entries { |
| 4039 | let entry = |
| 4040 | entry.map_err(|err| vm.new_os_error(format!("iter cert root: {}", err)))?; |
| 4041 | |
| 4042 | let path = entry.path(); |
| 4043 | if !path.is_file() { |
| 4044 | continue; |
| 4045 | } |
| 4046 | |
| 4047 | File::open(&path) |
| 4048 | .and_then(|mut file| file.read_to_string(&mut combined_pem)) |
| 4049 | .map_err(|err| { |
| 4050 | vm.new_os_error(format!("open cert file {}: {}", path.display(), err)) |
| 4051 | })?; |
| 4052 | |
| 4053 | combined_pem.push('\n'); |
| 4054 | } |
| 4055 | |
| 4056 | let mut store_b = |
| 4057 | X509StoreBuilder::new().map_err(|err| convert_openssl_error(vm, err))?; |
| 4058 | let x509_vec = X509::stack_from_pem(combined_pem.as_bytes()) |
| 4059 | .map_err(|err| convert_openssl_error(vm, err))?; |
| 4060 | for x509 in x509_vec { |
| 4061 | store_b |
| 4062 | .add_cert(x509) |
| 4063 | .map_err(|err| convert_openssl_error(vm, err))?; |
| 4064 | } |
| 4065 | b.set_cert_store(store_b.build()); |
| 4066 | |
| 4067 | Ok(()) |
| 4068 | } |
| 4069 | } |
| 4070 | } |
| 4071 |
no test coverage detected