diff options
author | Ondrej Zajicek (work) <santiago@crfreenet.org> | 2021-03-17 17:24:00 +0100 |
---|---|---|
committer | Ondrej Zajicek (work) <santiago@crfreenet.org> | 2021-03-17 17:24:00 +0100 |
commit | 454ae3044598466ca7c50c12c6882d84ea545afa (patch) | |
tree | db4b7ad42eb025c12e265909f8c8a64e4c0cdd72 | |
parent | 0a3db4c68040473ab45b974a7f9256c277c5d31c (diff) | |
download | bird-454ae3044598466ca7c50c12c6882d84ea545afa.tar.gz |
RPKI: Improve error handling of DNS resolver
-rw-r--r-- | proto/rpki/transport.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/proto/rpki/transport.c b/proto/rpki/transport.c index 9dcb7c5c..a1ac7587 100644 --- a/proto/rpki/transport.c +++ b/proto/rpki/transport.c @@ -19,12 +19,13 @@ /** * rpki_hostname_autoresolv - auto-resolve an IP address from a hostname * @host: domain name of host, e.g. "rpki-validator.realmv6.org" + * @err_msg: error message returned in case of errors * * This function resolves an IP address from a hostname. * Returns &ip_addr structure with IP address or |IPA_NONE|. */ static ip_addr -rpki_hostname_autoresolv(const char *host) +rpki_hostname_autoresolv(const char *host, const char **err_msg) { struct addrinfo *res; struct addrinfo hints = { @@ -33,13 +34,15 @@ rpki_hostname_autoresolv(const char *host) .ai_flags = AI_ADDRCONFIG, }; + *err_msg = NULL; + if (!host) return IPA_NONE; int err_code = getaddrinfo(host, NULL, &hints, &res); if (err_code != 0) { - log(L_DEBUG "getaddrinfo failed: %s", gai_strerror(err_code)); + *err_msg = gai_strerror(err_code); return IPA_NONE; } @@ -83,12 +86,15 @@ rpki_tr_open(struct rpki_tr_sock *tr) sk->tbsize = RPKI_TX_BUFFER_SIZE; sk->tos = IP_PREC_INTERNET_CONTROL; - if (ipa_zero2(sk->daddr) && sk->host) + if (ipa_zero(sk->daddr) && sk->host) { - sk->daddr = rpki_hostname_autoresolv(sk->host); + const char *err_msg; + + sk->daddr = rpki_hostname_autoresolv(sk->host, &err_msg); if (ipa_zero(sk->daddr)) { - CACHE_TRACE(D_EVENTS, cache, "Cannot resolve the hostname '%s'", sk->host); + log(L_ERR "%s: Cannot resolve hostname '%s': %s", + cache->p->p.name, sk->host, err_msg); return RPKI_TR_ERROR; } } |