release
[hcoop/zz_old/debian/djbdns.git] / dnsqr.c
CommitLineData
dc0d77d7
CE
1#include "uint16.h"
2#include "strerr.h"
3#include "buffer.h"
4#include "scan.h"
5#include "str.h"
6#include "byte.h"
7#include "error.h"
8#include "iopause.h"
9#include "printpacket.h"
10#include "parsetype.h"
11#include "dns.h"
12
13#define FATAL "dnsqr: fatal: "
14
15void usage(void)
16{
17 strerr_die1x(100,"dnsqr: usage: dnsqr type name");
18}
19void oops(void)
20{
21 strerr_die2sys(111,FATAL,"unable to parse: ");
22}
23
24char type[2];
25static char *q;
26
27static stralloc out;
28
29static char seed[128];
30
31int main(int argc,char **argv)
32{
33 uint16 u16;
34
35 dns_random_init(seed);
36
37 if (!*argv) usage();
38 if (!*++argv) usage();
39 if (!parsetype(*argv,type)) usage();
40
41 if (!*++argv) usage();
42 if (!dns_domain_fromdot(&q,*argv,str_len(*argv))) oops();
43
44 if (*++argv) usage();
45
46 if (!stralloc_copys(&out,"")) oops();
47 uint16_unpack_big(type,&u16);
48 if (!stralloc_catulong0(&out,u16,0)) oops();
49 if (!stralloc_cats(&out," ")) oops();
50 if (!dns_domain_todot_cat(&out,q)) oops();
51 if (!stralloc_cats(&out,":\n")) oops();
52
53 if (dns_resolve(q,type) == -1) {
54 if (!stralloc_cats(&out,error_str(errno))) oops();
55 if (!stralloc_cats(&out,"\n")) oops();
56 }
57 else {
58 if (dns_resolve_tx.packetlen < 4) oops();
59 dns_resolve_tx.packet[2] &= ~1;
60 dns_resolve_tx.packet[3] &= ~128;
61 if (!printpacket_cat(&out,dns_resolve_tx.packet,dns_resolve_tx.packetlen)) oops();
62 }
63
64 buffer_putflush(buffer_1,out.s,out.len);
65 _exit(0);
66}