djbdnscurve6  38
djbdnscurve6
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 
7 static char *q = 0;
8 
9 int 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 
39 int dns_name4(stralloc *out,const char ip[4])
40 {
41  int rc;
42  char name[DNS_NAME4_DOMAIN];
43 
45  if (dns_resolve(name,DNS_T_PTR) < 0) return DNS_ERR;
48  dns_domain_free(&q);
49  return rc;
50 }
51 
52 int dns_name6(stralloc *out,const char ip[16])
53 {
54  int rc;
55  char name[DNS_NAME6_DOMAIN];
56 
58  if (dns_resolve(name,DNS_T_PTR) < 0) return DNS_ERR;
61  dns_domain_free(&q);
62  return rc;
63 }
64 
65 int 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:126
uint16 len
Definition: axfrdns.c:302
char buf[MSGSIZE]
Definition: axfrdns.c:301
void dns_transmit_free(struct dns_transmit *)
Definition: dns_transmit.c:96
#define DNS_NAME4_DOMAIN
Definition: dns.h:144
unsigned int dns_packet_copy(const char *, unsigned int, unsigned int, char *, unsigned int)
Definition: dns_packet.c:8
#define DNS_ERR
Definition: dns.h:22
int dns_domain_todot_cat(stralloc *, const char *)
Definition: dns_dtda.c:11
#define DNS_C_IN
Definition: dns.h:34
int dns_resolve(const char *, const char *)
unsigned int dns_packet_skipname(const char *, unsigned int, unsigned int)
Definition: dns_packet.c:18
int dns_name4_domain(char *, const char *)
void dns_domain_free(char **)
Definition: dns_domain.c:17
#define DNS_T_PTR
Definition: dns.h:41
int dns_name6_domain(char *, const char *)
#define DNS_NAME6_DOMAIN
Definition: dns.h:157
unsigned int dns_packet_getname(const char *, unsigned int, unsigned int, char **)
Definition: dns_packet.c:35
#define DNS_MEM
Definition: dns.h:21
struct dns_transmit dns_resolve_tx
Definition: dns_resolve.c:7
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
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:77
char * packet
Definition: dns.h:76