Skip to content

Commit

Permalink
Add SOA records support.
Browse files Browse the repository at this point in the history
  • Loading branch information
vstakhov committed Aug 14, 2014
1 parent c4c09b1 commit 221f5b4
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 2 deletions.
9 changes: 9 additions & 0 deletions include/rdns.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ typedef void (*dns_callback_type) (struct rdns_reply *reply, void *arg);
enum rdns_request_type {
RDNS_REQUEST_A = 1,
RDNS_REQUEST_NS = 2,
RDNS_REQUEST_SOA = 6,
RDNS_REQUEST_PTR = 12,
RDNS_REQUEST_MX = 15,
RDNS_REQUEST_TXT = 16,
Expand Down Expand Up @@ -83,6 +84,14 @@ union rdns_reply_element_un {
uint16_t port;
char *target;
} srv;
struct {
char *mname;
char *admin;
uint32_t serial;
int32_t refresh;
int32_t retry;
int32_t expire;
} soa;
struct {
uint8_t usage;
uint8_t selector;
Expand Down
2 changes: 1 addition & 1 deletion src/dns_private.h
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,7 @@ enum dns_type {
DNS_T_A = RDNS_REQUEST_A,
DNS_T_NS = RDNS_REQUEST_NS,
DNS_T_CNAME = 5,
DNS_T_SOA = 6,
DNS_T_SOA = RDNS_REQUEST_SOA,
DNS_T_PTR = RDNS_REQUEST_PTR,
DNS_T_MX = RDNS_REQUEST_MX,
DNS_T_TXT = RDNS_REQUEST_TXT,
Expand Down
17 changes: 17 additions & 0 deletions src/parse.c
Original file line number Diff line number Diff line change
Expand Up @@ -303,6 +303,23 @@ rdns_parse_rr (struct rdns_resolver *resolver,
}
parsed = true;
break;
case DNS_T_SOA:
if (! rdns_parse_labels (resolver, in, &elt->content.soa.mname, &p,
rep, remain, true)) {
rdns_info ("invalid labels in NS record");
return -1;
}
if (! rdns_parse_labels (resolver, in, &elt->content.soa.admin, &p,
rep, remain, true)) {
rdns_info ("invalid labels in NS record");
return -1;
}
GET32 (elt->content.soa.serial);
GET32 (elt->content.soa.refresh);
GET32 (elt->content.soa.retry);
GET32 (elt->content.soa.expire);
parsed = true;
break;
case DNS_T_MX:
GET16 (elt->content.mx.priority);
if (! rdns_parse_labels (resolver, in, &elt->content.mx.name, &p,
Expand Down
4 changes: 4 additions & 0 deletions src/util.c
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,10 @@ rdns_reply_free (struct rdns_reply *rep)
case RDNS_REQUEST_TLSA:
free (entry->content.tlsa.data);
break;
case RDNS_REQUEST_SOA:
free (entry->content.soa.mname);
free (entry->content.soa.admin);
break;
}
free (entry);
}
Expand Down
14 changes: 13 additions & 1 deletion test/dns_regress.c
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,16 @@ rdns_regress_callback (struct rdns_reply *reply, void *arg)
inet_ntop (AF_INET6, &entry->content.aaa.addr, out, sizeof (out));
printf ("%s has AAAA record %s\n", (char *)arg, out);
}
else if (entry->type == RDNS_REQUEST_SOA) {
printf ("%s has SOA record %s %s %u %d %d %d\n",
(char *)arg,
entry->content.soa.mname,
entry->content.soa.admin,
entry->content.soa.serial,
entry->content.soa.refresh,
entry->content.soa.retry,
entry->content.soa.expire);
}
else if (entry->type == RDNS_REQUEST_TLSA) {
char *hex, *p;
unsigned i;
Expand Down Expand Up @@ -85,7 +95,7 @@ static void
rdns_test_a (struct rdns_resolver *resolver)
{
const char *names[] = {
"google.com",
//"google.com",
"github.com",
"freebsd.org",
"kernel.org",
Expand All @@ -99,6 +109,8 @@ rdns_test_a (struct rdns_resolver *resolver)
*cur, RDNS_REQUEST_AAAA);
rdns_make_request_full (resolver, rdns_regress_callback, *cur, 1.0, 2, 1,
*cur, RDNS_REQUEST_A);
rdns_make_request_full (resolver, rdns_regress_callback, *cur, 1.0, 2, 1,
*cur, RDNS_REQUEST_SOA);
remain_tests ++;
}
}
Expand Down

0 comments on commit 221f5b4

Please sign in to comment.