Replace CN field by names vector

This commit is contained in:
Jethro Beekman 2015-06-14 17:25:05 -07:00
parent 3229296105
commit 11bcac01ec
1 changed files with 18 additions and 4 deletions

View File

@ -145,7 +145,7 @@ pub use self::extension::ExtKeyUsageOption as ExtKeyUsage;
pub struct X509Generator { pub struct X509Generator {
bits: u32, bits: u32,
days: 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. // RFC 3280 §4.2: A certificate MUST NOT include more than one instance of a particular extension.
extensions: HashMap<ExtensionType,Extension>, extensions: HashMap<ExtensionType,Extension>,
hash_type: HashType, hash_type: HashType,
@ -165,7 +165,7 @@ impl X509Generator {
X509Generator { X509Generator {
bits: 1024, bits: 1024,
days: 365, days: 365,
CN: "rust-openssl".to_string(), names: vec![],
extensions: HashMap::new(), extensions: HashMap::new(),
hash_type: HashType::SHA1 hash_type: HashType::SHA1
} }
@ -186,7 +186,13 @@ impl X509Generator {
#[allow(non_snake_case)] #[allow(non_snake_case)]
/// Sets Common Name of certificate /// Sets Common Name of certificate
pub fn set_CN(mut self, CN: &str) -> X509Generator { 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 self
} }
@ -333,7 +339,15 @@ impl X509Generator {
let name = ffi::X509_get_subject_name(x509.handle); let name = ffi::X509_get_subject_name(x509.handle);
try_ssl_null!(name); 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); ffi::X509_set_issuer_name(x509.handle, name);
for (exttype,ext) in self.extensions.iter() { for (exttype,ext) in self.extensions.iter() {