3 * Function to handle to the rootservers
4 * and to update and prime them
7 * See the file LICENSE for the license
12 #include <ldns/ldns.h>
15 /* a global list of the root-servers */
16 ldns_rr_list
*global_dns_root
= NULL
;
18 /* put a hardcoded list in the root and
19 * init the root rrlist structure */
25 global_dns_root
= ldns_rr_list_new();
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
);
70 * Read a hints file as root
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.
77 read_root_hints(const char *filename
)
83 ldns_rr_list
*addresses
= NULL
;
87 fp
= fopen(filename
, "r");
89 fprintf(stderr
, "Unable to open %s for reading: %s\n", filename
, strerror(errno
));
93 status
= ldns_zone_new_frm_fp_l(&z
, fp
, NULL
, 0, 0, &line_nr
);
95 if (status
!= LDNS_STATUS_OK
) {
96 fprintf(stderr
, "Error reading root hints file: %s\n", ldns_get_errorstr_by_id(status
));
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) &&
104 if ( ldns_rr_get_type(rr
) == LDNS_RR_TYPE_A
) {
105 ldns_rr_list_push_rr(addresses
, ldns_rr_clone(rr
));
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
));
112 ldns_zone_deep_free(z
);
121 ldns_rr_list_deep_free(global_dns_root
);