The unified diff between revisions [a5720087..] and [749fac9e..] is displayed below. It can also be downloaded as a raw diff.
This diff has been restricted to the following files: 'src/pkcs10.cpp'
#
#
# patch "src/pkcs10.cpp"
# from [9c89f3e653afd0c819a468514a81de9fd2c23079]
# to [dd665c65ec6dd01924b86b0c4d70b4dceb098b3f]
#
============================================================
--- src/pkcs10.cpp 9c89f3e653afd0c819a468514a81de9fd2c23079
+++ src/pkcs10.cpp dd665c65ec6dd01924b86b0c4d70b4dceb098b3f
@@ -108,11 +108,10 @@ void PKCS10_Request::handle_attribute(co
}
else if(attr.oid == OIDS::lookup("PKCS9.ExtensionRequest"))
{
- Extensions extensions;
value.decode(extensions).verify_end();
- Data_Store issuer_info;
- extensions.contents_to(info, issuer_info);
+ Data_Store unused_issuer_info;
+ extensions.contents_to(info, unused_issuer_info);
}
}
@@ -153,9 +152,58 @@ Public_Key* PKCS10_Request::subject_publ
/*************************************************
* Return the alternative names of the requestor *
*************************************************/
-AlternativeName PKCS10_Request::subject_alt_name() const
+Cert_Extension::Subject_Alternative_Name
+PKCS10_Request::subject_alt_name() const
{
- return create_alt_name(info);
+ std::vector<Certificate_Extensions*>::iterator i =
+ std::find_if(extensions.extensions.begin(),
+ extensions.extensions.end(),
+ std::bind2nd(std::equals<OID>(),
+ OIDS::lookup("X509v3.SubjectAlternativeName")));
+
+ if(i != ext.end())
+ return j->
+ {
+ alt_name
+
+ }
+
+ Cert_Extension::Subject_Alternative_Name alt_name;
+ return alt_name;
+
+ class AltName_Matcher : public Data_Store::Matcher
+ {
+ public:
+ bool operator()(const std::string& key, const std::string&) const
+ {
+ for(u32bit j = 0; j != matches.size(); ++j)
+ if(key.compare(matches[j]) == 0)
+ {
+ printf("match for %s\n", key.c_str());
+ return true;
+ }
+ printf("no match for %s\n", key.c_str());
+ return false;
+ }
+
+ AltName_Matcher(const std::string& match_any_of)
+ {
+ matches = split_on(match_any_of, '/');
+ }
+ private:
+ std::vector<std::string> matches;
+ };
+
+ std::multimap<std::string, std::string> names =
+ info.search_with(AltName_Matcher("RFC822/DNS/URI/IP/PKIX.XMPPAddr"));
+
+ Cert_Extension::Subject_Alternative_Name alt_name;
+
+ std::multimap<std::string, std::string>::iterator j;
+ for(j = names.begin(); j != names.end(); ++j)
+ alt_name.add_attribute(j->first, j->second);
+
+ return alt_name;
}
/*************************************************