From: Evan Hunt Date: Fri, 18 Jan 2008 02:05:09 +0000 (+0000) Subject: Allow lease "ends" vaule to be updated by OMAPI. [rt17033] X-Git-Tag: v4_1_0a1~19 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=022fe95e5e7725efdc15af0820bca46cc78c4383;p=thirdparty%2Fdhcp.git Allow lease "ends" vaule to be updated by OMAPI. [rt17033] --- diff --git a/RELNOTES b/RELNOTES index 16cbc510b..3133d4b6f 100644 --- a/RELNOTES +++ b/RELNOTES @@ -55,6 +55,10 @@ suggested fixes to . Changes since 4.0.0 +- It's now possible to update the "ends" field of a lease with OMAPI. + This is useful if you want not only to release a lease, but also make + it available for reuse right away. Hat tip to Christof Chen. + - Fixed "--version" flag in dhcrelay - The warning logged when an address range doesn't fit in the subnets diff --git a/server/omapi.c b/server/omapi.c index 77ade035a..b459571fd 100644 --- a/server/omapi.c +++ b/server/omapi.c @@ -259,7 +259,20 @@ isc_result_t dhcp_lease_set_value (omapi_object_t *h, } else if (!omapi_ds_strcmp (name, "starts")) { return ISC_R_NOPERM; } else if (!omapi_ds_strcmp (name, "ends")) { - return ISC_R_NOPERM; + unsigned long lease_end, old_lease_end; + status = omapi_get_int_value (&lease_end, value); + if (status != ISC_R_SUCCESS) + return status; + old_lease_end = lease->ends; + lease->ends = lease_end; + if (supersede_lease (lease, 0, 1, 1, 1)) { + log_info ("lease %s end changed from %lu to %lu", + piaddr(lease->ip_addr), old_lease_end, lease_end); + return ISC_R_SUCCESS; + } + log_info ("lease %s end change from %lu to %lu failed", + piaddr(lease->ip_addr), old_lease_end, lease_end); + return ISC_R_IOERROR; } else if (!omapi_ds_strcmp(name, "flags")) { u_int8_t oldflags;