Fix the crash with c-ares-1.6.0.
Reported by: several Submitted by: Ilya Andreev <admin@aivus.name> Timeout: Gerrit Beine <gerrit.beine@gmx.de> (maintainer)
This commit is contained in:
parent
a20cff936e
commit
bcc4367439
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=236511
@ -7,7 +7,7 @@
|
||||
|
||||
PORTNAME= Unreal
|
||||
PORTVERSION= 3.2.7
|
||||
PORTREVISION= 2
|
||||
PORTREVISION= 3
|
||||
CATEGORIES= irc ipv6
|
||||
MASTER_SITES= http://unrealircd.pimpmylinux.org/ \
|
||||
http://unrealircd.icedslash.com/
|
||||
|
104
irc/unreal/files/patch-res.c
Normal file
104
irc/unreal/files/patch-res.c
Normal file
@ -0,0 +1,104 @@
|
||||
--- src/res.c 2006-09-19 15:45:18.000000000 +0300
|
||||
+++ src/res.c 2009-06-17 17:50:18.000000000 +0300
|
||||
@@ -48,10 +48,15 @@
|
||||
|
||||
#include <res.h>
|
||||
|
||||
+/* Prevent crashes due to invalid prototype/ABI */
|
||||
+#if ARES_VERSION < 0x010600
|
||||
+ #error "You have an old c-ares version on your system and/or Unreals c-ares failed to compile!"
|
||||
+#endif
|
||||
+
|
||||
/* Forward declerations */
|
||||
-void unrealdns_cb_iptoname(void *arg, int status, struct hostent *he);
|
||||
-void unrealdns_cb_nametoip_verify(void *arg, int status, struct hostent *he);
|
||||
-void unrealdns_cb_nametoip_link(void *arg, int status, struct hostent *he);
|
||||
+void unrealdns_cb_iptoname(void *arg, int status, int timeouts, struct hostent *he);
|
||||
+void unrealdns_cb_nametoip_verify(void *arg, int status, int timeouts, struct hostent *he);
|
||||
+void unrealdns_cb_nametoip_link(void *arg, int status, int timeouts, struct hostent *he);
|
||||
void unrealdns_delasyncconnects(void);
|
||||
static unsigned int unrealdns_haship(void *binaryip, int length);
|
||||
static void unrealdns_addtocache(char *name, void *binaryip, int length);
|
||||
@@ -240,7 +245,7 @@
|
||||
#endif
|
||||
}
|
||||
|
||||
-void unrealdns_cb_iptoname(void *arg, int status, struct hostent *he)
|
||||
+void unrealdns_cb_iptoname(void *arg, int status, int timeouts, struct hostent *he)
|
||||
{
|
||||
DNSReq *r = (DNSReq *)arg;
|
||||
DNSReq *newr;
|
||||
@@ -290,7 +295,7 @@
|
||||
}
|
||||
|
||||
|
||||
-void unrealdns_cb_nametoip_verify(void *arg, int status, struct hostent *he)
|
||||
+void unrealdns_cb_nametoip_verify(void *arg, int status, int timeouts, struct hostent *he)
|
||||
{
|
||||
DNSReq *r = (DNSReq *)arg;
|
||||
aClient *acptr = r->cptr;
|
||||
@@ -363,7 +368,7 @@
|
||||
unrealdns_freeandremovereq(r);
|
||||
}
|
||||
|
||||
-void unrealdns_cb_nametoip_link(void *arg, int status, struct hostent *he)
|
||||
+void unrealdns_cb_nametoip_link(void *arg, int status, int timeouts, struct hostent *he)
|
||||
{
|
||||
DNSReq *r = (DNSReq *)arg;
|
||||
int n;
|
||||
@@ -390,9 +395,11 @@
|
||||
/* fatal error while resolving */
|
||||
sendto_realops("Unable to resolve hostname '%s', when trying to connect to server %s.",
|
||||
r->name, r->linkblock->servername);
|
||||
+ r->linkblock->refcount--;
|
||||
unrealdns_freeandremovereq(r);
|
||||
return;
|
||||
}
|
||||
+ r->linkblock->refcount--;
|
||||
|
||||
#ifdef INET6
|
||||
if (((he->h_length != 4) && (he->h_length != 16)) || !he->h_addr_list[0])
|
||||
@@ -715,21 +722,34 @@
|
||||
} else
|
||||
if (*param == 'i') /* INFORMATION */
|
||||
{
|
||||
- struct ares_config_info inf;
|
||||
+ struct ares_options inf;
|
||||
int i;
|
||||
+ int optmask;
|
||||
|
||||
- ares_get_config(&inf, resolver_channel);
|
||||
+ ares_save_options(resolver_channel, &inf, &optmask);
|
||||
|
||||
sendtxtnumeric(sptr, "****** DNS Configuration Information ******");
|
||||
sendtxtnumeric(sptr, " c-ares version: %s",ares_version(NULL));
|
||||
- sendtxtnumeric(sptr, " timeout: %d", inf.timeout);
|
||||
- sendtxtnumeric(sptr, " tries: %d", inf.tries);
|
||||
- sendtxtnumeric(sptr, " # of servers: %d", inf.numservers);
|
||||
- for (i = 0; i < inf.numservers; i++)
|
||||
- sendtxtnumeric(sptr, " server #%d: %s", i+1, inf.servers[i] ? inf.servers[i] : "[???]");
|
||||
-
|
||||
- /* TODO: free or get memleak ! */
|
||||
+
|
||||
+ if(optmask & ARES_OPT_TIMEOUTMS)
|
||||
+ sendtxtnumeric(sptr, " timeout: %d", inf.timeout);
|
||||
+ if(optmask & ARES_OPT_TRIES)
|
||||
+ sendtxtnumeric(sptr, " tries: %d", inf.tries);
|
||||
+ if(optmask & ARES_OPT_SERVERS)
|
||||
+ {
|
||||
+ sendtxtnumeric(sptr, " # of servers: %d", inf.nservers);
|
||||
+ for (i = 0; i < inf.nservers; i++)
|
||||
+ sendtxtnumeric(sptr, " server #%d: %s", i+1, inet_ntoa(inf.servers[i]));
|
||||
+ }
|
||||
+ if(optmask & ARES_OPT_DOMAINS)
|
||||
+ {
|
||||
+ sendtxtnumeric(sptr, " # of search domains: %d", inf.ndomains);
|
||||
+ for (i = 0; i < inf.ndomains; i++)
|
||||
+ sendtxtnumeric(sptr, " domain #%d: %s", i+1, inf.domains[i]);
|
||||
+ }
|
||||
sendtxtnumeric(sptr, "****** End of DNS Configuration Info ******");
|
||||
+
|
||||
+ ares_destroy_options(&inf);
|
||||
} else /* STATISTICS */
|
||||
{
|
||||
sendtxtnumeric(sptr, "DNS CACHE Stats:");
|
Loading…
Reference in New Issue
Block a user