also support ip6.arpa in addition to ip6.int
This commit is contained in:
parent
1e871b1c32
commit
499ca6a307
2
CHANGES
2
CHANGES
@ -2,6 +2,8 @@
|
||||
add errmsg API
|
||||
work around broken Linux sendfile API (offset 64-bit but count 32-bit)
|
||||
add io_appendfile, io_readwritefile
|
||||
support ip6.arpa in addition to ip6.int in dns_name (adds one
|
||||
parameter to dns_name6_domain and two constants in dns.h)
|
||||
|
||||
0.19.2:
|
||||
for some reason, a botched dependency slipped in the the Makefile
|
||||
|
6
dns.h
6
dns.h
@ -87,7 +87,9 @@ int dns_ip4_qualify(stralloc *,stralloc *,const stralloc *);
|
||||
int dns_ip6_qualify_rules(stralloc *,stralloc *,const stralloc *,const stralloc *);
|
||||
int dns_ip6_qualify(stralloc *,stralloc *,const stralloc *);
|
||||
|
||||
int dns_name6_domain(char *,char *);
|
||||
#define DNS_NAME6_DOMAIN (4*16+10)
|
||||
#define DNS_IP6_INT 0
|
||||
#define DNS_IP6_ARPA 1
|
||||
int dns_name6_domain(char *,const char *,int);
|
||||
#define DNS_NAME6_DOMAIN (4*16+11)
|
||||
|
||||
#endif
|
||||
|
@ -48,16 +48,23 @@ int dns_name4(stralloc *out,const char ip[4])
|
||||
return 0;
|
||||
}
|
||||
|
||||
int dns_name6(stralloc *out,char ip[16])
|
||||
static int dns_name6_inner(stralloc *out,const char ip[16],int t)
|
||||
{
|
||||
char name[DNS_NAME6_DOMAIN];
|
||||
|
||||
if (ip6_isv4mapped(ip))
|
||||
return dns_name4(out,ip+12);
|
||||
dns_name6_domain(name,ip);
|
||||
dns_name6_domain(name,ip,t);
|
||||
if (dns_resolve(name,DNS_T_PTR) == -1) return -1;
|
||||
if (dns_name_packet(out,dns_resolve_tx.packet,dns_resolve_tx.packetlen) == -1) return -1;
|
||||
dns_transmit_free(&dns_resolve_tx);
|
||||
dns_domain_free(&q);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int dns_name6(stralloc *out,const char ip[16])
|
||||
{
|
||||
if (ip6_isv4mapped(ip))
|
||||
return dns_name4(out,ip+12);
|
||||
if (dns_name6_inner(out,ip,DNS_IP6_ARPA)) return -1;
|
||||
if (!out->len) return dns_name6_inner(out,ip,DNS_IP6_INT);
|
||||
return 0;
|
||||
}
|
||||
|
@ -11,7 +11,10 @@ puts the (first) domain name into \fIout\fR and returns 0. If the relevant
|
||||
ip6.int domain does not exist in DNS, or has no PTR records, \fIout\fR
|
||||
will be empty.
|
||||
|
||||
If dns_name4 has trouble with the DNS lookup or runs out of memory, it returns
|
||||
dns_name6 will try both the new "ip6.arpa" reverse lookup domain and the
|
||||
old (deprecated) "ip6.int" one.
|
||||
|
||||
If dns_name6 has trouble with the DNS lookup or runs out of memory, it returns
|
||||
-1, setting errno appropriately. It may or may not change \fIout\fR.
|
||||
.SH "SEE ALSO"
|
||||
dns_name_packet(3), dns_name6_domain(3), dns_name4(3), dns_ip6(3)
|
||||
|
@ -5,11 +5,15 @@ dns_name6_domain \- construct host name for reverse lookup
|
||||
.B #include <dns.h>
|
||||
|
||||
int \fBdns_name6_domain\fP(char \fIq\fR[DNS_NAME6_DOMAIN],
|
||||
const char* \fIip\fR[16]);
|
||||
const char* \fIip\fR[16],int \fItype\fR);
|
||||
.SH DESCRIPTION
|
||||
dns_name6_domain is a low-level component of dns_name6. It converts an
|
||||
IP address such as 4321:0:1:2:3:4:567:89ab into a domain name such as
|
||||
b.a.9.8.7.6.5.0.4.0.0.0.3.0.0.0.2.0.0.0.1.0.0.0.0.0.0.0.1.2.3.4.IP6.INT
|
||||
and places the packet-encoded domain name into \fIq\fR.
|
||||
|
||||
\fItype\fR can be DNS_IP6_INT or DNS_IP6_ARPA. The "ip6.int" domain for
|
||||
IPv6 reverse lookups is now deprecated and "ip6.arpa" is the standard
|
||||
way.
|
||||
.SH "SEE ALSO"
|
||||
dns_name6(3), dns_name4_domain(3)
|
||||
|
@ -7,13 +7,14 @@
|
||||
* 4321:0:1:2:3:4:567:89ab
|
||||
* ->
|
||||
* b.a.9.8.7.6.5.0.4.0.0.0.3.0.0.0.2.0.0.0.1.0.0.0.0.0.0.0.1.2.3.4.IP6.INT.
|
||||
* b.a.9.8.7.6.5.0.4.0.0.0.3.0.0.0.2.0.0.0.1.0.0.0.0.0.0.0.1.2.3.4.IP6.ARPA.
|
||||
*/
|
||||
|
||||
static inline char tohex(char c) {
|
||||
static char tohex(char c) {
|
||||
return c>=10?c-10+'a':c+'0';
|
||||
}
|
||||
|
||||
int dns_name6_domain(char name[DNS_NAME6_DOMAIN],char ip[16])
|
||||
int dns_name6_domain(char name[DNS_NAME6_DOMAIN],const char ip[16],int t)
|
||||
{
|
||||
unsigned int j;
|
||||
|
||||
@ -23,7 +24,11 @@ int dns_name6_domain(char name[DNS_NAME6_DOMAIN],char ip[16])
|
||||
name[j*4+2]=1;
|
||||
name[j*4+3]=tohex((unsigned char)ip[15-j] >> 4);
|
||||
}
|
||||
byte_copy(name + 4*16,9,"\3ip6\3int\0");
|
||||
return 4*16+9;
|
||||
if (t==DNS_IP6_INT)
|
||||
byte_copy(name + 4*16,9,"\3ip6\3int\0");
|
||||
else if (t==DNS_IP6_ARPA)
|
||||
byte_copy(name + 4*16,10,"\3ip6\4arpa\0");
|
||||
else return 0;
|
||||
return 4*16+9+t;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user