add ds_record
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@14318 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -73,6 +73,7 @@ static struct stot{
|
||||
DECL(srv),
|
||||
DECL(naptr),
|
||||
DECL(sshfp),
|
||||
DECL(ds),
|
||||
{NULL, 0}
|
||||
};
|
||||
|
||||
@@ -327,7 +328,6 @@ parse_record(const unsigned char *data, const unsigned char *end_data,
|
||||
}
|
||||
case rk_ns_t_sshfp : {
|
||||
size_t sshfp_len;
|
||||
unsigned type;
|
||||
|
||||
if (size < 2) {
|
||||
free(*rr);
|
||||
@@ -336,13 +336,6 @@ parse_record(const unsigned char *data, const unsigned char *end_data,
|
||||
|
||||
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);
|
||||
if ((*rr)->u.sshfp == NULL) {
|
||||
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);
|
||||
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:
|
||||
(*rr)->u.data = (unsigned char*)malloc(size);
|
||||
if(size != 0 && (*rr)->u.data == NULL) {
|
||||
|
@@ -80,6 +80,7 @@ typedef enum {
|
||||
rk_ns_t_sink = 40, /* Kitchen sink (experimentatl) */
|
||||
rk_ns_t_opt = 41, /* EDNS0 option (meta-RR) */
|
||||
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_tkey = 249, /* Transaction key */
|
||||
rk_ns_t_tsig = 250, /* Transaction signature. */
|
||||
@@ -218,6 +219,13 @@ struct sshfp_record {
|
||||
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{
|
||||
char *domain;
|
||||
@@ -236,6 +244,7 @@ struct resource_record{
|
||||
struct cert_record *cert;
|
||||
struct sig_record *sig;
|
||||
struct sshfp_record *sshfp;
|
||||
struct ds_record *ds;
|
||||
}u;
|
||||
struct resource_record *next;
|
||||
};
|
||||
|
Reference in New Issue
Block a user