]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
RPKI: Improve error handling of DNS resolver
authorOndrej Zajicek (work) <santiago@crfreenet.org>
Wed, 17 Mar 2021 16:24:00 +0000 (17:24 +0100)
committerOndrej Zajicek (work) <santiago@crfreenet.org>
Wed, 17 Mar 2021 16:24:00 +0000 (17:24 +0100)
proto/rpki/transport.c

index 9dcb7c5ccf7d547c01185513982ba13f01bbf087..a1ac7587de916574bab07e5a627b56081af4da04 100644 (file)
 /**
  * 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;
     }
   }