From bf7076b7853c27546ed5ce3d235e20b409682729 Mon Sep 17 00:00:00 2001 From: Corey Farwell Date: Sat, 30 Apr 2016 23:54:29 -0400 Subject: [PATCH] Implement `iter` method on `GeneralNames`. --- openssl/src/x509/mod.rs | 26 ++++++++++++++++++++++++++ openssl/src/x509/tests.rs | 13 +++++++++++++ 2 files changed, 39 insertions(+) diff --git a/openssl/src/x509/mod.rs b/openssl/src/x509/mod.rs index af1e6ed1..93526d7f 100644 --- a/openssl/src/x509/mod.rs +++ b/openssl/src/x509/mod.rs @@ -810,6 +810,32 @@ impl<'a> GeneralNames<'a> { } } } + + pub fn iter(&self) -> GeneralNamesIter { + GeneralNamesIter { + names: self, + idx: 0 + } + } +} + +pub struct GeneralNamesIter<'a> { + names: &'a GeneralNames<'a>, + idx: usize, +} + +impl<'a> Iterator for GeneralNamesIter<'a> { + type Item = GeneralName<'a>; + + fn next(&mut self) -> Option { + if self.idx < self.names.len() { + let name = self.names.get(self.idx); + self.idx += 1; + Some(name) + } else { + None + } + } } pub struct GeneralName<'a> { diff --git a/openssl/src/x509/tests.rs b/openssl/src/x509/tests.rs index 5f4d432e..aa41bfc6 100644 --- a/openssl/src/x509/tests.rs +++ b/openssl/src/x509/tests.rs @@ -169,3 +169,16 @@ fn test_subject_alt_name() { assert_eq!(subject_alt_names.get(1).ipadd(), Some(&[127, 0, 0, 1][..])); assert_eq!(subject_alt_names.get(2).ipadd(), Some(&b"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01"[..])); } + +#[test] +fn test_subject_alt_name_iter() { + let mut file = File::open("test/alt_name_cert.pem").unwrap(); + let cert = X509::from_pem(&mut file).unwrap(); + + let subject_alt_names = cert.subject_alt_names().unwrap(); + let mut subject_alt_names_iter = subject_alt_names.iter(); + assert_eq!(subject_alt_names_iter.next().unwrap().dns(), Some("foobar.com")); + assert_eq!(subject_alt_names_iter.next().unwrap().ipadd(), Some(&[127, 0, 0, 1][..])); + assert_eq!(subject_alt_names_iter.next().unwrap().ipadd(), Some(&b"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01"[..])); + assert!(subject_alt_names_iter.next().is_none()); +}