Browse Source

crypto: switch to newer gnutls API for distinguished name

The new API automatically allocates the right amount of memory
to hold the distinguished name, avoiding the need to loop and
realloc.

Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
pull/307/head
Daniel P. Berrangé 9 months ago
parent
commit
3b3257b00f
  1. 12
      crypto/tlssession.c

12
crypto/tlssession.c

@ -409,20 +409,14 @@ qcrypto_tls_session_check_certificate(QCryptoTLSSession *session,
} }
if (i == 0) { if (i == 0) {
size_t dnameSize = 1024; gnutls_datum_t dname = {};
session->peername = g_malloc(dnameSize); ret = gnutls_x509_crt_get_dn2(cert, &dname);
requery:
ret = gnutls_x509_crt_get_dn(cert, session->peername, &dnameSize);
if (ret < 0) { if (ret < 0) {
if (ret == GNUTLS_E_SHORT_MEMORY_BUFFER) {
session->peername = g_realloc(session->peername,
dnameSize);
goto requery;
}
error_setg(errp, "Cannot get client distinguished name: %s", error_setg(errp, "Cannot get client distinguished name: %s",
gnutls_strerror(ret)); gnutls_strerror(ret));
goto error; goto error;
} }
session->peername = (char *)g_steal_pointer(&dname.data);
if (session->authzid) { if (session->authzid) {
bool allow; bool allow;

Loading…
Cancel
Save