installer - Several improvements
[dragonfly.git] / contrib / ldns / drill / root.c
1 /*
2  * root.c
3  * Function to handle to the rootservers
4  * and to update and prime them
5  * (c) 2005 NLnet Labs
6  *
7  * See the file LICENSE for the license
8  *
9  */
10
11 #include "drill.h"
12 #include <ldns/ldns.h>
13 #include <errno.h>
14
15 /* a global list of the root-servers */
16 ldns_rr_list *global_dns_root = NULL;
17
18 /* put a hardcoded list in the root and
19  * init the root rrlist structure */
20 void
21 init_root(void)
22 {
23         ldns_rr *r;
24         
25         global_dns_root = ldns_rr_list_new();
26
27         (void)ldns_rr_new_frm_str(&r, "A.ROOT-SERVERS.NET.      3600000      A     198.41.0.4", 0, NULL, NULL);
28         ldns_rr_list_push_rr(global_dns_root, r);
29         (void)ldns_rr_new_frm_str(&r, "A.ROOT-SERVERS.NET.      3600000      AAAA  2001:503:BA3E::2:30", 0, NULL, NULL);
30         ldns_rr_list_push_rr(global_dns_root, r);
31         (void)ldns_rr_new_frm_str(&r, "B.ROOT-SERVERS.NET.      3600000      A     192.228.79.201", 0, NULL, NULL);
32         ldns_rr_list_push_rr(global_dns_root, r);
33         (void)ldns_rr_new_frm_str(&r, "C.ROOT-SERVERS.NET.      3600000      A     192.33.4.12", 0, NULL, NULL);
34         ldns_rr_list_push_rr(global_dns_root, r);
35         (void)ldns_rr_new_frm_str(&r, "D.ROOT-SERVERS.NET.      3600000      A     128.8.10.90", 0, NULL, NULL);
36         ldns_rr_list_push_rr(global_dns_root, r);
37         (void)ldns_rr_new_frm_str(&r, "E.ROOT-SERVERS.NET.      3600000      A     192.203.230.10", 0, NULL, NULL);
38         ldns_rr_list_push_rr(global_dns_root, r);
39         (void)ldns_rr_new_frm_str(&r, "F.ROOT-SERVERS.NET.      3600000      A     192.5.5.241", 0, NULL, NULL);
40         ldns_rr_list_push_rr(global_dns_root, r);
41         (void)ldns_rr_new_frm_str(&r, "F.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:2F::F", 0, NULL, NULL);
42         ldns_rr_list_push_rr(global_dns_root, r);
43         (void)ldns_rr_new_frm_str(&r, "G.ROOT-SERVERS.NET.      3600000      A     192.112.36.4", 0, NULL, NULL);
44         ldns_rr_list_push_rr(global_dns_root, r);
45         (void)ldns_rr_new_frm_str(&r, "H.ROOT-SERVERS.NET.      3600000      A     128.63.2.53", 0, NULL, NULL);
46         ldns_rr_list_push_rr(global_dns_root, r);
47         (void)ldns_rr_new_frm_str(&r, "H.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:1::803F:235", 0, NULL, NULL);
48         ldns_rr_list_push_rr(global_dns_root, r);
49         (void)ldns_rr_new_frm_str(&r, "I.ROOT-SERVERS.NET.      3600000      A     192.36.148.17", 0, NULL, NULL);
50         ldns_rr_list_push_rr(global_dns_root, r);
51         (void)ldns_rr_new_frm_str(&r, "J.ROOT-SERVERS.NET.      3600000      A     192.58.128.30", 0, NULL, NULL);
52         ldns_rr_list_push_rr(global_dns_root, r);
53         (void)ldns_rr_new_frm_str(&r, "J.ROOT-SERVERS.NET.      3600000      AAAA  2001:503:C27::2:30", 0, NULL, NULL);
54         ldns_rr_list_push_rr(global_dns_root, r);
55         (void)ldns_rr_new_frm_str(&r, "K.ROOT-SERVERS.NET.      3600000      A     193.0.14.129 ", 0, NULL, NULL);
56         ldns_rr_list_push_rr(global_dns_root, r);
57         (void)ldns_rr_new_frm_str(&r, "K.ROOT-SERVERS.NET.      3600000      AAAA  2001:7FD::1", 0, NULL, NULL);
58         ldns_rr_list_push_rr(global_dns_root, r);
59         (void)ldns_rr_new_frm_str(&r, "L.ROOT-SERVERS.NET.      3600000      A     199.7.83.42", 0, NULL, NULL);
60         ldns_rr_list_push_rr(global_dns_root, r);
61         (void)ldns_rr_new_frm_str(&r, "L.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:3::42   ", 0, NULL, NULL);
62         ldns_rr_list_push_rr(global_dns_root, r);
63         (void)ldns_rr_new_frm_str(&r, "M.ROOT-SERVERS.NET.      3600000      A     202.12.27.33", 0, NULL, NULL);
64         ldns_rr_list_push_rr(global_dns_root, r);
65         (void)ldns_rr_new_frm_str(&r, "M.ROOT-SERVERS.NET.      3600000      AAAA  2001:DC3::35", 0, NULL, NULL);
66         ldns_rr_list_push_rr(global_dns_root, r);
67 }
68
69 /*
70  * Read a hints file as root
71  *
72  * The file with the given path should contain a list of NS RRs
73  * for the root zone and A records for those NS RRs.
74  * Read them, check them, and append the a records to the rr list given.
75  */
76 ldns_rr_list *
77 read_root_hints(const char *filename)
78 {
79         FILE *fp = NULL;
80         int line_nr = 0;
81         ldns_zone *z;
82         ldns_status status;
83         ldns_rr_list *addresses = NULL;
84         ldns_rr *rr;
85         size_t i;
86
87         fp = fopen(filename, "r");
88         if (!fp) {
89                 fprintf(stderr, "Unable to open %s for reading: %s\n", filename, strerror(errno));
90                 return NULL;
91         }
92
93         status = ldns_zone_new_frm_fp_l(&z, fp, NULL, 0, 0, &line_nr);
94         fclose(fp);
95         if (status != LDNS_STATUS_OK) {
96                 fprintf(stderr, "Error reading root hints file: %s\n", ldns_get_errorstr_by_id(status));
97                 return NULL;
98         } else {
99                 addresses = ldns_rr_list_new();
100                 for (i = 0; i < ldns_rr_list_rr_count(ldns_zone_rrs(z)); i++) { 
101                         rr = ldns_rr_list_rr(ldns_zone_rrs(z), i);
102                         /*if ((address_family == 0 || address_family == 1) &&
103                         */
104                         if ( ldns_rr_get_type(rr) == LDNS_RR_TYPE_A ) {
105                                 ldns_rr_list_push_rr(addresses, ldns_rr_clone(rr));
106                         }
107                         /*if ((address_family == 0 || address_family == 2) &&*/
108                         if ( ldns_rr_get_type(rr) == LDNS_RR_TYPE_AAAA) {
109                                 ldns_rr_list_push_rr(addresses, ldns_rr_clone(rr));
110                         }
111                 }
112                 ldns_zone_deep_free(z);
113                 return addresses;
114         }
115 }
116
117
118 void
119 clear_root(void)
120 {
121         ldns_rr_list_deep_free(global_dns_root);
122 }