djbdnscurve6 53
djbdnscurve6
Loading...
Searching...
No Matches
dnsq.c
Go to the documentation of this file.
1#include "uint_t.h"
2#include "logmsg.h"
3#include "buffer.h"
4#include "scan.h"
5#include "str.h"
6#include "byte.h"
7#include "ip.h"
8#include "iopause.h"
9#include "printpacket.h"
10#include "parsetype.h"
11#include "dns.h"
12#include "ip.h"
13#include "exit.h"
14#include "curvedns.h"
15
16#define WHO "dnsq"
17
18unsigned int msgsize = MSGSIZE;
19unsigned int flagedns0 = 0;
20
21void usage(void)
22{
23 logmsg(WHO,100,USAGE,"type name server");
24}
25void oops(void)
26{
27 logmsg(WHO,111,FATAL,"unable to parse");
28}
29
30static struct dns_transmit tx;
31
32int resolve(char *q,char qtype[2],char servers[QUERY_MAXIPLEN])
33{
34 struct taia stamp;
35 struct taia deadline;
36 iopause_fd x[1];
37 int r;
38 char qflags[2] = { 0, 0 }; // flagrecursive, flagedns0
39
40 if (cns_transmit_start(&tx,servers,qflags,q,qtype,V6any,0,0,0) < 0) return DNS_COM;
41
42 for (;;) {
43 taia_now(&stamp);
44 taia_uint(&deadline,120);
45 taia_add(&deadline,&deadline,&stamp);
46 dns_transmit_io(&tx,x,&deadline);
47 iopause(x,1,&deadline,&stamp);
48 r = dns_transmit_get(&tx,x,&stamp);
49 if (r < 0) return DNS_ERR;
50 if (r == 1) break;
51 }
52
53 return 0;
54}
55
57static stralloc ip;
58static stralloc fqdn;
59
60char type[2];
61static char *q;
62
63static stralloc out;
64
65static char seed[128];
66
67int main(int argc,char **argv)
68{
69 uint16 u16;
70
72
73 if (!*argv) usage();
74 if (!*++argv) usage();
75 if (!parsetype(*argv,type)) usage();
76
77 if (!*++argv) usage();
78 if (dns_domain_fromdot(&q,*argv,str_len(*argv)) <= 0) oops();
79
80 if (!*++argv) usage();
81 if (!stralloc_copys(&out,*argv)) oops();
82 if (dns_ip_qualify(&ip,&fqdn,&out) < 0) oops();
83 if (ip.len >= QUERY_MAXIPLEN) ip.len = QUERY_MAXIPLEN;
84 byte_zero(servers,QUERY_MAXIPLEN);
85 byte_copy(servers,ip.len,ip.s);
86
87 if (!stralloc_copys(&out,"")) oops();
88 uint16_unpack_big(type,&u16);
89 if (!stralloc_catulong0(&out,u16,0)) oops();
90 if (!stralloc_cats(&out," ")) oops();
91 if (dns_domain_todot_cat(&out,q) <= 0) oops();
92 if (!stralloc_cats(&out,":\n")) oops();
93
94 if (resolve(q,type,servers) < 0) {
95 if (!stralloc_cats(&out,errstr(errno))) oops();
96 if (!stralloc_cats(&out,"\n")) oops();
97 }
98 else {
99 if (!printpacket_cat(&out,tx.packet,tx.packetlen)) oops();
100 }
101
102 buffer_putflush(buffer_1,out.s,out.len);
103 _exit(0);
104}
char ip[16]
Definition: axfrdns.c:128
int main()
Definition: axfrdns.c:326
int cns_transmit_start(struct dns_transmit *d, const char servers[QUERY_MAXIPLEN], char qflags[2], const char *q, const char qtype[2], const char localip[16], const char keys[QUERY_MAXNS *KEY_LEN], const char pubkey[KEY_LEN], const char *suffix)
Definition: curvedns.c:286
#define DNS_ERR
Definition: dns.h:41
#define QUERY_MAXIPLEN
Definition: dns.h:55
#define MSGSIZE
Definition: dns.h:47
#define DNS_COM
Definition: dns.h:42
int dns_domain_fromdot(char **out, const char *buf, unsigned int n)
Definition: dns_dfd.c:6
int dns_domain_todot_cat(stralloc *out, const char *d)
Definition: dns_dtda.c:11
int dns_ip_qualify(stralloc *ipout, stralloc *fqdn, const stralloc *in)
Definition: dns_ipq.c:228
void dns_random_init(const char data[128])
Definition: dns_random.c:36
void dns_transmit_io(struct dns_transmit *d, iopause_fd *x, struct taia *deadline)
Definition: dns_transmit.c:285
int dns_transmit_get(struct dns_transmit *d, const iopause_fd *x, const struct taia *when)
Definition: dns_transmit.c:302
uint32 seed[32]
Definition: dnscache-conf.c:36
struct line * x
void oops(void)
Definition: dnsq.c:25
int resolve(char *q, char qtype[2], char servers[QUERY_MAXIPLEN])
Definition: dnsq.c:32
char servers[QUERY_MAXIPLEN]
Definition: dnsq.c:56
char type[2]
Definition: dnsq.c:60
unsigned int flagedns0
Definition: dnsq.c:19
unsigned int msgsize
Definition: dnsq.c:18
#define WHO
Definition: dnsq.c:16
void usage(void)
Definition: dnsq.c:21
int parsetype(char *, char[2])
Definition: parsetype.c:8
unsigned int printpacket_cat(stralloc *, char *, unsigned int)
Definition: printpacket.c:14
char qtype[2]
Definition: dns.h:126
unsigned int packetlen
Definition: dns.h:109
char * packet
Definition: dns.h:108