djbdnscurve6  38
djbdnscurve6
dns.h
Go to the documentation of this file.
1 /*
2  * Revision 20180606, Erwin Hoffmann
3  * - struct dns_transmit is now curve-enabled
4  * Revision 20180222, Erwin Hoffmann
5  * - we consider in total 32 NS IPs (IPv4 + IPv6)
6  * - added dns_transmit_start6
7  * - added uint32 scope_ids[32],
8  * the initial NS scopes read from /etc/resolv.conf et al.
9  * Revision 20180118, Erwin Hoffmann
10  * - included MSGSIZE for DNS messages (instead of MTUSIZE)
11 */
12 #ifndef DNS_H
13 #define DNS_H
14 
15 #include "stralloc.h"
16 #include "iopause.h"
17 #include "taia.h"
18 
19 /* Note: The conventions are subject of change in forthcoming versions */
20 
21 #define DNS_MEM -1
22 #define DNS_ERR -2 /* parsing errors and others */
23 #define DNS_COM -3 /* (socket) communication errors - SERVFAIL */
24 #define DNS_INT -4 /* internal errors */
25 
26 #define MSGSIZE MTUSIZE /* aggressive */
27 // #define MSGSIZE 512 /* RFC 1035 */
28 
29 #define QUERY_MAXNS 32 /* 16 IPv4 + 16 IPv6 NS */
30 #define QUERY_MAXIPLEN 512 /* QUERY_MAXNS * 16 */
31 
32 /* Note: These following definitions are subject of change */
33 
34 #define DNS_C_IN "\0\1"
35 #define DNS_C_ANY "\0\377"
36 
37 #define DNS_T_A "\0\1"
38 #define DNS_T_NS "\0\2"
39 #define DNS_T_CNAME "\0\5"
40 #define DNS_T_SOA "\0\6"
41 #define DNS_T_PTR "\0\14"
42 #define DNS_T_HINFO "\0\15"
43 #define DNS_T_MX "\0\17"
44 #define DNS_T_TXT "\0\20"
45 #define DNS_T_RP "\0\21"
46 #define DNS_T_SIG "\0\30"
47 #define DNS_T_KEY "\0\31"
48 #define DNS_T_AAAA "\0\34"
49 #define DNS_T_SRV "\0\41"
50 #define DNS_T_NAPTR "\0\43"
51 #define DNS_T_CERT "\0\45"
52 #define DNS_T_OPT "\0\51"
53 #define DNS_T_DS "\0\53"
54 #define DNS_T_SSHFP "\0\54"
55 #define DNS_T_IPSECKEY "\0\55"
56 #define DNS_T_RRSIG "\0\56"
57 #define DNS_T_NSEC "\0\57"
58 #define DNS_T_DNSKEY "\0\60"
59 #define DNS_T_NSEC3 "\0\62"
60 #define DNS_T_NSEC3PARAM "\0\63"
61 #define DNS_T_TLSA "\0\64"
62 #define DNS_T_HIP "\0\67"
63 #define DNS_T_OPENPGPKEY "\0\75"
64 #define DNS_T_SPF "\0\143"
65 #define DNS_T_AXFR "\0\374"
66 #define DNS_T_ANY "\0\377"
67 #define DNS_T_CAA "\1\1"
68 
69 #define LOCALHOST "localhost" /* no clear distinction IPv4/IPv6 */
70 #define IP4_LOOPBACK "ip4-loopback"
71 #define IP6_LOOPBACK "ip6-loopback"
72 
73 struct dns_transmit {
74  char *query; /* 0, or dynamically allocated */
75  unsigned int querylen;
76  char *packet; /* 0, or dynamically allocated */
77  unsigned int packetlen;
78  int s1; /* 0, or 1 + an open file descriptor */
79  int tcpstate;
81  unsigned int udploop;
82  unsigned int curserver;
83  struct taia deadline;
84  unsigned int pos;
85  const char *name; /* query name */
86  const char *servers;
87  const char *keys;
88  const char *pubkey;
89  const char *suffix; /* domain name */
90  char nonce[12];
91  uint32 scope_id;
92  char localip[16];
93  char qtype[2];
94 } ;
95 
96 /* General */
97 
98 extern void dns_random_init(const char *);
99 extern unsigned int dns_random(unsigned int);
100 
101 extern void dns_domain_free(char **);
102 extern int dns_domain_copy(char **,const char *);
103 extern unsigned int dns_domain_length(const char *);
104 extern int dns_domain_equal(const char *,const char *);
105 extern int dns_domain_suffix(const char *,const char *);
106 extern unsigned int dns_domain_suffixpos(const char *,const char *);
107 extern int dns_domain_fromdot(char **,const char *,unsigned int);
108 extern int dns_domain_todot_cat(stralloc *,const char *);
109 
110 extern unsigned int dns_packet_copy(const char *,unsigned int,unsigned int,char *,unsigned int);
111 extern unsigned int dns_packet_getname(const char *,unsigned int,unsigned int,char **);
112 extern unsigned int dns_packet_skipname(const char *,unsigned int,unsigned int);
113 
114 extern struct dns_transmit dns_resolve_tx;
115 extern int dns_transmit_start(struct dns_transmit *,const char *,int,const char *,const char *,const char *);
116 extern void dns_transmit_free(struct dns_transmit *);
117 extern void dns_transmit_io(struct dns_transmit *,iopause_fd *,struct taia *);
118 extern int dns_transmit_get(struct dns_transmit *,const iopause_fd *,const struct taia *);
119 
120 /* Common IPv4 + IPv6 */
121 
122 extern int dns_resolvconfip(char *,uint32 *);
123 extern int dns_resolvconfrewrite(stralloc *);
124 extern int dns_resolve(const char *,const char *);
125 
126 extern int dns_name(stralloc *,const char *);
127 extern int dns_name_packet(stralloc *,const char *,unsigned int);
128 extern int dns_txt_packet(stralloc *,const char *,unsigned int);
129 extern int dns_txt(stralloc *,const stralloc *);
130 extern int dns_mx_packet(stralloc *,const char *,unsigned int);
131 extern int dns_mx(stralloc *,const stralloc *);
132 extern void dns_sortip(char *,unsigned int);
133 extern int dns_ip_qualify(stralloc *,stralloc *,const stralloc *);
134 
135 /* IPv4 specific */
136 
137 extern int dns_ip4_packet(stralloc *,const char *,unsigned int);
138 extern int dns_ip4(stralloc *,stralloc *);
139 extern void dns_sortip4(char *,unsigned int);
140 
141 extern int dns_ip4_qualify_rules(stralloc *,stralloc *,const stralloc *,const stralloc *);
142 extern int dns_ip4_qualify(stralloc *,stralloc *,const stralloc *);
143 
144 #define DNS_NAME4_DOMAIN 31
145 extern int dns_name4_domain(char *,const char *);
146 extern int dns_name4(stralloc *,const char *);
147 
148 /* IPv6 specific */
149 
150 extern int dns_ip6_packet(stralloc *,const char *,unsigned int);
151 extern int dns_ip6(stralloc *,stralloc *);
152 extern void dns_sortip6(char *,unsigned int);
153 
154 extern int dns_ip6_qualify_rules(stralloc *,stralloc *,const stralloc *,const stralloc *);
155 extern int dns_ip6_qualify(stralloc *,stralloc *,const stralloc *);
156 
157 #define DNS_NAME6_DOMAIN (4*16+11)
158 extern int dns_name6_domain(char *,const char *);
159 extern int dns_name6(stralloc *,const char *);
160 
161 extern int dns_transmit_start6(struct dns_transmit *,const char *,int,const char *,const char *,const char *,const uint32 *);
162 
163 /* General */
164 
165 extern void socketfree(struct dns_transmit *);
166 extern void queryfree(struct dns_transmit *);
167 extern void packetfree(struct dns_transmit *);
168 extern int randombind(struct dns_transmit *);
169 extern int serverwantstcp(const char *,unsigned int);
170 extern int serverfailed(const char *,unsigned int,char *);
171 extern int getscopeid(const struct dns_transmit *,const char *);
172 extern int firstudp(struct dns_transmit *);
173 extern int nextudp(struct dns_transmit *);
174 extern int firsttcp(struct dns_transmit *);
175 extern int nexttcp(struct dns_transmit *);
176 
177 #endif
void dns_transmit_free(struct dns_transmit *)
Definition: dns_transmit.c:96
int dns_name(stralloc *, const char *)
void dns_transmit_io(struct dns_transmit *, iopause_fd *, struct taia *)
Definition: dns_transmit.c:284
int dns_ip4_qualify_rules(stralloc *, stralloc *, const stralloc *, const stralloc *)
Definition: dns_ipq.c:47
void dns_sortip4(char *, unsigned int)
Definition: dns_sortip.c:10
int serverwantstcp(const char *, unsigned int)
Definition: dns_transmit.c:30
void socketfree(struct dns_transmit *)
Definition: dns_transmit.c:89
unsigned int dns_packet_copy(const char *, unsigned int, unsigned int, char *, unsigned int)
Definition: dns_packet.c:8
int dns_ip4_packet(stralloc *, const char *, unsigned int)
Definition: dns_ip.c:9
int dns_ip4(stralloc *, stralloc *)
Definition: dns_ip.c:42
int dns_resolvconfip(char *, uint32 *)
void packetfree(struct dns_transmit *)
Definition: dns_transmit.c:75
int dns_domain_equal(const char *, const char *)
Definition: dns_domain.c:39
int serverfailed(const char *, unsigned int, char *)
Definition: dns_transmit.c:39
int dns_name4(stralloc *, const char *)
unsigned int dns_random(unsigned int)
Definition: dns_random.c:52
int dns_domain_fromdot(char **, const char *, unsigned int)
Definition: dns_dfd.c:6
int dns_domain_todot_cat(stralloc *, const char *)
Definition: dns_dtda.c:11
int dns_ip_qualify(stralloc *, stralloc *, const stralloc *)
Definition: dns_ipq.c:228
int firstudp(struct dns_transmit *)
Definition: dns_transmit.c:198
int dns_resolve(const char *, const char *)
int dns_domain_copy(char **, const char *)
Definition: dns_domain.c:25
int nexttcp(struct dns_transmit *)
Definition: dns_transmit.c:261
void dns_sortip6(char *, unsigned int)
Definition: dns_sortip.c:25
int dns_domain_suffix(const char *, const char *)
Definition: dns_domain.c:50
int dns_name_packet(stralloc *, const char *, unsigned int)
Definition: dns_name.c:9
int firsttcp(struct dns_transmit *)
Definition: dns_transmit.c:255
int dns_ip4_qualify(stralloc *, stralloc *, const stralloc *)
Definition: dns_ipq.c:109
unsigned int dns_packet_skipname(const char *, unsigned int, unsigned int)
Definition: dns_packet.c:18
int dns_transmit_start(struct dns_transmit *, const char *, int, const char *, const char *, const char *)
int dns_name4_domain(char *, const char *)
void dns_domain_free(char **)
Definition: dns_domain.c:17
unsigned int dns_domain_length(const char *)
Definition: dns_domain.c:6
int dns_txt_packet(stralloc *, const char *, unsigned int)
Definition: dns_txt.c:6
int dns_ip6_qualify_rules(stralloc *, stralloc *, const stralloc *, const stralloc *)
Definition: dns_ipq.c:121
unsigned int dns_domain_suffixpos(const char *, const char *)
Definition: dns_domain.c:62
void queryfree(struct dns_transmit *)
Definition: dns_transmit.c:82
int dns_resolvconfrewrite(stralloc *)
Definition: dns_rcrw.c:115
int dns_ip6(stralloc *, stralloc *)
Definition: dns_ip.c:134
int dns_name6_domain(char *, const char *)
int dns_transmit_start6(struct dns_transmit *, const char *, int, const char *, const char *, const char *, const uint32 *)
int dns_mx_packet(stralloc *, const char *, unsigned int)
Definition: dns_mx.c:8
int randombind(struct dns_transmit *)
Definition: dns_transmit.c:103
int dns_ip6_qualify(stralloc *, stralloc *, const stralloc *)
Definition: dns_ipq.c:157
unsigned int dns_packet_getname(const char *, unsigned int, unsigned int, char **)
Definition: dns_packet.c:35
int dns_mx(stralloc *, const stralloc *)
Definition: dns_mx.c:43
void dns_random_init(const char *)
void dns_sortip(char *, unsigned int)
Definition: dns_sortip.c:40
int dns_txt(stralloc *, const stralloc *)
Definition: dns_txt.c:54
struct dns_transmit dns_resolve_tx
Definition: dns_resolve.c:7
int nextudp(struct dns_transmit *)
Definition: dns_transmit.c:206
int dns_ip6_packet(stralloc *, const char *, unsigned int)
Definition: dns_ip.c:94
int dns_name6(stralloc *, const char *)
int getscopeid(const struct dns_transmit *, const char *)
Definition: dns_transmit.c:19
int dns_transmit_get(struct dns_transmit *, const iopause_fd *, const struct taia *)
Definition: dns_transmit.c:301
uint32 scope_id
Definition: dns.h:91
unsigned int curserver
Definition: dns.h:82
char qtype[2]
Definition: dns.h:93
unsigned int udploop
Definition: dns.h:81
char localip[16]
Definition: dns.h:92
int flagrecursive
Definition: dns.h:80
int tcpstate
Definition: dns.h:79
const char * name
Definition: dns.h:85
char nonce[12]
Definition: dns.h:90
struct taia deadline
Definition: dns.h:83
const char * servers
Definition: dns.h:86
unsigned int packetlen
Definition: dns.h:77
const char * pubkey
Definition: dns.h:88
unsigned int querylen
Definition: dns.h:75
char * packet
Definition: dns.h:76
const char * suffix
Definition: dns.h:89
int s1
Definition: dns.h:78
const char * keys
Definition: dns.h:87
unsigned int pos
Definition: dns.h:84
char * query
Definition: dns.h:74