Commit: 7489e152d5952c088b24dd2f8766fe637ff5d746
Parent: 38c28fd6383a75062944b3b5062d7974eb65425d
Author: opask
Date: Thu, 30 Aug 2018 22:14:25 -0600
revert most of 38c28fd, cleanup introduced warnings
Diffstat:
2 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/TODO b/TODO
@@ -49,3 +49,5 @@
being (mis)used as one. there are a number of places where this results in
use of out of bounds memory. these NEED to be fixed, its amazing the code
ever worked at all
+ - not necessarily correct, however the code should be simplified to be
+ more understandable.
diff --git a/dns.c b/dns.c
@@ -12,7 +12,7 @@ struct dnsentry {
uttime absolute_time;
struct lookup_result addr;
list_entry_last
- char name;
+ char name[1];
};
struct dnsquery {
@@ -22,7 +22,7 @@ struct dnsquery {
struct dnsquery **s;
struct lookup_result *addr;
int addr_preference;
- char name;
+ char name[1];
};
static int dns_cache_addr_preference = -1;
@@ -269,7 +269,7 @@ ret:
static int do_lookup(struct dnsquery *q, int force_async)
{
- do_real_lookup(q->name, q->addr_preference, q->addr);
+ do_real_lookup((unsigned char *)q->name, q->addr_preference, q->addr);
end_dns_lookup(q, !q->addr->n);
return 0;
}
@@ -293,7 +293,7 @@ static int find_in_dns_cache(unsigned char *name, struct dnsentry **dnsentry)
struct list_head *le;
check_dns_cache_addr_preference();
foreach(struct dnsentry, e, le, dns_cache)
- if (!casestrcmp(e->name, name)) {
+ if (!casestrcmp((unsigned char *)e->name, name)) {
del_from_list(e);
add_to_list(dns_cache, e);
*dnsentry = e;
@@ -317,7 +317,7 @@ static void end_dns_lookup(struct dnsquery *q, int a)
free(q);
return;
}
- if (!find_in_dns_cache(q->name, &dnsentry)) {
+ if (!find_in_dns_cache((unsigned char *)q->name, &dnsentry)) {
if (a) {
memcpy(q->addr, &dnsentry->addr, sizeof(struct lookup_result));
a = 0;
@@ -330,8 +330,8 @@ static void end_dns_lookup(struct dnsquery *q, int a)
if (q->addr_preference != ipv6_options.addr_preference)
goto e;
check_dns_cache_addr_preference();
- dnsentry = xmalloc(sizeof(struct dnsentry));
- dnsentry->name = q->name;
+ dnsentry = xmalloc(sizeof(struct dnsentry) + strlen(q->name));
+ strcpy(dnsentry->name, q->name);
memcpy(&dnsentry->addr, q->addr, sizeof(struct lookup_result));
dnsentry->absolute_time = get_absolute_time();
add_to_list(dns_cache, dnsentry);
@@ -360,7 +360,7 @@ int find_host_no_cache(unsigned char *name, struct lookup_result *addr, void **q
q->s = (struct dnsquery **)qp;
q->addr = addr;
q->addr_preference = ipv6_options.addr_preference;
- q->name = name[0];
+ strcpy(q->name, (char *)name);
if (qp)
*qp = q;
return do_queued_lookup(q);