aboutsummaryrefslogtreecommitdiff
path: root/ares/ares_gethostbyname.c
diff options
context:
space:
mode:
authorDominick Meglio <dcm5151@esu.edu>2005-04-09 16:49:47 +0000
committerDominick Meglio <dcm5151@esu.edu>2005-04-09 16:49:47 +0000
commitfeec4217446e8118f06c0bd0d8af4e553e617904 (patch)
tree2038cab0b307b43281539d58deff7da2b6c3a7b9 /ares/ares_gethostbyname.c
parent634982840ebd676255f50b87c2c06405281bf885 (diff)
Made sortlist support CIDR matching for IPv4
Diffstat (limited to 'ares/ares_gethostbyname.c')
-rw-r--r--ares/ares_gethostbyname.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/ares/ares_gethostbyname.c b/ares/ares_gethostbyname.c
index 92dc0c72d..afd4c715e 100644
--- a/ares/ares_gethostbyname.c
+++ b/ares/ares_gethostbyname.c
@@ -34,6 +34,7 @@
#include "ares.h"
#include "ares_private.h"
#include "inet_net_pton.h"
+#include "bitncmp.h"
#ifdef WATT32
#undef WIN32
@@ -189,10 +190,7 @@ static void end_hquery(struct host_query *hquery, int status,
static int fake_hostent(const char *name, int family, ares_host_callback callback,
void *arg)
{
- struct in_addr addr;
- struct in6_addr addr6;
struct hostent hostent;
- const char *p;
char *aliases[1] = { NULL };
char *addrs[2];
int result = 0;
@@ -333,8 +331,12 @@ static int get_address_index(struct in_addr *addr, struct apattern *sortlist,
for (i = 0; i < nsort; i++)
{
- if ((addr->s_addr & sortlist[i].mask.s_addr) == sortlist[i].addr.s_addr)
- break;
+ if (sortlist[i].type = PATTERN_MASK)
+ if ((addr->s_addr & sortlist[i].mask.addr.s_addr) == sortlist[i].addr.s_addr)
+ break;
+ else
+ if (!ares_bitncmp(&addr->s_addr, &sortlist[i].addr.s_addr, sortlist[i].mask.bits))
+ break;
}
return i;
}