summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/resolve/resolved-bus.c9
-rw-r--r--src/shared/dns-domain.c14
-rw-r--r--src/shared/dns-domain.h3
-rw-r--r--src/test/test-dns-domain.c44
4 files changed, 31 insertions, 39 deletions
diff --git a/src/resolve/resolved-bus.c b/src/resolve/resolved-bus.c
index 8885b83101..1fd8e78f92 100644
--- a/src/resolve/resolved-bus.c
+++ b/src/resolve/resolved-bus.c
@@ -1041,13 +1041,8 @@ static int bus_method_resolve_service(sd_bus_message *message, void *userdata, s
if (isempty(type))
type = NULL;
- else {
- r = dns_srv_type_verify(type);
- if (r < 0)
- return r;
- if (r == 0)
- return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid SRV service type '%s'", type);
- }
+ else if (!dns_srv_type_is_valid(type))
+ return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid SRV service type '%s'", type);
r = dns_name_is_valid(domain);
if (r < 0)
diff --git a/src/shared/dns-domain.c b/src/shared/dns-domain.c
index 31b5891435..5a9b091ac4 100644
--- a/src/shared/dns-domain.c
+++ b/src/shared/dns-domain.c
@@ -838,12 +838,12 @@ static bool srv_type_label_is_valid(const char *label, size_t n) {
return true;
}
-int dns_srv_type_verify(const char *name) {
+bool dns_srv_type_is_valid(const char *name) {
unsigned c = 0;
int r;
if (!name)
- return 0;
+ return false;
for (;;) {
char label[DNS_LABEL_MAX];
@@ -851,18 +851,16 @@ int dns_srv_type_verify(const char *name) {
/* This more or less implements RFC 6335, Section 5.1 */
r = dns_label_unescape(&name, label, sizeof(label));
- if (r == -EINVAL)
- return 0;
if (r < 0)
- return r;
+ return false;
if (r == 0)
break;
if (c >= 2)
- return 0;
+ return false;
if (!srv_type_label_is_valid(label, r))
- return 0;
+ return false;
c++;
}
@@ -901,7 +899,7 @@ int dns_service_join(const char *name, const char *type, const char *domain, cha
assert(domain);
assert(ret);
- if (!dns_srv_type_verify(type))
+ if (!dns_srv_type_is_valid(type))
return -EINVAL;
if (!name)
diff --git a/src/shared/dns-domain.h b/src/shared/dns-domain.h
index 84be17425b..2f557d618e 100644
--- a/src/shared/dns-domain.h
+++ b/src/shared/dns-domain.h
@@ -72,8 +72,7 @@ bool dns_name_is_single_label(const char *name);
int dns_name_to_wire_format(const char *domain, uint8_t *buffer, size_t len);
-int dns_srv_type_verify(const char *name);
-
+bool dns_srv_type_is_valid(const char *name);
bool dns_service_name_is_valid(const char *name);
int dns_service_join(const char *name, const char *type, const char *domain, char **ret);
diff --git a/src/test/test-dns-domain.c b/src/test/test-dns-domain.c
index cefe8698c8..df34b72ab6 100644
--- a/src/test/test-dns-domain.c
+++ b/src/test/test-dns-domain.c
@@ -327,27 +327,27 @@ static void test_dns_service_name_is_valid(void) {
assert_se(!dns_service_name_is_valid("this is an overly long string that is certainly longer than 63 characters"));
}
-static void test_dns_srv_type_verify(void) {
-
- assert_se(dns_srv_type_verify("_http._tcp") > 0);
- assert_se(dns_srv_type_verify("_foo-bar._tcp") > 0);
- assert_se(dns_srv_type_verify("_w._udp") > 0);
- assert_se(dns_srv_type_verify("_a800._tcp") > 0);
- assert_se(dns_srv_type_verify("_a-800._tcp") > 0);
-
- assert_se(dns_srv_type_verify(NULL) == 0);
- assert_se(dns_srv_type_verify("") == 0);
- assert_se(dns_srv_type_verify("x") == 0);
- assert_se(dns_srv_type_verify("_foo") == 0);
- assert_se(dns_srv_type_verify("_tcp") == 0);
- assert_se(dns_srv_type_verify("_") == 0);
- assert_se(dns_srv_type_verify("_foo.") == 0);
- assert_se(dns_srv_type_verify("_föo._tcp") == 0);
- assert_se(dns_srv_type_verify("_f\no._tcp") == 0);
- assert_se(dns_srv_type_verify("_800._tcp") == 0);
- assert_se(dns_srv_type_verify("_-800._tcp") == 0);
- assert_se(dns_srv_type_verify("_-foo._tcp") == 0);
- assert_se(dns_srv_type_verify("_piep._foo._udp") == 0);
+static void test_dns_srv_type_is_valid(void) {
+
+ assert_se(dns_srv_type_is_valid("_http._tcp"));
+ assert_se(dns_srv_type_is_valid("_foo-bar._tcp"));
+ assert_se(dns_srv_type_is_valid("_w._udp"));
+ assert_se(dns_srv_type_is_valid("_a800._tcp"));
+ assert_se(dns_srv_type_is_valid("_a-800._tcp"));
+
+ assert_se(!dns_srv_type_is_valid(NULL));
+ assert_se(!dns_srv_type_is_valid(""));
+ assert_se(!dns_srv_type_is_valid("x"));
+ assert_se(!dns_srv_type_is_valid("_foo"));
+ assert_se(!dns_srv_type_is_valid("_tcp"));
+ assert_se(!dns_srv_type_is_valid("_"));
+ assert_se(!dns_srv_type_is_valid("_foo."));
+ assert_se(!dns_srv_type_is_valid("_föo._tcp"));
+ assert_se(!dns_srv_type_is_valid("_f\no._tcp"));
+ assert_se(!dns_srv_type_is_valid("_800._tcp"));
+ assert_se(!dns_srv_type_is_valid("_-800._tcp"));
+ assert_se(!dns_srv_type_is_valid("_-foo._tcp"));
+ assert_se(!dns_srv_type_is_valid("_piep._foo._udp"));
}
static void test_dns_service_join_one(const char *a, const char *b, const char *c, int r, const char *d) {
@@ -443,7 +443,7 @@ int main(int argc, char *argv[]) {
test_dns_name_is_valid();
test_dns_name_to_wire_format();
test_dns_service_name_is_valid();
- test_dns_srv_type_verify();
+ test_dns_srv_type_is_valid();
test_dns_service_join();
test_dns_service_split();
test_dns_name_change_suffix();