(path: &Path)
| 377 | } |
| 378 | |
| 379 | fn read_single_cert(path: &Path) -> crate::Result<CertificateDer<'static>> { |
| 380 | let bytes = fs::read(path).map_err(|e| crate::Error::Config { |
| 381 | detail: format!("read cert {}: {e}", path.display()), |
| 382 | })?; |
| 383 | let mut reader = BufReader::new(&bytes[..]); |
| 384 | let mut iter = rustls_pemfile::certs(&mut reader); |
| 385 | match iter.next() { |
| 386 | Some(Ok(cert)) => Ok(cert), |
| 387 | Some(Err(e)) => Err(crate::Error::Config { |
| 388 | detail: format!("parse cert {}: {e}", path.display()), |
| 389 | }), |
| 390 | None => Err(crate::Error::Config { |
| 391 | detail: format!("cert file {} contains no PEM certificates", path.display()), |
| 392 | }), |
| 393 | } |
| 394 | } |
| 395 | |
| 396 | fn read_private_key(path: &Path) -> crate::Result<PrivateKeyDer<'static>> { |
| 397 | ensure_secret_file_perms(path)?; |
no test coverage detected