From 1c5a651248a15267faf96d7a07c3c0319819a9fc Mon Sep 17 00:00:00 2001 From: Daniel McCarney Date: Fri, 4 Oct 2024 11:24:31 -0400 Subject: [PATCH] server: specific err for config w/o cert resolver When we made the server config builder use an out param for the built config it allowed us to return an error when building a config without a cert resolver. At the time we used `RUSTLS_RESULT_GENERAL`, but this offers no significant hint at the root cause. This commit introduces a new `RUSTLS_RESULT_NO_CERT_RESOLVER` error and updates the impl and unit test to use it. --- src/error.rs | 4 ++++ src/rustls.h | 1 + src/server.rs | 4 ++-- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/error.rs b/src/error.rs index af9d466d..b5bb2939 100644 --- a/src/error.rs +++ b/src/error.rs @@ -63,6 +63,7 @@ u32_enum_builder! { NoServerCertVerifier => 7015, NoDefaultCryptoProvider => 7016, GetRandomFailed => 7017, + NoCertResolver => 7018, // From https://docs.rs/rustls/latest/rustls/enum.Error.html NoCertificatesPresented => 7101, @@ -499,6 +500,9 @@ impl Display for rustls_result { GetRandomFailed => { write!(f, "failed to get random bytes from the crypto provider") } + NoCertResolver => { + write!(f, "no certificate resolver was configured") + } CertEncodingBad => Error::InvalidCertificate(CertificateError::BadEncoding).fmt(f), CertExpired => Error::InvalidCertificate(CertificateError::Expired).fmt(f), diff --git a/src/rustls.h b/src/rustls.h index e4f9be1d..0f44ac0e 100644 --- a/src/rustls.h +++ b/src/rustls.h @@ -26,6 +26,7 @@ enum rustls_result { RUSTLS_RESULT_NO_SERVER_CERT_VERIFIER = 7015, RUSTLS_RESULT_NO_DEFAULT_CRYPTO_PROVIDER = 7016, RUSTLS_RESULT_GET_RANDOM_FAILED = 7017, + RUSTLS_RESULT_NO_CERT_RESOLVER = 7018, RUSTLS_RESULT_NO_CERTIFICATES_PRESENTED = 7101, RUSTLS_RESULT_DECRYPT_ERROR = 7102, RUSTLS_RESULT_FAILED_TO_GET_CURRENT_TIME = 7103, diff --git a/src/server.rs b/src/server.rs index a2b97d85..cf5d001f 100644 --- a/src/server.rs +++ b/src/server.rs @@ -356,7 +356,7 @@ impl rustls_server_config_builder { let mut config = if let Some(r) = builder.cert_resolver { base.with_cert_resolver(r) } else { - return rustls_result::General; + return rustls_result::NoCertResolver; }; if let Some(ss) = builder.session_storage { config.session_storage = ss; @@ -816,7 +816,7 @@ mod tests { let mut config = null(); let result = rustls_server_config_builder::rustls_server_config_builder_build(builder, &mut config); - assert_eq!(result, rustls_result::General); + assert_eq!(result, rustls_result::NoCertResolver); assert!(config.is_null()); }