summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2015-02-01 23:12:27 -0500
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2016-01-29 12:13:08 -0500
commit869b3b67e392f1ea6219570ccf6aa3bf224d0391 (patch)
tree19a59b9c5b28aab503385e2c303223fb72030309
parentf3367a64ca5b756f96cb9698df283569c9e944b6 (diff)
resolve-host: allow specifying type as TYPEnn
This mirrors the behaviour of host and makes the conversion to and from string symmetrical.
-rw-r--r--src/resolve/dns-type.c16
-rw-r--r--src/resolve/dns-type.h1
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);