summaryrefslogtreecommitdiff
path: root/src/libs6dns/s6dns_hosts_ip_string.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs6dns/s6dns_hosts_ip_string.c')
-rw-r--r--src/libs6dns/s6dns_hosts_ip_string.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/src/libs6dns/s6dns_hosts_ip_string.c b/src/libs6dns/s6dns_hosts_ip_string.c
index 430f7d3..8d67cb1 100644
--- a/src/libs6dns/s6dns_hosts_ip_string.c
+++ b/src/libs6dns/s6dns_hosts_ip_string.c
@@ -1,7 +1,6 @@
/* ISC license. */
#include <errno.h>
-#include <string.h>
#include <skalibs/cdb.h>
#include <skalibs/stralloc.h>
@@ -14,21 +13,22 @@
extern int s6dns_hosts_ip_string_r (cdb const *c, char const *name, stralloc *sa, unsigned int flags)
{
s6dns_domain_t d ;
- int r ;
cdb_data data ;
if (!c->map) return 0 ;
- if (!s6dns_domain_fromstring(&d, name, strlen(name))
- || !s6dns_domain_noqualify(&d)) return -1 ;
-
+ if (!s6dns_domain_fromstring(&d, name, strlen(name))) return -1 ;
+ if (!(flags & 2) && !s6dns_domain_noqualify(&d)) return -1 ;
{
- char tmp[3 + d.len] ;
+ int r ;
+ char tmp[4 + d.len] ;
tmp[0] = flags & 2 ? 'u' : 'a' ;
tmp[1] = flags & 1 ? '6' : '4' ;
tmp[2] = ':' ;
- memcpy(tmp + 3, d.s, d.len) ;
- r = cdb_find(c, &data, tmp, 3 + d.len) ;
+ r = s6dns_domain_tostring(tmp + 3, d.len + 1, &d) ;
+ tmp[3 + r] = 0 ;
+ if (!r) return -1 ;
+ r = cdb_find(c, &data, tmp, 3 + r) ;
+ if (r <= 0) return r ;
}
- if (r <= 0) return r ;
if (!data.len) return 0 ;
if (data.len & (flags & 1 ? 15 : 3)) return (errno = EPROTO, -1) ;
if (!stralloc_catb(sa, data.s, data.len)) return -1 ;