summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2022-05-23 10:21:54 +0200
committerThomas Haller <thaller@redhat.com>2022-05-31 18:32:35 +0200
commit825bf4943055101de9531cd0b8cdb160d874721d (patch)
treee3b8f2f05964029f3d2f382878033f65880fdf0c
parent31c52545edc2c5759bcc535299e12db934bb11dc (diff)
downloadNetworkManager-825bf4943055101de9531cd0b8cdb160d874721d.tar.gz
n-dhcp4: return error when calling accept/decline/select in unexpected state
The caller is supposed to call accept/decline/select with the lease that was just announced. Calling it in the wrong state or with the wrong lease is a user error. Return an error when called in the wrong state, so that the user notices they did something wrong.
-rw-r--r--src/n-dhcp4/src/n-dhcp4-c-lease.c9
-rw-r--r--src/n-dhcp4/src/n-dhcp4-c-probe.c24
2 files changed, 12 insertions, 21 deletions
diff --git a/src/n-dhcp4/src/n-dhcp4-c-lease.c b/src/n-dhcp4/src/n-dhcp4-c-lease.c
index eaa9627652..a30b455356 100644
--- a/src/n-dhcp4/src/n-dhcp4-c-lease.c
+++ b/src/n-dhcp4/src/n-dhcp4-c-lease.c
@@ -351,14 +351,13 @@ _c_public_ int n_dhcp4_client_lease_query(NDhcp4ClientLease *lease, uint8_t opti
* selected none of the others can be.
*
* Return: 0 on success, or a negative error code on failure.
+ * Returns -ENOTRECOVERABLE when called in an unexpected state.
*/
_c_public_ int n_dhcp4_client_lease_select(NDhcp4ClientLease *lease) {
NDhcp4ClientLease *l, *t_l;
NDhcp4ClientProbe *probe;
int r;
- /* XXX error handling, this must be an OFFER */
-
if (!lease->probe)
return -ENOTRECOVERABLE;
if (lease->probe->current_lease)
@@ -390,12 +389,11 @@ _c_public_ int n_dhcp4_client_lease_select(NDhcp4ClientLease *lease) {
* can be accepted.
*
* Return: 0 on success, or a negative error code on failure.
+ * Returns -ENOTRECOVERABLE when called in an unexpected state.
*/
_c_public_ int n_dhcp4_client_lease_accept(NDhcp4ClientLease *lease) {
int r;
- /* XXX error handling, this must be an ACK */
-
if (!lease->probe)
return -ENOTRECOVERABLE;
if (lease->probe->current_lease != lease)
@@ -421,12 +419,11 @@ _c_public_ int n_dhcp4_client_lease_accept(NDhcp4ClientLease *lease) {
* decline.
*
* Return: 0 on success, or a negative error code on failure.
+ * Returns -ENOTRECOVERABLE when called in an unexpected state.
*/
_c_public_ int n_dhcp4_client_lease_decline(NDhcp4ClientLease *lease, const char *error) {
int r;
- /* XXX: error handling, this must be an ACK */
-
if (!lease->probe)
return -ENOTRECOVERABLE;
if (lease->probe->current_lease != lease)
diff --git a/src/n-dhcp4/src/n-dhcp4-c-probe.c b/src/n-dhcp4/src/n-dhcp4-c-probe.c
index 283c1693cf..f5d93b394a 100644
--- a/src/n-dhcp4/src/n-dhcp4-c-probe.c
+++ b/src/n-dhcp4/src/n-dhcp4-c-probe.c
@@ -1046,7 +1046,7 @@ int n_dhcp4_client_probe_transition_select(NDhcp4ClientProbe *probe, NDhcp4Incom
probe->state = N_DHCP4_CLIENT_PROBE_STATE_REQUESTING;
- break;
+ return 0;
case N_DHCP4_CLIENT_PROBE_STATE_INIT:
case N_DHCP4_CLIENT_PROBE_STATE_INIT_REBOOT:
case N_DHCP4_CLIENT_PROBE_STATE_REBOOTING:
@@ -1057,11 +1057,9 @@ int n_dhcp4_client_probe_transition_select(NDhcp4ClientProbe *probe, NDhcp4Incom
case N_DHCP4_CLIENT_PROBE_STATE_REBINDING:
case N_DHCP4_CLIENT_PROBE_STATE_EXPIRED:
default:
- /* ignore */
- break;
+ /* user called in invalid state. Return error. */
+ return -ENOTRECOVERABLE;
}
-
- return 0;
}
/**
@@ -1088,7 +1086,7 @@ int n_dhcp4_client_probe_transition_accept(NDhcp4ClientProbe *probe, NDhcp4Incom
n_dhcp4_client_arm_timer(probe->client);
- break;
+ return 0;
case N_DHCP4_CLIENT_PROBE_STATE_INIT:
case N_DHCP4_CLIENT_PROBE_STATE_INIT_REBOOT:
@@ -1100,11 +1098,9 @@ int n_dhcp4_client_probe_transition_accept(NDhcp4ClientProbe *probe, NDhcp4Incom
case N_DHCP4_CLIENT_PROBE_STATE_REBINDING:
case N_DHCP4_CLIENT_PROBE_STATE_EXPIRED:
default:
- /* ignore */
- break;
+ /* user called in invalid state. Return error. */
+ return -ENOTRECOVERABLE;
}
-
- return 0;
}
/**
@@ -1128,7 +1124,7 @@ int n_dhcp4_client_probe_transition_decline(NDhcp4ClientProbe *probe, NDhcp4Inco
/* XXX: what state to transition to? */
- break;
+ return 0;
case N_DHCP4_CLIENT_PROBE_STATE_INIT:
case N_DHCP4_CLIENT_PROBE_STATE_INIT_REBOOT:
@@ -1140,11 +1136,9 @@ int n_dhcp4_client_probe_transition_decline(NDhcp4ClientProbe *probe, NDhcp4Inco
case N_DHCP4_CLIENT_PROBE_STATE_REBINDING:
case N_DHCP4_CLIENT_PROBE_STATE_EXPIRED:
default:
- /* ignore */
- break;
+ /* user called in invalid state. Return error. */
+ return -ENOTRECOVERABLE;
}
-
- return 0;
}
/**