x509: Add :issuer() method, change returned format for both :subject() and :issuer() to preserve order

Sat, 06 Nov 2010 00:39:17 +0000

author
Matthew Wild <mwild1@gmail.com>
date
Sat, 06 Nov 2010 00:39:17 +0000
changeset 23
20528cb40c4a
parent 22
c4452dfd6ade
child 24
bbf12f9be71c

x509: Add :issuer() method, change returned format for both :subject() and :issuer() to preserve order

src/x509.c file | annotate | diff | comparison | revisions
--- a/src/x509.c	Fri Nov 05 23:59:34 2010 +0000
+++ b/src/x509.c	Sat Nov 06 00:39:17 2010 +0000
@@ -71,25 +71,18 @@
         return 0;
 }
 
-int meth_subject(lua_State* L)
+void luasec_push_x509_name(lua_State* L, X509_NAME *name)
 {
-  X509 *peer;
-  X509_NAME *subject;
   int i, n_entries;
-
-  peer = luasec_to_x509(L, 1);
-
-  lua_newtable(L); /* ret */
-
-  subject = X509_get_subject_name(peer);
-  n_entries = X509_NAME_entry_count(subject);
+  lua_newtable(L);
+  n_entries = X509_NAME_entry_count(name);
 
   for(i = 0; i <= n_entries; i++)
   {
     X509_NAME_ENTRY *entry;
     ASN1_OBJECT *object;
 
-    entry = X509_NAME_get_entry(subject, i);
+    entry = X509_NAME_get_entry(name, i);
     object = X509_NAME_ENTRY_get_object(entry);
 
     lua_newtable(L);
@@ -106,6 +99,18 @@
     lua_rawseti(L, -2, lua_objlen(L, -2)+1);
 
   }
+}
+
+
+int meth_subject(lua_State* L)
+{
+  luasec_push_x509_name(L, X509_get_subject_name(luasec_to_x509(L, 1)));
+  return 1;
+}
+
+int meth_issuer(lua_State* L)
+{
+  luasec_push_x509_name(L, X509_get_issuer_name(luasec_to_x509(L, 1)));
   return 1;
 }
 
@@ -249,6 +254,7 @@
  */
 static luaL_Reg meta[] = {
   {"subject",       meth_subject},
+  {"issuer",        meth_issuer},
   {"extensions",    meth_extensions},
   {"pem",           meth_pem},
   {"digest",        meth_digest},

mercurial