diff common/certhelp.c @ 259:20d515604daa

Added new module with helper functions to parse certs. Currently only stuff to get O and CN from Subject DN.
author Sascha Wilde <wilde@intevation.de>
date Tue, 01 Apr 2014 15:41:11 +0200
parents
children e7a8b70021b6
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/common/certhelp.c	Tue Apr 01 15:41:11 2014 +0200
@@ -0,0 +1,45 @@
+#include <stdlib.h>
+
+#include "certhelp.h"
+#include "debug.h"
+#include "errorcodes.h"
+#include "strhelp.h"
+
+char *
+get_oid_valstr(x509_name *namebuf, unsigned char *oid)
+{
+  char *str = NULL;
+  size_t oid_len = strlen((char *)oid);
+  while ( namebuf != NULL )
+    {
+      if ( (namebuf->oid.len == oid_len) &&
+           (memcmp(namebuf->oid.p, oid, oid_len) == 0) )
+        {
+          str = xstrndup((char *)namebuf->val.p, namebuf->val.len);
+          break;
+        }
+      namebuf = namebuf->next;
+    }
+  return str;
+}
+
+char *
+x509_parse_subject(unsigned char *derdata, size_t derlen,
+                   unsigned char *oid)
+{
+  x509_crt chain;
+  char *str;
+
+  x509_crt_init(&chain);
+  if (x509_crt_parse_der(&chain, derdata, derlen) != 0)
+    {
+      DEBUGPRINTF("FATAL: Could not parse certificate!");
+      exit(ERR_INVALID_CERT);
+    }
+  else
+    {
+      str = get_oid_valstr(&(chain.subject), oid);
+      x509_crt_free(&chain);
+    }
+  return str;
+}

http://wald.intevation.org/projects/trustbridge/