Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-ports-gnome
Path: blob/main/dns/c-ares/files/ares-config-info.patch
16147 views
1
Description: Add the ares_get_config() routine used by Unreal IRCd.
2
Originally taken from the Unreal IRCd distribution, later modified
3
by me to properly support IPv6 nameserver addresses since c-ares-1.7.1.
4
Origin: the Unreal IRCd distribution
5
Author: Peter Pentchev <[email protected]>
6
Forwarded: no
7
Last-Update: 2010-12-19
8
9
--- include/ares.h.orig
10
+++ include/ares.h
11
@@ -260,6 +260,14 @@
12
int nsort;
13
};
14
15
+/** Public available config (readonly) interface for ares_get_config(). */
16
+struct ares_config_info {
17
+ int timeout;
18
+ int tries;
19
+ int numservers;
20
+ char **servers;
21
+};
22
+
23
struct hostent;
24
struct timeval;
25
struct sockaddr;
26
@@ -530,6 +538,8 @@
27
CARES_EXTERN int ares_get_servers(ares_channel channel,
28
struct ares_addr_node **servers);
29
30
+CARES_EXTERN int ares_get_config(struct ares_config_info *d, ares_channel c);
31
+
32
#ifdef __cplusplus
33
}
34
#endif
35
--- src/lib/ares_init.c.orig 2013-02-17 11:44:02.000000000 -0500
36
+++ src/lib/ares_init.c 2013-05-15 13:43:31.000000000 -0400
37
@@ -1875,6 +1875,36 @@
38
}
39
#endif /* !WIN32 & !WATT32 & !ANDROID & !__ANDROID__ */
40
41
+int ares_get_config(struct ares_config_info *d, ares_channel c)
42
+{
43
+ int i;
44
+ const char *p;
45
+ char tmp[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")];
46
+
47
+ memset(d, 0, sizeof(struct ares_config_info));
48
+
49
+ d->timeout = c->timeout;
50
+ d->tries = c->tries;
51
+ d->numservers = c->nservers;
52
+ d->servers = calloc(sizeof(char *), c->nservers);
53
+ for (i = 0; i < c->nservers; i++)
54
+ {
55
+ if (c->servers[i].addr.family == AF_INET)
56
+ p = ares_inet_ntop(c->servers[i].addr.family,
57
+ (const char *)&c->servers[i].addr.addrV4,
58
+ tmp, sizeof(tmp));
59
+ else if (c->servers[i].addr.family == AF_INET6)
60
+ p = ares_inet_ntop(c->servers[i].addr.family,
61
+ (const char *)&c->servers[i].addr.addrV6,
62
+ tmp, sizeof(tmp));
63
+ else
64
+ p = NULL;
65
+ d->servers[i] = p ? strdup(p) : NULL;
66
+ }
67
+
68
+ return ARES_SUCCESS;
69
+}
70
+
71
/* initialize an rc4 key. If possible a cryptographically secure random key
72
is generated using a suitable function (for example win32's RtlGenRandom as
73
described in
74
75