]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network/dhcp6: set hostname even if UseAddress=no
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 15 Sep 2024 19:45:13 +0000 (04:45 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 15 Oct 2024 09:23:59 +0000 (18:23 +0900)
Follow-up for f963f8953daeab03b892616ce0c65f7572932187 and
1536b7b2d00819615bf8eba194de7ccd20c3689f.

src/network/networkd-dhcp6.c

index 3f773cbb9933d07a1b1cafd34367de7622ee2b32..39471d6628dd8ecf7aa51e42103157632f42bd69 100644 (file)
@@ -264,25 +264,35 @@ static int dhcp6_address_acquired(Link *link) {
                         return r;
         }
 
-        if (link->network->dhcp6_use_hostname) {
-                const char *dhcpname = NULL;
-                _cleanup_free_ char *hostname = NULL;
-
-                (void) sd_dhcp6_lease_get_fqdn(link->dhcp6_lease, &dhcpname);
-
-                if (dhcpname) {
-                        r = shorten_overlong(dhcpname, &hostname);
-                        if (r < 0)
-                                log_link_warning_errno(link, r, "Unable to shorten overlong DHCP hostname '%s', ignoring: %m", dhcpname);
-                        if (r == 1)
-                                log_link_notice(link, "Overlong DHCP hostname received, shortened from '%s' to '%s'", dhcpname, hostname);
-                }
-                if (hostname) {
-                        r = manager_set_hostname(link->manager, hostname);
-                        if (r < 0)
-                                log_link_error_errno(link, r, "Failed to set transient hostname to '%s': %m", hostname);
-                }
-        }
+        return 0;
+}
+
+static int dhcp6_request_hostname(Link *link) {
+        _cleanup_free_ char *hostname = NULL;
+        const char *dhcpname = NULL;
+        int r;
+
+        assert(link);
+        assert(link->network);
+
+        if (!link->network->dhcp6_use_hostname)
+                return 0;
+
+        r = sd_dhcp6_lease_get_fqdn(link->dhcp6_lease, &dhcpname);
+        if (r == -ENODATA)
+                return 0;
+        if (r < 0)
+                return r;
+
+        r = shorten_overlong(dhcpname, &hostname);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Unable to shorten overlong DHCP hostname '%s': %m", dhcpname);
+        if (r == 1)
+                log_link_notice(link, "Overlong DHCP hostname received, shortened from '%s' to '%s'", dhcpname, hostname);
+
+        r = manager_set_hostname(link->manager, hostname);
+        if (r < 0)
+                log_link_warning_errno(link, r, "Failed to set transient hostname to '%s', ignoring: %m", hostname);
 
         return 0;
 }
@@ -302,6 +312,10 @@ static int dhcp6_lease_ip_acquired(sd_dhcp6_client *client, Link *link) {
         lease_old = TAKE_PTR(link->dhcp6_lease);
         link->dhcp6_lease = sd_dhcp6_lease_ref(lease);
 
+        r = dhcp6_request_hostname(link);
+        if (r < 0)
+                return r;
+
         r = dhcp6_address_acquired(link);
         if (r < 0)
                 return r;