aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-dns.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2004-09-28 10:28:01 +0000
committerGuy Harris <guy@alum.mit.edu>2004-09-28 10:28:01 +0000
commit0591bac4d2320cd0570edd306b1bc869e8f08ea6 (patch)
treec1458fca8b9eea9824693452b9d4e8286f05a15a /epan/dissectors/packet-dns.c
parent9d71c8da5b28f94d9c9377724849af0acdd9d603 (diff)
From David Fort: ipseckey DNS RR support.
svn path=/trunk/; revision=12120
Diffstat (limited to 'epan/dissectors/packet-dns.c')
-rw-r--r--epan/dissectors/packet-dns.c75
1 files changed, 73 insertions, 2 deletions
diff --git a/epan/dissectors/packet-dns.c b/epan/dissectors/packet-dns.c
index 2c4a67a2bf..55d46f1fbb 100644
--- a/epan/dissectors/packet-dns.c
+++ b/epan/dissectors/packet-dns.c
@@ -141,6 +141,7 @@ static dissector_handle_t gssapi_handle;
#define T_RRSIG 46 /* future RFC 2535bis */
#define T_NSEC 47 /* future RFC 2535bis */
#define T_DNSKEY 48 /* future RFC 2535bis */
+#define T_IPSECKEY 49 /* still TBD draft-ietf-ipseckey-rr */
#define T_TKEY 249 /* Transaction Key (RFC 2930) */
#define T_TSIG 250 /* Transaction Signature (RFC 2845) */
#define T_WINS 65281 /* Microsoft's WINS RR */
@@ -339,7 +340,8 @@ dns_type_name (guint type)
NULL,
"RRSIG", /* future RFC 2535bis */
"NSEC", /* future RFC 2535bis */
- "DNSKEY" /* future RFC 2535bis */
+ "DNSKEY", /* future RFC 2535bis */
+ "IPSECKEY" /* draft-ietf-ipseckey-rr */
};
if (type < sizeof(type_names)/sizeof(type_names[0]))
@@ -438,7 +440,8 @@ dns_long_type_name (guint type)
NULL,
"RR signature", /* future RFC 2535bis */
"Next secured", /* future RFC 2535bis */
- "DNS public key" /* future RFC 2535bis */
+ "DNS public key", /* future RFC 2535bis */
+ "key to use with IPSEC" /* draft-ietf-ipseckey-rr */
};
static char unkbuf[7+1+2+1+4+1+1+10+1+1]; /* "Unknown RR type (%u)" */
@@ -1419,6 +1422,74 @@ dissect_dns_answer(tvbuff_t *tvb, int offset, int dns_data_offset,
}
}
break;
+ case T_IPSECKEY:
+ {
+ int rr_len = data_len;
+ guint8 gw_type, algo;
+ const guint8 *addr;
+ char gw[MAXDNAME];
+ int gw_name_len;
+ static const value_string gw_algo[] = {
+ { 1, "DSA" },
+ { 2, "RSA" },
+ { 0, NULL }
+ };
+
+
+ if( dns_tree != NULL ) {
+ if(rr_len < 3)
+ goto bad_rr;
+
+ proto_tree_add_text(rr_tree, tvb, cur_offset, 1, "Gateway precedence: %u",
+ tvb_get_guint8(tvb, cur_offset));
+ cur_offset += 1;
+ rr_len -= 1;
+
+ gw_type = tvb_get_guint8(tvb, cur_offset);
+ cur_offset += 1;
+ rr_len -= 1;
+
+ algo = tvb_get_guint8(tvb, cur_offset);
+ proto_tree_add_text(rr_tree, tvb, cur_offset, 1, "Algorithm: %s",
+ val_to_str(algo, gw_algo, "Unknown (0x%02X)"));
+ cur_offset += 1;
+ rr_len -= 1;
+ switch( gw_type ) {
+ case 0:
+ proto_tree_add_text(rr_tree, tvb, cur_offset, 0, "Gateway: no gateway");
+ break;
+ case 1:
+ addr = tvb_get_ptr(tvb, cur_offset, 4);
+ proto_tree_add_text(rr_tree, tvb, cur_offset, 4, "Gateway: %s",
+ ip_to_str(addr) );
+
+ cur_offset += 4;
+ rr_len -= 4;
+ break;
+ case 2:
+ addr = tvb_get_ptr(tvb, cur_offset, 16);
+ proto_tree_add_text(rr_tree, tvb, cur_offset, 16, "Gateway: %s",
+ ip6_to_str((const struct e_in6_addr *)addr));
+
+ cur_offset += 16;
+ rr_len -= 16;
+ break;
+ case 3:
+ gw_name_len = get_dns_name(tvb, cur_offset, dns_data_offset, gw, sizeof(gw));
+ proto_tree_add_text(rr_tree, tvb, cur_offset, gw_name_len, "Gateway: %s", gw);
+
+ cur_offset += gw_name_len;
+ rr_len -= gw_name_len;
+ break;
+ default:
+ proto_tree_add_text(rr_tree, tvb, cur_offset, 0, "Gateway: Unknow gateway type(%u)", gw_type);
+ break;
+ }
+ if (rr_len != 0)
+ proto_tree_add_text(rr_tree, tvb, cur_offset, rr_len, "Public key");
+ }
+ }
+ break;
case T_AAAA:
{