From dce391e78f5d8d5f4feb3eb6a15436de12dacf46 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 27 Aug 2015 12:53:43 +0200 Subject: networkd: properly reset transient hostname when we lose a DHCP lease Previously we were setting the transient hostname again, rather than resetting it. --- src/network/networkd-dhcp4.c | 24 +++++++++++------------- src/network/networkd-link.c | 3 +-- 2 files changed, 12 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c index 4e2936f637..a075015c3c 100644 --- a/src/network/networkd-dhcp4.c +++ b/src/network/networkd-dhcp4.c @@ -270,18 +270,16 @@ static int dhcp_lease_lost(Link *link) { if (link->network->dhcp_hostname) { const char *hostname = NULL; - if (!link->network->hostname) - r = sd_dhcp_lease_get_hostname(link->dhcp_lease, &hostname); - else + if (link->network->hostname) hostname = link->network->hostname; + else + (void) sd_dhcp_lease_get_hostname(link->dhcp_lease, &hostname); - if (r >= 0 || hostname) { - r = link_set_hostname(link, hostname); + if (hostname) { + /* If a hostname was set due to the lease, then unset it now. */ + r = link_set_hostname(link, NULL); if (r < 0) - log_link_error_errno(link, r, - "Failed to set transient hostname to '%s': %m", - hostname); - + log_link_warning_errno(link, r, "Failed to reset transient hostname: %m"); } } @@ -470,12 +468,12 @@ static int dhcp_lease_acquired(sd_dhcp_client *client, Link *link) { if (link->network->dhcp_hostname) { const char *hostname = NULL; - if (!link->network->hostname) - r = sd_dhcp_lease_get_hostname(lease, &hostname); - else + if (link->network->hostname) hostname = link->network->hostname; + else + (void) sd_dhcp_lease_get_hostname(lease, &hostname); - if (r >= 0 || hostname) { + if (hostname) { r = link_set_hostname(link, hostname); if (r < 0) log_link_error_errno(link, r, "Failed to set transient hostname to '%s': %m", hostname); diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 371136a11e..5af82059d8 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -801,9 +801,8 @@ int link_set_hostname(Link *link, const char *hostname) { assert(link); assert(link->manager); - assert(hostname); - log_link_debug(link, "Setting transient hostname: '%s'", hostname); + log_link_debug(link, "Setting transient hostname: '%s'", strna(hostname)); if (!link->manager->bus) { /* TODO: replace by assert when we can rely on kdbus */ -- cgit v1.2.3-54-g00ecf