Unverified Commit 88b46c97 authored by Steven Fackler's avatar Steven Fackler Committed by GitHub
Browse files

Merge pull request #1756 from steffen-eiden/x509Name

Add X509_NAME_add_entry binding
parents 7df56869 263c7ce1
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -286,6 +286,13 @@ const_ptr_api! {
        pub fn X509_NAME_dup(x: #[const_ptr_if(ossl300)] X509_NAME) -> *mut X509_NAME;
        #[cfg(any(ossl110, libressl270))]
        pub fn X509_dup(x: #[const_ptr_if(ossl300)] X509) -> *mut X509;
        #[cfg(any(ossl101, libressl350))]
        pub fn X509_NAME_add_entry(
            name: *mut X509_NAME,
            ne: #[const_ptr_if(any(ossl110, libressl))] X509_NAME_ENTRY,
            loc: c_int,
            set: c_int,
            ) -> c_int;
    }
}
extern "C" {
+15 −0
Original line number Diff line number Diff line
@@ -872,6 +872,21 @@ impl X509NameBuilder {
        }
    }

    /// Add a name entry
    #[corresponds(X509_NAME_add_entry)]
    #[cfg(any(ossl101, libressl350))]
    pub fn append_entry(&mut self, ne: &X509NameEntryRef) -> std::result::Result<(), ErrorStack> {
        unsafe {
            cvt(ffi::X509_NAME_add_entry(
                self.0.as_ptr(),
                ne.as_ptr(),
                -1,
                0,
            ))
            .map(|_| ())
        }
    }

    /// Add a field entry by str.
    ///
    /// This corresponds to [`X509_NAME_add_entry_by_txt`].
+18 −0
Original line number Diff line number Diff line
@@ -693,3 +693,21 @@ fn test_load_cert_file() {
        .init(&store, &cert, &chain, |c| c.verify_cert())
        .unwrap());
}

#[test]
#[cfg(any(ossl101, libressl350))]
fn test_add_name_entry() {
    let cert = include_bytes!("../../test/cert.pem");
    let cert = X509::from_pem(cert).unwrap();
    let inp_name = cert.subject_name().entries().next().unwrap();

    let mut names = X509Name::builder().unwrap();
    names.append_entry(inp_name).unwrap();
    let names = names.build();

    let mut entries = names.entries();
    let outp_name = entries.next().unwrap();
    assert_eq!(outp_name.object().nid(), inp_name.object().nid());
    assert_eq!(outp_name.data().as_slice(), inp_name.data().as_slice());
    assert!(entries.next().is_none());
}