]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-dhcp-client: refuse to send RELEASE or friends gracefully when the daemon is stopp...
authorYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 21 Aug 2024 01:23:06 +0000 (10:23 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 21 Aug 2024 02:34:50 +0000 (11:34 +0900)
We can easily hit the assertions without checking the internal states of
the DHCP client before calling these functions. That's annoying.
Let's do more gracefully.

src/libsystemd-network/sd-dhcp-client.c

index 8b8d0611a2721e183df2c2dc6652dac50c8af145..94ad5bbea9561d7178043c3d222300c6d11e9040 100644 (file)
@@ -2138,14 +2138,8 @@ static int client_receive_message_raw(
 }
 
 int sd_dhcp_client_send_renew(sd_dhcp_client *client) {
-        assert_return(client, -EINVAL);
-        assert_return(sd_dhcp_client_is_running(client), -ESTALE);
-        assert_return(client->fd >= 0, -EINVAL);
-
-        if (client->state != DHCP_STATE_BOUND)
-                return 0;
-
-        assert(client->lease);
+        if (!sd_dhcp_client_is_running(client) || client->state != DHCP_STATE_BOUND)
+                return 0; /* do nothing */
 
         client->start_delay = 0;
         client->discover_attempt = 1;
@@ -2199,14 +2193,13 @@ int sd_dhcp_client_start(sd_dhcp_client *client) {
 }
 
 int sd_dhcp_client_send_release(sd_dhcp_client *client) {
-        assert_return(client, -EINVAL);
-        assert_return(sd_dhcp_client_is_running(client), -ESTALE);
-        assert_return(client->lease, -EUNATCH);
-
         _cleanup_free_ DHCPPacket *release = NULL;
         size_t optoffset, optlen;
         int r;
 
+        if (!sd_dhcp_client_is_running(client) || !client->lease)
+                return 0; /* do nothing */
+
         r = client_message_init(client, &release, DHCP_RELEASE, &optlen, &optoffset);
         if (r < 0)
                 return r;
@@ -2234,14 +2227,13 @@ int sd_dhcp_client_send_release(sd_dhcp_client *client) {
 }
 
 int sd_dhcp_client_send_decline(sd_dhcp_client *client) {
-        assert_return(client, -EINVAL);
-        assert_return(sd_dhcp_client_is_running(client), -ESTALE);
-        assert_return(client->lease, -EUNATCH);
-
         _cleanup_free_ DHCPPacket *release = NULL;
         size_t optoffset, optlen;
         int r;
 
+        if (!sd_dhcp_client_is_running(client) || !client->lease)
+                return 0; /* do nothing */
+
         r = client_message_init(client, &release, DHCP_DECLINE, &optlen, &optoffset);
         if (r < 0)
                 return r;