add ds_record

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@14318 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Love Hörnquist Åstrand
2004-10-16 12:17:47 +00:00
parent 9f52383628
commit 0641d8970d
2 changed files with 33 additions and 8 deletions

View File

@@ -73,6 +73,7 @@ static struct stot{
DECL(srv), DECL(srv),
DECL(naptr), DECL(naptr),
DECL(sshfp), DECL(sshfp),
DECL(ds),
{NULL, 0} {NULL, 0}
}; };
@@ -327,7 +328,6 @@ parse_record(const unsigned char *data, const unsigned char *end_data,
} }
case rk_ns_t_sshfp : { case rk_ns_t_sshfp : {
size_t sshfp_len; size_t sshfp_len;
unsigned type;
if (size < 2) { if (size < 2) {
free(*rr); free(*rr);
@@ -336,13 +336,6 @@ parse_record(const unsigned char *data, const unsigned char *end_data,
sshfp_len = size - 2; sshfp_len = size - 2;
type = p[1];
if (type != 1 && sshfp_len != 20) /* SHA-1 */ {
free(*rr);
return -1;
}
(*rr)->u.sshfp = malloc (sizeof(*(*rr)->u.sshfp) + sshfp_len - 1); (*rr)->u.sshfp = malloc (sizeof(*(*rr)->u.sshfp) + sshfp_len - 1);
if ((*rr)->u.sshfp == NULL) { if ((*rr)->u.sshfp == NULL) {
free(*rr); free(*rr);
@@ -355,6 +348,29 @@ parse_record(const unsigned char *data, const unsigned char *end_data,
memcpy ((*rr)->u.sshfp->sshfp_data, p + 2, sshfp_len); memcpy ((*rr)->u.sshfp->sshfp_data, p + 2, sshfp_len);
break; break;
} }
case rk_ns_t_ds: {
size_t digest_len;
if (size < 4) {
free(*rr);
return -1;
}
digest_len = size - 4;
(*rr)->u.ds = malloc (sizeof(*(*rr)->u.ds) + digest_len - 1);
if ((*rr)->u.ds == NULL) {
free(*rr);
return -1;
}
(*rr)->u.ds->key_tag = (p[0] << 8) | p[1];
(*rr)->u.ds->algorithm = p[2];
(*rr)->u.ds->digest_type = p[3];
(*rr)->u.ds->digest_len = digest_len;
memcpy ((*rr)->u.ds->digest_data, p + 4, digest_len);
break;
}
default: default:
(*rr)->u.data = (unsigned char*)malloc(size); (*rr)->u.data = (unsigned char*)malloc(size);
if(size != 0 && (*rr)->u.data == NULL) { if(size != 0 && (*rr)->u.data == NULL) {

View File

@@ -80,6 +80,7 @@ typedef enum {
rk_ns_t_sink = 40, /* Kitchen sink (experimentatl) */ rk_ns_t_sink = 40, /* Kitchen sink (experimentatl) */
rk_ns_t_opt = 41, /* EDNS0 option (meta-RR) */ rk_ns_t_opt = 41, /* EDNS0 option (meta-RR) */
rk_ns_t_apl = 42, /* Address prefix list (RFC 3123) */ rk_ns_t_apl = 42, /* Address prefix list (RFC 3123) */
rk_ns_t_ds = 43, /* Delegation Signer (RFC 3658) */
rk_ns_t_sshfp = 44, /* SSH fingerprint */ rk_ns_t_sshfp = 44, /* SSH fingerprint */
rk_ns_t_tkey = 249, /* Transaction key */ rk_ns_t_tkey = 249, /* Transaction key */
rk_ns_t_tsig = 250, /* Transaction signature. */ rk_ns_t_tsig = 250, /* Transaction signature. */
@@ -218,6 +219,13 @@ struct sshfp_record {
u_char sshfp_data[1]; u_char sshfp_data[1];
}; };
struct ds_record {
unsigned key_tag;
unsigned algorithm;
unsigned digest_type;
unsigned digest_len;
u_char digest_data[1];
};
struct resource_record{ struct resource_record{
char *domain; char *domain;
@@ -236,6 +244,7 @@ struct resource_record{
struct cert_record *cert; struct cert_record *cert;
struct sig_record *sig; struct sig_record *sig;
struct sshfp_record *sshfp; struct sshfp_record *sshfp;
struct ds_record *ds;
}u; }u;
struct resource_record *next; struct resource_record *next;
}; };