aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJethro Beekman <[email protected]>2015-06-14 17:25:05 -0700
committerJethro Beekman <[email protected]>2015-07-08 10:06:52 -0700
commit11bcac01ecd1b7ba8d758b814ff65dc1dc3ac7e6 (patch)
tree258d7ea17d6f3df2f9edde018fb0baf5faa82818
parentMerge pull request #233 from jethrogb/topic/x509_extension (diff)
downloadrust-openssl-11bcac01ecd1b7ba8d758b814ff65dc1dc3ac7e6.tar.xz
rust-openssl-11bcac01ecd1b7ba8d758b814ff65dc1dc3ac7e6.zip
Replace CN field by names vector
-rw-r--r--openssl/src/x509/mod.rs22
1 files changed, 18 insertions, 4 deletions
diff --git a/openssl/src/x509/mod.rs b/openssl/src/x509/mod.rs
index 423a258f..b8114384 100644
--- a/openssl/src/x509/mod.rs
+++ b/openssl/src/x509/mod.rs
@@ -145,7 +145,7 @@ pub use self::extension::ExtKeyUsageOption as ExtKeyUsage;
pub struct X509Generator {
bits: u32,
days: u32,
- CN: String,
+ names: Vec<(String,String)>,
// RFC 3280 ยง4.2: A certificate MUST NOT include more than one instance of a particular extension.
extensions: HashMap<ExtensionType,Extension>,
hash_type: HashType,
@@ -165,7 +165,7 @@ impl X509Generator {
X509Generator {
bits: 1024,
days: 365,
- CN: "rust-openssl".to_string(),
+ names: vec![],
extensions: HashMap::new(),
hash_type: HashType::SHA1
}
@@ -186,7 +186,13 @@ impl X509Generator {
#[allow(non_snake_case)]
/// Sets Common Name of certificate
pub fn set_CN(mut self, CN: &str) -> X509Generator {
- self.CN = CN.to_string();
+ match self.names.get_mut(0) {
+ Some(&mut(_,ref mut val)) => *val=CN.to_string(),
+ _ => {} /* would move push here, but borrow checker won't let me */
+ }
+ if self.names.len()==0 {
+ self.names.push(("CN".to_string(),CN.to_string()));
+ }
self
}
@@ -333,7 +339,15 @@ impl X509Generator {
let name = ffi::X509_get_subject_name(x509.handle);
try_ssl_null!(name);
- try!(X509Generator::add_name(name, "CN", &self.CN));
+ let default=[("CN","rust-openssl")];
+ let default_iter=&mut default.iter().map(|&(k,v)|(k,v));
+ let arg_iter=&mut self.names.iter().map(|&(ref k,ref v)|(&k[..],&v[..]));
+ let iter: &mut Iterator<Item=(&str,&str)> =
+ if self.names.len()==0 { default_iter } else { arg_iter };
+
+ for (key,val) in iter {
+ try!(X509Generator::add_name(name, &key, &val));
+ }
ffi::X509_set_issuer_name(x509.handle, name);
for (exttype,ext) in self.extensions.iter() {