Commit cbf13a2a authored by Simon Kelley's avatar Simon Kelley

Class specifier in --dnskey, instead of hardwiring C_IN.

parent 5b3bf921
...@@ -1003,7 +1003,7 @@ void cache_reload(void) ...@@ -1003,7 +1003,7 @@ void cache_reload(void)
cache->addr.key.algo = key->algo; cache->addr.key.algo = key->algo;
cache->addr.key.flags = key->flags; cache->addr.key.flags = key->flags;
cache->addr.key.keytag = dnskey_keytag(key->algo, key->flags, (unsigned char *)key->key, key->keylen); cache->addr.key.keytag = dnskey_keytag(key->algo, key->flags, (unsigned char *)key->key, key->keylen);
cache->uid = C_IN; /* TODO - in option? */ cache->uid = key->class;
cache_hash(cache); cache_hash(cache);
} }
#endif #endif
......
...@@ -36,6 +36,7 @@ ...@@ -36,6 +36,7 @@
#define C_IN 1 /* the arpa internet */ #define C_IN 1 /* the arpa internet */
#define C_CHAOS 3 /* for chaos net (MIT) */ #define C_CHAOS 3 /* for chaos net (MIT) */
#define C_HESIOD 4 /* hesiod */
#define C_ANY 255 /* wildcard match */ #define C_ANY 255 /* wildcard match */
#define T_A 1 #define T_A 1
......
...@@ -297,7 +297,7 @@ struct cname { ...@@ -297,7 +297,7 @@ struct cname {
struct dnskey { struct dnskey {
char *name, *key; char *name, *key;
int keylen, algo, flags; int keylen, class, algo, flags;
struct dnskey *next; struct dnskey *next;
}; };
......
...@@ -3682,13 +3682,32 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma ...@@ -3682,13 +3682,32 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
{ {
struct dnskey *new = opt_malloc(sizeof(struct dnskey)); struct dnskey *new = opt_malloc(sizeof(struct dnskey));
char *key64, *algo; char *key64, *algo;
if (!(comma = split(arg)) || !(algo = split(comma)) || !(key64 = split(algo)) || new->class = C_IN;
!atoi_check16(comma, &new->flags) || !atoi_check16(algo, &new->algo) ||
!(new->name = canonicalise_opt(arg)))
ret_err(_("bad DNSKEY"));
if ((comma = split(arg)) && (algo = split(comma)))
{
int class = 0;
if (strcmp(comma, "IN") == 0)
class = C_IN;
else if (strcmp(comma, "CH") == 0)
class = C_CHAOS;
else if (strcmp(comma, "HS") == 0)
class = C_HESIOD;
if (class != 0)
{
new->class = class;
comma = algo;
algo = split(comma);
}
}
if (!comma || !algo || !(key64 = split(algo)) ||
!atoi_check16(comma, &new->flags) || !atoi_check16(algo, &new->algo) ||
!(new->name = canonicalise_opt(arg)))
ret_err(_("bad DNSKEY"));
/* Upper bound on length */ /* Upper bound on length */
new->key = opt_malloc((3*strlen(key64)/4)+1); new->key = opt_malloc((3*strlen(key64)/4)+1);
unhide_metas(key64); unhide_metas(key64);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment