return _gnutls_x509_parse_dn(crl->crl,
"tbsCertList.issuer.rdnSequence",
- buf, sizeof_buf);
+ buf, sizeof_buf, 0);
}
/**
return _gnutls_x509_parse_dn(crq->crq,
"certificationRequestInfo.subject.rdnSequence",
- buf, buf_size);
+ buf, buf_size, 1);
}
/**
int
_gnutls_x509_parse_dn(ASN1_TYPE asn1_struct,
const char *asn1_rdn_name, char *buf,
- size_t * buf_size)
+ size_t * buf_size, unsigned allow_empty)
{
int ret;
gnutls_datum_t dn = {NULL, 0};
*buf_size = 0;
ret = _gnutls_x509_get_dn(asn1_struct, asn1_rdn_name, &dn);
- if (ret < 0)
+ if (ret < 0) {
+ if (allow_empty && ret == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) {
+ gnutls_assert();
+ *buf_size = 0;
+ return 0;
+ }
return gnutls_assert_val(ret);
+ }
if (dn.size >= (unsigned int) *buf_size) {
gnutls_assert();
return _gnutls_asn2err(result);
}
- result = _gnutls_x509_parse_dn(dn, "rdnSequence", buf, buf_size);
+ result = _gnutls_x509_parse_dn(dn, "rdnSequence", buf, buf_size, 0);
asn1_delete_structure(&dn);
return result;
ret = _gnutls_x509_parse_dn
(resp->basicresp, "tbsResponseData.responderID.byName",
- NULL, &l);
+ NULL, &l, 0);
if (ret != GNUTLS_E_SHORT_MEMORY_BUFFER) {
if (ret == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE)
return 0; /* for backwards compatibility */
ret = _gnutls_x509_parse_dn
(resp->basicresp, "tbsResponseData.responderID.byName",
- (char *) dn->data, &l);
+ (char *) dn->data, &l, 0);
if (ret != GNUTLS_E_SUCCESS) {
gnutls_assert();
return ret;
return _gnutls_x509_parse_dn(cert->cert,
"tbsCertificate.issuer.rdnSequence",
- buf, buf_size);
+ buf, buf_size, 0);
}
/**
return _gnutls_x509_parse_dn(cert->cert,
"tbsCertificate.subject.rdnSequence",
- buf, buf_size);
+ buf, buf_size, 1);
}
/**
int _gnutls_x509_parse_dn(ASN1_TYPE asn1_struct,
const char *asn1_rdn_name, char *buf,
- size_t * sizeof_buf);
+ size_t * sizeof_buf, unsigned allow_empty);
int
_gnutls_x509_get_dn(ASN1_TYPE asn1_struct,