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;
    }

 /*************************************************