]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
resolve: refuse ResolveService method if SRV is filtered
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 16 Feb 2025 13:54:44 +0000 (22:54 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 16 Feb 2025 13:54:56 +0000 (22:54 +0900)
Follow-up for 81ae2237c1792943a1ec712ae2e630bcc592175b.

src/resolve/resolved-bus.c
src/resolve/resolved-varlink.c

index 8415444463d95dd3efb57d30d48d61c79a5a83f1..d5782e4687da7ae671b3beb9c4559010c7ae3bea 100644 (file)
@@ -1333,6 +1333,10 @@ static int bus_method_resolve_service(sd_bus_message *message, void *userdata, s
         if (validate_and_mangle_query_flags(m, &flags, name, SD_RESOLVED_NO_TXT|SD_RESOLVED_NO_ADDRESS) < 0)
                 return sd_bus_error_set(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid flags parameter");
 
+        /* Refuse the method if SRV is filtered. */
+        if (set_contains(m->refuse_record_types, INT_TO_PTR(DNS_TYPE_SRV)))
+                return sd_bus_error_set(error, BUS_ERROR_DNS_REFUSED, "DNS query type refused.");
+
         r = dns_question_new_service(&question_utf8, name, type, domain, !(flags & SD_RESOLVED_NO_TXT), false);
         if (r < 0)
                 return r;
index c687dd694ff6a6a82e0c9028da7df4a1e9d2a958..61f9f8e6461f3e099714760ecd26f4b1987c4048 100644 (file)
@@ -1001,6 +1001,10 @@ static int vl_method_resolve_service(sd_varlink* link, sd_json_variant* paramete
         if (validate_and_mangle_query_flags(m, &p.flags, p.name, SD_RESOLVED_NO_TXT|SD_RESOLVED_NO_ADDRESS) < 0)
                 return sd_varlink_error_invalid_parameter(link, JSON_VARIANT_STRING_CONST("flags"));
 
+        /* Refuse the method if SRV is filtered. */
+        if (set_contains(m->refuse_record_types, INT_TO_PTR(DNS_TYPE_SRV)))
+                return sd_varlink_error(link, "io.systemd.Resolve.QueryRefused", NULL);
+
         r = dns_question_new_service(&question_utf8, p.name, p.type, p.domain, !(p.flags & SD_RESOLVED_NO_TXT), false);
         if (r < 0)
                 return r;