[gnutls-dev] Problem with subject names. (Ändrat av Pelle Johansson)

Pelle Johansson morth at morth.org
Fri Oct 29 00:30:24 CEST 2004


[Tried to join and send this to help-gnutls but it seems to be broken?]

I'm having some problem with the subject name extraction functions. I 
want to extract the common name from a certificate using 
gnutls_x509_crt_get_dn_by_oid(), but I'm always getting a 
GNUTLS_E_SHORT_MEMORY_BUFFER. This is regardless if I call with a NULL 
buf argument or with buf_sizeof set to 10000.

So to investigate some more I tried the gnutls_x509_crt_get_dn_oid() 
functions. These do set the size, but the buffer isn't filled out (it 
keeps it previous value). gnutls_x509_crt_get_dn() works as expected 
though.

Am I doing something wrong here or is there a bug?

Code:
const char *tls_get_cn (gnutls_x509_crt cert)
{
   size_t sz = 0;
   char *buf;
   int i;

   buf = malloc (10000);
   sz = 10000;
   if (!gnutls_x509_crt_get_dn (cert, buf, &sz))
     fprintf (stderr, "DN: %s\n", buf);
   sz = 10000;
   buf[0] = 0;
   for (i = 0; !gnutls_x509_crt_get_dn_oid (cert, i, buf, &sz); i++)
   {
     fprintf (stderr, "%d size %lu: %s\n", i, sz, buf);
     sz = 10000;
     buf[0] = 0;
   }

   sz = 10000;
   i = gnutls_x509_crt_get_dn_by_oid (cert, GNUTLS_OID_X520_COMMON_NAME, 
0, 0, NULL, &sz);
   fprintf (stderr, "res = %d, sz = %lu\n", i, sz);
   i = gnutls_x509_crt_get_dn_by_oid (cert, GNUTLS_OID_X520_COMMON_NAME, 
0, 0, buf, &sz);
   fprintf (stderr, "res = %d, sz = %lu\n", i, sz);
   if (i)
     return NULL;
   return buf;
}

Output:
DN: C=SE,L=Linköping,O=morth.org,CN=ftp.morth.org,EMAIL=root at morth.org
0 size 7:
1 size 7:
2 size 8:
3 size 7:
4 size 20:
res = -51, sz = 0
res = -51, sz = 0
-- 
Pelle Johansson
<morth at morth.org>




More information about the Gnutls-dev mailing list