Merge pull request #749 from johnthagen/conf

Document conf module
This commit is contained in:
Steven Fackler 2017-10-08 16:52:30 -07:00 committed by GitHub
commit 79d6172571
1 changed files with 15 additions and 0 deletions

View File

@ -1,3 +1,4 @@
//! Interface for processing OpenSSL configuration files.
use ffi; use ffi;
use cvt_p; use cvt_p;
@ -6,17 +7,22 @@ use error::ErrorStack;
pub struct ConfMethod(*mut ffi::CONF_METHOD); pub struct ConfMethod(*mut ffi::CONF_METHOD);
impl ConfMethod { impl ConfMethod {
/// Retrieve handle to the default OpenSSL configuration file processing function.
pub fn default() -> ConfMethod { pub fn default() -> ConfMethod {
unsafe { unsafe {
ffi::init(); 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()) ConfMethod(ffi::NCONF_default())
} }
} }
/// Construct from raw pointer.
pub unsafe fn from_ptr(ptr: *mut ffi::CONF_METHOD) -> ConfMethod { pub unsafe fn from_ptr(ptr: *mut ffi::CONF_METHOD) -> ConfMethod {
ConfMethod(ptr) ConfMethod(ptr)
} }
/// Convert to raw pointer.
pub fn as_ptr(&self) -> *mut ffi::CONF_METHOD { pub fn as_ptr(&self) -> *mut ffi::CONF_METHOD {
self.0 self.0
} }
@ -31,6 +37,15 @@ foreign_type! {
} }
impl Conf { impl Conf {
/// Create a configuration parser.
///
/// # Examples
///
/// ```
/// use openssl::conf::{Conf, ConfMethod};
///
/// let conf = Conf::new(ConfMethod::default());
/// ```
pub fn new(method: ConfMethod) -> Result<Conf, ErrorStack> { pub fn new(method: ConfMethod) -> Result<Conf, ErrorStack> {
unsafe { cvt_p(ffi::NCONF_new(method.as_ptr())).map(Conf) } unsafe { cvt_p(ffi::NCONF_new(method.as_ptr())).map(Conf) }
} }