resolve: if both A and AAAA are refused, do not resolve address when resolving service

Similarly, set NO_TXT flag if TXT is filtered.

Follow-up for 81ae2237c1.
Fixes https://github.com/systemd/systemd/pull/36353#issuecomment-2659558382.
This commit is contained in:
Yu Watanabe
2025-02-16 22:54:00 +09:00
parent 3c31cc3981
commit 9ec25fba5a
+11
View File
@@ -1484,5 +1484,16 @@ int validate_and_mangle_query_flags(
if (name && FLAGS_SET(ok, SD_RESOLVED_NO_SEARCH) && dns_name_dot_suffixed(name) > 0)
*flags |= SD_RESOLVED_NO_SEARCH;
/* If both A and AAAA are refused, set SD_RESOLVED_NO_ADDRESS flag if it is allowed. */
if (set_contains(manager->refuse_record_types, INT_TO_PTR(DNS_TYPE_A)) &&
set_contains(manager->refuse_record_types, INT_TO_PTR(DNS_TYPE_AAAA)) &&
FLAGS_SET(ok, SD_RESOLVED_NO_ADDRESS))
*flags |= SD_RESOLVED_NO_ADDRESS;
/* Similarly, if TXT is refused, set SD_RESOLVED_NO_TXT flag if it is allowed. */
if (set_contains(manager->refuse_record_types, INT_TO_PTR(DNS_TYPE_TXT)) &&
FLAGS_SET(ok, SD_RESOLVED_NO_TXT))
*flags |= SD_RESOLVED_NO_TXT;
return 0;
}