Path: blob/main/dns/c-ares/files/ares-config-info.patch
16147 views
Description: Add the ares_get_config() routine used by Unreal IRCd.1Originally taken from the Unreal IRCd distribution, later modified2by me to properly support IPv6 nameserver addresses since c-ares-1.7.1.3Origin: the Unreal IRCd distribution4Author: Peter Pentchev <[email protected]>5Forwarded: no6Last-Update: 2010-12-1978--- include/ares.h.orig9+++ include/ares.h10@@ -260,6 +260,14 @@11int nsort;12};1314+/** Public available config (readonly) interface for ares_get_config(). */15+struct ares_config_info {16+ int timeout;17+ int tries;18+ int numservers;19+ char **servers;20+};21+22struct hostent;23struct timeval;24struct sockaddr;25@@ -530,6 +538,8 @@26CARES_EXTERN int ares_get_servers(ares_channel channel,27struct ares_addr_node **servers);2829+CARES_EXTERN int ares_get_config(struct ares_config_info *d, ares_channel c);30+31#ifdef __cplusplus32}33#endif34--- src/lib/ares_init.c.orig 2013-02-17 11:44:02.000000000 -050035+++ src/lib/ares_init.c 2013-05-15 13:43:31.000000000 -040036@@ -1875,6 +1875,36 @@37}38#endif /* !WIN32 & !WATT32 & !ANDROID & !__ANDROID__ */3940+int ares_get_config(struct ares_config_info *d, ares_channel c)41+{42+ int i;43+ const char *p;44+ char tmp[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")];45+46+ memset(d, 0, sizeof(struct ares_config_info));47+48+ d->timeout = c->timeout;49+ d->tries = c->tries;50+ d->numservers = c->nservers;51+ d->servers = calloc(sizeof(char *), c->nservers);52+ for (i = 0; i < c->nservers; i++)53+ {54+ if (c->servers[i].addr.family == AF_INET)55+ p = ares_inet_ntop(c->servers[i].addr.family,56+ (const char *)&c->servers[i].addr.addrV4,57+ tmp, sizeof(tmp));58+ else if (c->servers[i].addr.family == AF_INET6)59+ p = ares_inet_ntop(c->servers[i].addr.family,60+ (const char *)&c->servers[i].addr.addrV6,61+ tmp, sizeof(tmp));62+ else63+ p = NULL;64+ d->servers[i] = p ? strdup(p) : NULL;65+ }66+67+ return ARES_SUCCESS;68+}69+70/* initialize an rc4 key. If possible a cryptographically secure random key71is generated using a suitable function (for example win32's RtlGenRandom as72described in737475