diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2015-02-01 23:12:27 -0500 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2016-01-29 12:13:08 -0500 |
commit | 869b3b67e392f1ea6219570ccf6aa3bf224d0391 (patch) | |
tree | 19a59b9c5b28aab503385e2c303223fb72030309 /src/resolve | |
parent | f3367a64ca5b756f96cb9698df283569c9e944b6 (diff) |
resolve-host: allow specifying type as TYPEnn
This mirrors the behaviour of host and makes the conversion to and from
string symmetrical.
Diffstat (limited to 'src/resolve')
-rw-r--r-- | src/resolve/dns-type.c | 16 | ||||
-rw-r--r-- | src/resolve/dns-type.h | 1 |
2 files changed, 14 insertions, 3 deletions
diff --git a/src/resolve/dns-type.c b/src/resolve/dns-type.c index 46ab694496..fc2f1826fd 100644 --- a/src/resolve/dns-type.c +++ b/src/resolve/dns-type.c @@ -22,6 +22,7 @@ #include <sys/socket.h> #include "dns-type.h" +#include "parse-util.h" #include "string-util.h" typedef const struct { @@ -41,10 +42,19 @@ int dns_type_from_string(const char *s) { assert(s); sc = lookup_dns_type(s, strlen(s)); - if (!sc) - return _DNS_TYPE_INVALID; + if (sc) + return sc->id; - return sc->id; + s = startswith_no_case(s, "TYPE"); + if (s) { + unsigned x; + + if (safe_atou(s, &x) >= 0 && + x <= UINT16_MAX) + return (int) x; + } + + return _DNS_TYPE_INVALID; } bool dns_type_is_pseudo(uint16_t type) { diff --git a/src/resolve/dns-type.h b/src/resolve/dns-type.h index 1d9a59dfc1..d025544bab 100644 --- a/src/resolve/dns-type.h +++ b/src/resolve/dns-type.h @@ -139,6 +139,7 @@ int dns_type_to_af(uint16_t t); bool dns_class_is_pseudo(uint16_t class); bool dns_class_is_valid_rr(uint16_t class); +/* TYPE?? follows http://tools.ietf.org/html/rfc3597#section-5 */ const char *dns_type_to_string(int type); int dns_type_from_string(const char *s); |