wilde@259: #include wilde@259: wilde@259: #include "certhelp.h" wilde@260: #include "logging.h" wilde@259: #include "errorcodes.h" wilde@259: #include "strhelp.h" wilde@259: wilde@259: char * wilde@259: get_oid_valstr(x509_name *namebuf, unsigned char *oid) wilde@259: { wilde@259: char *str = NULL; wilde@259: size_t oid_len = strlen((char *)oid); wilde@259: while ( namebuf != NULL ) wilde@259: { wilde@259: if ( (namebuf->oid.len == oid_len) && wilde@259: (memcmp(namebuf->oid.p, oid, oid_len) == 0) ) wilde@259: { wilde@259: str = xstrndup((char *)namebuf->val.p, namebuf->val.len); wilde@259: break; wilde@259: } wilde@259: namebuf = namebuf->next; wilde@259: } wilde@259: return str; wilde@259: } wilde@259: wilde@259: char * wilde@259: x509_parse_subject(unsigned char *derdata, size_t derlen, wilde@259: unsigned char *oid) wilde@259: { wilde@259: x509_crt chain; wilde@259: char *str; wilde@259: wilde@259: x509_crt_init(&chain); wilde@259: if (x509_crt_parse_der(&chain, derdata, derlen) != 0) wilde@259: { aheinecke@332: ERRORPRINTF("Could not parse certificate!\n"); aheinecke@332: return NULL; wilde@259: } wilde@259: else wilde@259: { wilde@259: str = get_oid_valstr(&(chain.subject), oid); wilde@259: x509_crt_free(&chain); wilde@259: } wilde@259: return str; wilde@259: }