Browse Source

Update contrib/libs/c-ares to 1.33.1
989fe7a8375f82c54730928e4590985850c9a72a

robot-contrib 6 months ago
parent
commit
4047efcfd4

+ 32 - 0
contrib/libs/c-ares/RELEASE-NOTES.md

@@ -1,3 +1,35 @@
+## c-ares version 1.33.1 - August 23 2024
+
+This is a bugfix release.
+
+Bugfixes:
+* Work around systemd-resolved quirk that returns unexpected codes for single
+  label names.  Also adds test cases to validate the work around works and
+  will continue to work in future releases.
+  [PR #863](https://github.com/c-ares/c-ares/pull/863),
+  See Also https://github.com/systemd/systemd/issues/34101
+* Fix sysconfig ndots default value, also adds containerized test case to
+  prevent future regressions.
+  [PR #862](https://github.com/c-ares/c-ares/pull/862)
+* Fix blank DNS name returning error code rather than valid record for
+  commands like: `adig -t SOA .`.  Also adds test case to prevent future
+  regressions.
+  [9e574af](https://github.com/c-ares/c-ares/commit/9e574af)
+* Fix calculation of query times > 1s.
+  [2b2eae7](https://github.com/c-ares/c-ares/commit/2b2eae7)
+* Fix building on old Linux releases that don't have `TCP_FASTOPEN_CONNECT`.
+  [b7a89b9](https://github.com/c-ares/c-ares/commit/b7a89b9)
+* Fix minor Android build warnings.
+  [PR #848](https://github.com/c-ares/c-ares/pull/848)
+
+Thanks go to these friendly people for their efforts and contributions for this
+release:
+* Brad House (@bradh352)
+* Erik Lax (@eriklax)
+* Hans-Christian Egtvedt (@egtvedt)
+* Mikael Lindemann (@mikaellindemann)
+* Nodar Chkuaselidze (@nodech)
+
 ## c-ares version 1.33.0 - August 2 2024
 
 This is a feature and bugfix release.

+ 2 - 2
contrib/libs/c-ares/include/ares_version.h

@@ -32,11 +32,11 @@
 
 #define ARES_VERSION_MAJOR 1
 #define ARES_VERSION_MINOR 33
-#define ARES_VERSION_PATCH 0
+#define ARES_VERSION_PATCH 1
 #define ARES_VERSION                                        \
   ((ARES_VERSION_MAJOR << 16) | (ARES_VERSION_MINOR << 8) | \
    (ARES_VERSION_PATCH))
-#define ARES_VERSION_STR "1.33.0"
+#define ARES_VERSION_STR "1.33.1"
 
 #define CARES_HAVE_ARES_LIBRARY_INIT    1
 #define CARES_HAVE_ARES_LIBRARY_CLEANUP 1

+ 1 - 1
contrib/libs/c-ares/src/lib/ares__close_sockets.c

@@ -37,7 +37,7 @@ static void ares__requeue_queries(ares_conn_t  *conn,
   ares__tvnow(&now);
 
   while ((query = ares__llist_first_val(conn->queries_to_conn)) != NULL) {
-    ares__requeue_query(query, &now, requeue_status, ARES_TRUE);
+    ares__requeue_query(query, &now, requeue_status, ARES_TRUE, NULL);
   }
 }
 

+ 1 - 1
contrib/libs/c-ares/src/lib/ares__socket.c

@@ -56,7 +56,7 @@
 #include <fcntl.h>
 #include <limits.h>
 
-#if defined(__linux__) && defined(MSG_FASTOPEN)
+#if defined(__linux__) && defined(TCP_FASTOPEN_CONNECT)
 #  define TFO_SUPPORTED      1
 #  define TFO_SKIP_CONNECT   0
 #  define TFO_USE_SENDTO     0

+ 2 - 1
contrib/libs/c-ares/src/lib/ares_android.c

@@ -27,6 +27,7 @@
 #  include "ares_private.h"
 #  include <jni.h>
 #  include <sys/prctl.h>
+#  include "ares_android.h"
 
 static JavaVM   *android_jvm                  = NULL;
 static jobject   android_connectivity_manager = NULL;
@@ -227,7 +228,7 @@ done:
     (*android_jvm)->DetachCurrentThread(android_jvm);
   }
 
-  return ret;
+  return (int)ret;
 }
 
 int ares_library_android_initialized(void)

+ 2 - 1
contrib/libs/c-ares/src/lib/ares_cookie.c

@@ -427,7 +427,8 @@ ares_status_t ares_cookie_validate(ares_query_t            *query,
     /* Resend the request, hopefully it will work the next time as we should
      * have recorded a server cookie */
     ares__requeue_query(query, now, ARES_SUCCESS,
-                        ARES_FALSE /* Don't increment try count */);
+                        ARES_FALSE /* Don't increment try count */,
+                        NULL);
 
     /* Parent needs to drop this response */
     return ARES_EBADRESP;

+ 7 - 0
contrib/libs/c-ares/src/lib/ares_getaddrinfo.c

@@ -528,6 +528,13 @@ static void host_callback(void *arg, ares_status_t status, size_t timeouts,
         hquery->nodata_cnt++;
       }
       next_lookup(hquery, hquery->nodata_cnt ? ARES_ENODATA : status);
+    } else if (
+        (status == ARES_ESERVFAIL || status == ARES_EREFUSED) &&
+        ares__name_label_cnt(hquery->names[hquery->next_name_idx-1]) == 1
+      ) {
+      /* Issue #852, systemd-resolved may return SERVFAIL or REFUSED on a
+       * single label domain name. */
+      next_lookup(hquery, hquery->nodata_cnt ? ARES_ENODATA : status);
     } else {
       end_hquery(hquery, status);
     }

+ 1 - 1
contrib/libs/c-ares/src/lib/ares_metrics.c

@@ -170,7 +170,7 @@ void ares_metrics_record(const ares_query_t *query, ares_server_t *server,
   }
 
   ares__timeval_diff(&tvdiff, &query->ts, &now);
-  query_ms = (unsigned int)(tvdiff.sec + (tvdiff.usec / 1000));
+  query_ms = (unsigned int)((tvdiff.sec * 1000) + (tvdiff.usec / 1000));
   if (query_ms == 0) {
     query_ms = 1;
   }

+ 8 - 4
contrib/libs/c-ares/src/lib/ares_private.h

@@ -462,10 +462,14 @@ ares_bool_t   ares__timedout(const ares_timeval_t *now,
 
 /* Returns one of the normal ares status codes like ARES_SUCCESS */
 ares_status_t ares__send_query(ares_query_t *query, const ares_timeval_t *now);
-ares_status_t ares__requeue_query(ares_query_t         *query,
-                                  const ares_timeval_t *now,
-                                  ares_status_t         status,
-                                  ares_bool_t           inc_try_count);
+ares_status_t ares__requeue_query(ares_query_t            *query,
+                                  const ares_timeval_t    *now,
+                                  ares_status_t            status,
+                                  ares_bool_t              inc_try_count,
+                                  const ares_dns_record_t *dnsrec);
+
+/*! Count the number of labels (dots+1) in a domain */
+size_t ares__name_label_cnt(const char *name);
 
 /*! Retrieve a list of names to use for searching.  The first successful
  *  query in the list wins.  This function also uses the HOSTSALIASES file

+ 11 - 10
contrib/libs/c-ares/src/lib/ares_process.c

@@ -571,7 +571,7 @@ static void process_timeouts(ares_channel_t *channel, const ares_timeval_t *now)
 
     conn = query->conn;
     server_increment_failures(conn->server, query->using_tcp);
-    ares__requeue_query(query, now, ARES_ETIMEOUT, ARES_TRUE);
+    ares__requeue_query(query, now, ARES_ETIMEOUT, ARES_TRUE, NULL);
   }
 }
 
@@ -711,7 +711,7 @@ static ares_status_t process_answer(ares_channel_t      *channel,
       }
 
       server_increment_failures(server, query->using_tcp);
-      ares__requeue_query(query, now, status, ARES_TRUE);
+      ares__requeue_query(query, now, status, ARES_TRUE, rdnsrec);
 
       /* Should any of these cause a connection termination?
        * Maybe SERVER_FAILURE? */
@@ -756,10 +756,11 @@ static void handle_conn_error(ares_conn_t *conn, ares_bool_t critical_failure,
   ares__close_connection(conn, failure_status);
 }
 
-ares_status_t ares__requeue_query(ares_query_t         *query,
-                                  const ares_timeval_t *now,
-                                  ares_status_t         status,
-                                  ares_bool_t           inc_try_count)
+ares_status_t ares__requeue_query(ares_query_t            *query,
+                                  const ares_timeval_t    *now,
+                                  ares_status_t            status,
+                                  ares_bool_t              inc_try_count,
+                                  const ares_dns_record_t *dnsrec)
 {
   ares_channel_t *channel = query->channel;
   size_t max_tries        = ares__slist_len(channel->servers) * channel->tries;
@@ -783,7 +784,7 @@ ares_status_t ares__requeue_query(ares_query_t         *query,
     query->error_status = ARES_ETIMEOUT;
   }
 
-  end_query(channel, NULL, query, query->error_status, NULL);
+  end_query(channel, NULL, query, query->error_status, dnsrec);
   return ARES_ETIMEOUT;
 }
 
@@ -1078,7 +1079,7 @@ ares_status_t ares__send_query(ares_query_t *query, const ares_timeval_t *now)
       case ARES_ECONNREFUSED:
       case ARES_EBADFAMILY:
         server_increment_failures(server, query->using_tcp);
-        return ares__requeue_query(query, now, status, ARES_TRUE);
+        return ares__requeue_query(query, now, status, ARES_TRUE, NULL);
 
       /* Anything else is not retryable, likely ENOMEM */
       default:
@@ -1104,7 +1105,7 @@ ares_status_t ares__send_query(ares_query_t *query, const ares_timeval_t *now)
     case ARES_ECONNREFUSED:
     case ARES_EBADFAMILY:
       handle_conn_error(conn, ARES_TRUE, status);
-      status = ares__requeue_query(query, now, status, ARES_TRUE);
+      status = ares__requeue_query(query, now, status, ARES_TRUE, NULL);
       if (status == ARES_ETIMEOUT) {
         status = ARES_ECONNREFUSED;
       }
@@ -1114,7 +1115,7 @@ ares_status_t ares__send_query(ares_query_t *query, const ares_timeval_t *now)
      * just requeue to a different server/connection. */
     default:
       server_increment_failures(server, query->using_tcp);
-      status = ares__requeue_query(query, now, status, ARES_TRUE);
+      status = ares__requeue_query(query, now, status, ARES_TRUE, NULL);
       return status;
   }
 

Some files were not shown because too many files changed in this diff