Package: release.debian.org Severity: normal Tags: bookworm User: release.debian....@packages.debian.org Usertags: pu X-Debbugs-Cc: pkg-systemd-maintain...@lists.alioth.debian.org
I did not get any response from the systemd maintainers on the original bug report (#1081633) for this within four months. The Debian cloud images use systemd-networkd in combination with netplan. Some of our users got problems with the default of systemd-networkd of not using the provided domains for lookups by default. It was reported from at least one cloud vendor (Microsoft Azure) as a problem. But it is not configurable on the systemd side in this version. The other proposed solutions will require patching other packages with Debian Bookworm-specific changes. [ Impact ] None, the default does not change and it needs to be flipped in the config. [ Tests ] Upstream provides tests for this feature. I tested it in the real environment this change is destined for. Bastian -- ... bacteriological warfare ... hard to believe we were once foolish enough to play around with that. -- McCoy, "The Omega Glory", stardate unknown
diff --git a/debian/changelog b/debian/changelog index 6deaa306729c42c98d9c281530c45cc8918da535..f3da58877e3391f4692cb6fcf53d3b517fcb0791 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +systemd (252.33-1~deb12u1.1) UNRELEASED; urgency=medium + + * Non-maintainer upload. + * Backport PR#32194. (closes: #1081633) + + -- Bastian Blank <wa...@debian.org> Tue, 17 Dec 2024 15:15:42 +0000 + systemd (252.33-1~deb12u1) bookworm; urgency=medium * New upstream version 252.33 diff --git a/debian/patches/pr32194.patch b/debian/patches/pr32194.patch new file mode 100644 index 0000000000000000000000000000000000000000..85512c04a25ab676cf1f8ba678ef76ca839a43eb --- /dev/null +++ b/debian/patches/pr32194.patch @@ -0,0 +1,203 @@ +From: Henry Li <l...@microsoft.com> +Date: Tue Apr 9 17:40:42 2024 -0700 +Subject: Merge pull request #32194 from henryli001/lihl/add-defaultUseDomains-config + network: add mechanism to configure default UseDomains= setting + +diff --git a/man/networkd.conf.xml b/man/networkd.conf.xml +index 85b21ee7f9..f7a32c9798 100644 +--- a/man/networkd.conf.xml ++++ b/man/networkd.conf.xml +@@ -182,6 +182,17 @@ DUIDRawData=00:00:ab:11:f9:2a:c2:77:29:f9:5c:00</programlisting> + </example> + </listitem> + </varlistentry> ++ ++ <varlistentry> ++ <term><varname>UseDomains=</varname></term> ++ <listitem><para>Specifies the default value for per-network <varname>UseDomains=</varname>. ++ Takes a boolean. See for details in ++ <citerefentry><refentrytitle>systemd.network</refentrytitle><manvolnum>5</manvolnum></citerefentry>. ++ Defaults to <literal>no</literal>.</para> ++ ++ ++ </listitem> ++ </varlistentry> + </variablelist> + </refsect1> + +@@ -202,7 +213,16 @@ DUIDRawData=00:00:ab:11:f9:2a:c2:77:29:f9:5c:00</programlisting> + <varlistentry> + <term><varname>DUIDType=</varname></term> + <term><varname>DUIDRawData=</varname></term> +- <listitem><para>As in the [DHCPv4] section.</para></listitem> ++ <listitem><para>As in the [DHCPv4] section.</para> ++ ++ </listitem> ++ </varlistentry> ++ ++ <varlistentry> ++ <term><varname>UseDomains=</varname></term> ++ <listitem><para>As in the [DHCPv4] section.</para> ++ ++ </listitem> + </varlistentry> + </variablelist> + </refsect1> +diff --git a/man/systemd.network.xml b/man/systemd.network.xml +index 8434247042..92f6e14bac 100644 +--- a/man/systemd.network.xml ++++ b/man/systemd.network.xml +@@ -1988,7 +1988,9 @@ allow my_server_t localnet_peer_t:peer recv;</programlisting> + effect of the <option>Domains=</option> setting. If set to <option>route</option>, the domain name + received from the DHCP server will be used for routing DNS queries only, but not for searching, + similarly to the effect of the <option>Domains=</option> setting when the argument is prefixed with +- <literal>~</literal>. Defaults to false.</para> ++ <literal>~</literal>. When unspecified, the value specified in the same setting in ++ <citerefentry><refentrytitle>networkd.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>, ++ which defaults to <literal>no</literal>, will be used.</para> + + <para>It is recommended to enable this option only on trusted networks, as setting this + affects resolution of all hostnames, in particular of single-label names. It is generally +diff --git a/src/network/networkd-dhcp-common.c b/src/network/networkd-dhcp-common.c +index 77d5e3a2f2..35981faa78 100644 +--- a/src/network/networkd-dhcp-common.c ++++ b/src/network/networkd-dhcp-common.c +@@ -458,6 +458,8 @@ int config_parse_dhcp_use_domains( + return 0; + } + ++DEFINE_CONFIG_PARSE_ENUM(config_parse_default_dhcp_use_domains, dhcp_use_domains, DHCPUseDomains, "Failed to parse UseDomains=") ++ + int config_parse_dhcp_use_ntp( + const char* unit, + const char *filename, +diff --git a/src/network/networkd-dhcp-common.h b/src/network/networkd-dhcp-common.h +index c19bc10407..5a1d446a60 100644 +--- a/src/network/networkd-dhcp-common.h ++++ b/src/network/networkd-dhcp-common.h +@@ -92,6 +92,7 @@ CONFIG_PARSER_PROTOTYPE(config_parse_dhcp); + CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_or_ra_route_metric); + CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_use_dns); + CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_use_domains); ++CONFIG_PARSER_PROTOTYPE(config_parse_default_dhcp_use_domains); + CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_use_ntp); + CONFIG_PARSER_PROTOTYPE(config_parse_iaid); + CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_or_ra_route_table); +diff --git a/src/network/networkd-gperf.gperf b/src/network/networkd-gperf.gperf +index 8ed90f0e4b..2bdeec0b4c 100644 +--- a/src/network/networkd-gperf.gperf ++++ b/src/network/networkd-gperf.gperf +@@ -26,8 +26,10 @@ Network.SpeedMeterIntervalSec, config_parse_sec, + Network.ManageForeignRoutingPolicyRules, config_parse_bool, 0, offsetof(Manager, manage_foreign_rules) + Network.ManageForeignRoutes, config_parse_bool, 0, offsetof(Manager, manage_foreign_routes) + Network.RouteTable, config_parse_route_table_names, 0, 0 ++DHCPv4.UseDomains, config_parse_default_dhcp_use_domains, 0, offsetof(Manager, dhcp_use_domains) + DHCPv4.DUIDType, config_parse_duid_type, 0, offsetof(Manager, dhcp_duid) + DHCPv4.DUIDRawData, config_parse_duid_rawdata, 0, offsetof(Manager, dhcp_duid) ++DHCPv6.UseDomains, config_parse_default_dhcp_use_domains, 0, offsetof(Manager, dhcp6_use_domains) + DHCPv6.DUIDType, config_parse_duid_type, 0, offsetof(Manager, dhcp6_duid) + DHCPv6.DUIDRawData, config_parse_duid_rawdata, 0, offsetof(Manager, dhcp6_duid) + /* Deprecated */ +diff --git a/src/network/networkd-manager.h b/src/network/networkd-manager.h +index 2db92780a5..09c37b3f64 100644 +--- a/src/network/networkd-manager.h ++++ b/src/network/networkd-manager.h +@@ -56,6 +56,9 @@ struct Manager { + OrderedSet *address_pools; + Set *dhcp_pd_subnet_ids; + ++ DHCPUseDomains dhcp_use_domains; ++ DHCPUseDomains dhcp6_use_domains; ++ + DUID dhcp_duid; + DUID dhcp6_duid; + DUID duid_product_uuid; +diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c +index 799da2d080..83a8e3d893 100644 +--- a/src/network/networkd-network.c ++++ b/src/network/networkd-network.c +@@ -396,6 +396,7 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi + .dhcp_use_sip = true, + .dhcp_use_dns = true, + .dhcp_routes_to_dns = true, ++ .dhcp_use_domains = manager->dhcp_use_domains, + .dhcp_use_hostname = true, + .dhcp_use_routes = true, + .dhcp_use_gateway = -1, +@@ -410,6 +411,7 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi + .dhcp6_use_address = true, + .dhcp6_use_pd_prefix = true, + .dhcp6_use_dns = true, ++ .dhcp6_use_domains = manager->dhcp6_use_domains, + .dhcp6_use_hostname = true, + .dhcp6_use_ntp = true, + .dhcp6_use_rapid_commit = true, +diff --git a/src/network/networkd.conf b/src/network/networkd.conf +index 38dc9f1f79..03c319ae04 100644 +--- a/src/network/networkd.conf ++++ b/src/network/networkd.conf +@@ -22,7 +22,9 @@ + [DHCPv4] + #DUIDType=vendor + #DUIDRawData= ++#UseDomains=no + + [DHCPv6] + #DUIDType=vendor + #DUIDRawData= ++#UseDomains=no +diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py +index d84350b70a..c9c4fc6f47 100755 +--- a/test/test-network/systemd-networkd-tests.py ++++ b/test/test-network/systemd-networkd-tests.py +@@ -5070,6 +5070,50 @@ class NetworkdDHCPClientTests(unittest.TestCase, Utilities): + check(self, True, False) + check(self, False, True) + check(self, False, False) ++ ++ def test_dhcp_client_default_use_domains(self): ++ def check(self, ipv4, ipv6): ++ mkdir_p(networkd_conf_dropin_dir) ++ with open(os.path.join(networkd_conf_dropin_dir, 'default_use_domains.conf'), mode='w', encoding='utf-8') as f: ++ f.write('[DHCPv4]\nUseDomains=') ++ f.write('yes\n' if ipv4 else 'no\n') ++ f.write('[DHCPv6]\nUseDomains=') ++ f.write('yes\n' if ipv6 else 'no\n') ++ ++ restart_networkd() ++ self.wait_online('veth-peer:carrier') ++ start_dnsmasq('--dhcp-option=option:dns-server,192.168.5.1', ++ '--dhcp-option=option6:dns-server,[2600::1]', ++ '--dhcp-option=option:domain-search,example.com', ++ '--dhcp-option=option6:domain-search,example.com') ++ ++ self.wait_online('veth99:routable') ++ ++ # link becomes 'routable' when at least one protocol provide an valid address. Hence, we need to explicitly wait for both addresses. ++ self.wait_address('veth99', r'inet 192.168.5.[0-9]*/24 metric 1024 brd 192.168.5.255 scope global dynamic', ipv='-4') ++ self.wait_address('veth99', r'inet6 2600::[0-9a-f]*/128 scope global (dynamic noprefixroute|noprefixroute dynamic)', ipv='-6') ++ ++ for _ in range(20): ++ output = resolvectl('domain', 'veth99') ++ if ipv4 or ipv6: ++ if 'example.com' in output: ++ break ++ else: ++ if 'example.com' not in output: ++ break ++ time.sleep(0.5) ++ else: ++ print(output) ++ self.fail('unexpected domain setting in resolved...') ++ ++ stop_dnsmasq() ++ remove_networkd_conf_dropin('default_use_domains.conf') ++ ++ copy_network_unit('25-veth.netdev', '25-dhcp-server-veth-peer.network', '25-dhcp-client.network', copy_dropins=False) ++ check(self, True, True) ++ check(self, True, False) ++ check(self, False, True) ++ check(self, False, False) + + class NetworkdDHCPPDTests(unittest.TestCase, Utilities): + diff --git a/debian/patches/series b/debian/patches/series index 661f0c480a264cfdceb00182173bca921dfae870..b2bf168d16fe375690a9904e40eb3cd7df4445c6 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -18,3 +18,4 @@ debian/Move-sysusers.d-sysctl.d-binfmt.d-modules-load.d-back-to-.patch debian/systemctl-do-not-shutdown-immediately-on-scheduled-shutdo.patch debian/Downgrade-a-couple-of-warnings-to-debug.patch debian/Skip-flaky-test_resolved_domain_restricted_dns-in-network.patch +pr32194.patch