summaryrefslogtreecommitdiffstats
path: root/vendor/openssl/src/conf.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/openssl/src/conf.rs')
-rw-r--r--vendor/openssl/src/conf.rs65
1 files changed, 65 insertions, 0 deletions
diff --git a/vendor/openssl/src/conf.rs b/vendor/openssl/src/conf.rs
new file mode 100644
index 000000000..715519c59
--- /dev/null
+++ b/vendor/openssl/src/conf.rs
@@ -0,0 +1,65 @@
+//! Interface for processing OpenSSL configuration files.
+
+foreign_type_and_impl_send_sync! {
+ type CType = ffi::CONF;
+ fn drop = ffi::NCONF_free;
+
+ pub struct Conf;
+ pub struct ConfRef;
+}
+
+#[cfg(not(boringssl))]
+mod methods {
+ use super::Conf;
+ use crate::cvt_p;
+ use crate::error::ErrorStack;
+ use openssl_macros::corresponds;
+
+ pub struct ConfMethod(*mut ffi::CONF_METHOD);
+
+ impl ConfMethod {
+ /// Retrieve handle to the default OpenSSL configuration file processing function.
+ #[corresponds(NCONF_default)]
+ #[allow(clippy::should_implement_trait)]
+ pub fn default() -> ConfMethod {
+ unsafe {
+ ffi::init();
+ // `NCONF` stands for "New Conf", as described in crypto/conf/conf_lib.c. This is
+ // a newer API than the "CONF classic" functions.
+ ConfMethod(ffi::NCONF_default())
+ }
+ }
+
+ /// Construct from raw pointer.
+ ///
+ /// # Safety
+ ///
+ /// The caller must ensure that the pointer is valid.
+ pub unsafe fn from_ptr(ptr: *mut ffi::CONF_METHOD) -> ConfMethod {
+ ConfMethod(ptr)
+ }
+
+ /// Convert to raw pointer.
+ pub fn as_ptr(&self) -> *mut ffi::CONF_METHOD {
+ self.0
+ }
+ }
+
+ impl Conf {
+ /// Create a configuration parser.
+ ///
+ /// # Examples
+ ///
+ /// ```
+ /// use openssl::conf::{Conf, ConfMethod};
+ ///
+ /// let conf = Conf::new(ConfMethod::default());
+ /// ```
+ #[corresponds(NCONF_new)]
+ pub fn new(method: ConfMethod) -> Result<Conf, ErrorStack> {
+ unsafe { cvt_p(ffi::NCONF_new(method.as_ptr())).map(Conf) }
+ }
+ }
+}
+#[cfg(not(boringssl))]
+pub use methods::*;