network:dhcp4_server_configure returns if not able to get timezone v248.3
authortramsay <treyramsay@gmail.com>
Mon, 5 Apr 2021 22:12:49 +0000 (17:12 -0500)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sat, 15 May 2021 16:33:34 +0000 (18:33 +0200)
When /etc/localtime is a symbolic link pointing to another symbolic
link, get_timezone will return -EINVAL instead of the timezone.
This issue can cause systemd-networkd DHCPServer to fail.

Instead of returning failure, log a warning indicating that that
the timezone will not be sent.

modified:   networkd-dhcp-server.c

(cherry picked from commit 7b5018ca9e6d3279887ec7113818f41d5b831c4d)

src/network/networkd-dhcp-server.c

index ad979fb2c4e7697a7f53e24e4aa1e11d5a2892d4..5cdf432c2784aab29834eedffe8fab3e2ec26245 100644 (file)
@@ -350,21 +350,23 @@ int dhcp4_server_configure(Link *link) {
 
         if (link->network->dhcp_server_emit_timezone) {
                 _cleanup_free_ char *buffer = NULL;
-                const char *tz;
+                const char *tz = NULL;
 
                 if (link->network->dhcp_server_timezone)
                         tz = link->network->dhcp_server_timezone;
                 else {
                         r = get_timezone(&buffer);
                         if (r < 0)
-                                return log_link_error_errno(link, r, "Failed to determine timezone: %m");
-
-                        tz = buffer;
+                                log_link_warning_errno(link, r, "Failed to determine timezone, not sending timezone: %m");
+                        else
+                                tz = buffer;
                 }
 
-                r = sd_dhcp_server_set_timezone(link->dhcp_server, tz);
-                if (r < 0)
-                        return log_link_error_errno(link, r, "Failed to set timezone for DHCP server: %m");
+                if (tz) {
+                        r = sd_dhcp_server_set_timezone(link->dhcp_server, tz);
+                        if (r < 0)
+                                return log_link_error_errno(link, r, "Failed to set timezone for DHCP server: %m");
+                }
         }
 
         ORDERED_HASHMAP_FOREACH(p, link->network->dhcp_server_send_options) {