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(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) {
|
||||||
|
@@ -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;
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user