djbdnscurve6 45
djbdnscurve6
Loading...
Searching...
No Matches
dns_name.c
Go to the documentation of this file.
1#include "stralloc.h"
2#include "uint_t.h"
3#include "byte.h"
4#include "ip.h"
5#include "dns.h"
6
7static char *q = 0;
8
9int dns_name_packet(stralloc *out,const char *buf,unsigned int len)
10{
11 unsigned int pos;
12 char header[12];
13 uint16 numanswers;
14 uint16 datalen;
15
16 if (!stralloc_copys(out,"")) return DNS_MEM;
17
18 pos = dns_packet_copy(buf,len,0,header,12); if (!pos) return DNS_ERR;
19 uint16_unpack_big(header + 6,&numanswers);
20 pos = dns_packet_skipname(buf,len,pos); if (!pos) return DNS_ERR;
21 pos += 4;
22
23 while (numanswers--) {
24 pos = dns_packet_skipname(buf,len,pos); if (!pos) return DNS_ERR;
25 pos = dns_packet_copy(buf,len,pos,header,10); if (!pos) return DNS_ERR;
26 uint16_unpack_big(header + 8,&datalen);
27 if (byte_equal(header,2,DNS_T_PTR))
28 if (byte_equal(header + 2,2,DNS_C_IN)) {
29 if (!dns_packet_getname(buf,len,pos,&q)) return DNS_ERR;
30 if (dns_domain_todot_cat(out,q) <= 0) return DNS_ERR;
31 return 1;
32 }
33 pos += datalen;
34 }
35
36 return 0;
37}
38
39int dns_name4(stralloc *out,const char ip[4])
40{
41 int rc;
43
45 if (dns_resolve(name,DNS_T_PTR) < 0) return DNS_ERR;
49 return rc;
50}
51
52int dns_name6(stralloc *out,const char ip[16])
53{
54 int rc;
56
58 if (dns_resolve(name,DNS_T_PTR) < 0) return DNS_ERR;
62 return rc;
63}
64
65int dns_name(stralloc *out,const char ip[16])
66{
67 if (ip6_isv4mapped(ip))
68 return dns_name4(out,ip+12);
69 else
70 return dns_name6(out,ip);
71}
char ip[16]
Definition: axfrdns.c:125
uint16 len
Definition: axfrdns.c:319
char buf[MSGSIZE]
Definition: axfrdns.c:318
#define DNS_NAME4_DOMAIN
Definition: dns.h:162
#define DNS_ERR
Definition: dns.h:32
#define DNS_C_IN
Definition: dns.h:53
#define DNS_T_PTR
Definition: dns.h:60
#define DNS_NAME6_DOMAIN
Definition: dns.h:175
#define DNS_MEM
Definition: dns.h:31
void dns_domain_free(char **out)
Definition: dns_domain.c:17
int dns_domain_todot_cat(stralloc *out, const char *d)
Definition: dns_dtda.c:11
int dns_name6(stralloc *out, const char ip[16])
Definition: dns_name.c:52
int dns_name_packet(stralloc *out, const char *buf, unsigned int len)
Definition: dns_name.c:9
int dns_name4(stralloc *out, const char ip[4])
Definition: dns_name.c:39
int dns_name(stralloc *out, const char ip[16])
Definition: dns_name.c:65
int dns_name4_domain(char name[DNS_NAME4_DOMAIN], const char ip[4])
Definition: dns_nd.c:6
int dns_name6_domain(char name[DNS_NAME6_DOMAIN], const char ip[16])
Definition: dns_nd.c:28
unsigned int dns_packet_getname(const char *buf, unsigned int len, unsigned int pos, char **d)
Definition: dns_packet.c:35
unsigned int dns_packet_copy(const char *buf, unsigned int len, unsigned int pos, char *out, unsigned int outlen)
Definition: dns_packet.c:8
unsigned int dns_packet_skipname(const char *buf, unsigned int len, unsigned int pos)
Definition: dns_packet.c:18
int dns_resolve(const char *q, const char qtype[2])
Definition: dns_resolve.c:9
struct dns_transmit dns_resolve_tx
Definition: dns_resolve.c:7
void dns_transmit_free(struct dns_transmit *d)
Definition: dns_transmit.c:95
char name[DNS_NAME6_DOMAIN]
Definition: dnsfilter.c:52
void out(const char *s, unsigned int len)
Definition: generic-conf.c:54
unsigned int packetlen
Definition: dns.h:96
char * packet
Definition: dns.h:95