Bug#1092188: bookworm-pu: package systemd/252.33-1~deb12u2
Package: release.debian.org
Severity: normal
Tags: bookworm
User: release.debian.org@packages.debian.org
Usertags: pu
X-Debbugs-Cc: pkg-systemd-maintainers@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 <waldi@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 <lihl@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
Reply to: