From: Nick Porter Date: Fri, 11 Sep 2020 12:51:35 +0000 (+0100) Subject: Add counter to DHCP ippool schema X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d8634cb273eaefa74f6c75fe6cd92c04a7fd6e72;p=thirdparty%2Ffreeradius-server.git Add counter to DHCP ippool schema By updating a counter every time a REQUEST is responded to successfully we ensure that records are changed, thus all database engines return an affected row count of 1 for successful matches. This safeguards the new DHCP site config which uses the affected row count to determine between ACK and NAK responses. --- diff --git a/raddb/mods-config/sql/ippool-dhcp/mssql/queries.conf b/raddb/mods-config/sql/ippool-dhcp/mssql/queries.conf index 3d5a26fe9f7..bd7db3e98ee 100644 --- a/raddb/mods-config/sql/ippool-dhcp/mssql/queries.conf +++ b/raddb/mods-config/sql/ippool-dhcp/mssql/queries.conf @@ -201,7 +201,9 @@ update_free = "\ # update_update = "\ UPDATE ${ippool_table} \ - SET expiry_time = DATEADD(SECOND,${lease_duration},CURRENT_TIMESTAMP) \ + SET \ + expiry_time = DATEADD(SECOND,${lease_duration},CURRENT_TIMESTAMP), \ + counter = counter + 1 \ WHERE pool_name = '%{control:${pool_name}}' \ AND pool_key = '${pool_key}' \ AND framedipaddress = '%{%{DHCP-Requested-IP-Address}:-%{DHCP-Client-IP-Address}}'" diff --git a/raddb/mods-config/sql/ippool-dhcp/mssql/schema.sql b/raddb/mods-config/sql/ippool-dhcp/mssql/schema.sql index 628f2249181..dae4eff16fb 100644 --- a/raddb/mods-config/sql/ippool-dhcp/mssql/schema.sql +++ b/raddb/mods-config/sql/ippool-dhcp/mssql/schema.sql @@ -23,6 +23,7 @@ CREATE TABLE dhcpippool ( gateway varchar(15) NOT NULL default '', expiry_time DATETIME NOT NULL default CURRENT_TIMESTAMP, status_id int NOT NULL default 1, + counter int NOT NULL default 0, CONSTRAINT fk_status_id FOREIGN KEY (status_id) REFERENCES dhcpstatus (status_id), PRIMARY KEY (id) ) diff --git a/raddb/mods-config/sql/ippool-dhcp/mysql/queries.conf b/raddb/mods-config/sql/ippool-dhcp/mysql/queries.conf index 9309a3e1500..1a05397ba7c 100644 --- a/raddb/mods-config/sql/ippool-dhcp/mysql/queries.conf +++ b/raddb/mods-config/sql/ippool-dhcp/mysql/queries.conf @@ -161,7 +161,9 @@ update_free = "\ # update_update = "\ UPDATE ${ippool_table} \ - SET expiry_time = 'now'::timesheet(0) + '${lease_duration} second'::interval \ + SET \ + expiry_time = NOW() + INTERVAL ${lease_duration} SECOND, \ + counter = counter + 1 \ WHERE pool_name = '%{control:${pool_name}}' \ AND pool_key = '${pool_key}' \ AND framedipaddress = '%{%{DHCP-Requested-IP-Address}:-%{DHCP-Client-IP-Address}}'" diff --git a/raddb/mods-config/sql/ippool-dhcp/mysql/schema.sql b/raddb/mods-config/sql/ippool-dhcp/mysql/schema.sql index 6bfc48c3b12..743b219ea2f 100644 --- a/raddb/mods-config/sql/ippool-dhcp/mysql/schema.sql +++ b/raddb/mods-config/sql/ippool-dhcp/mysql/schema.sql @@ -2,13 +2,14 @@ # Table structure for table 'dhcpippool' # CREATE TABLE dhcpippool ( - id int(11) unsigned NOT NULL auto_increment, + id int unsigned NOT NULL auto_increment, pool_name varchar(30) NOT NULL, framedipaddress varchar(15) NOT NULL DEFAULT '', pool_key varchar(30) NOT NULL DEFAULT '', gateway varchar(15) NOT NULL DEFAULT '', expiry_time DATETIME NOT NULL DEFAULT NOW(), status ENUM('dynamic', 'static', 'declined', 'disabled') DEFAULT 'dynamic', + counter int unsigned NOT NULL DEFAULT 0, PRIMARY KEY (id), KEY dhcpippool_poolname_expire (pool_name, expiry_time), KEY framedipaddress (framedipaddress), diff --git a/raddb/mods-config/sql/ippool-dhcp/oracle/queries.conf b/raddb/mods-config/sql/ippool-dhcp/oracle/queries.conf index 61dac32f764..25cb7733141 100644 --- a/raddb/mods-config/sql/ippool-dhcp/oracle/queries.conf +++ b/raddb/mods-config/sql/ippool-dhcp/oracle/queries.conf @@ -120,7 +120,9 @@ pool_check = "\ update_begin = "commit" update_update = "\ UPDATE ${ippool_table} \ - SET expiry_time = current_timestamp + INTERVAL '${lease_duration}' second(1) \ + SET \ + expiry_time = current_timestamp + INTERVAL '${lease_duration}' second(1), \ + counter = counter + 1 \ WHERE pool_name = '%{control:${pool_name}}' \ AND pool_key = '${pool_key}' \ AND framedipaddress = '%{%{DHCP-Requested-IP-Address}:-%{DHCP-Client-IP-Address}}'" diff --git a/raddb/mods-config/sql/ippool-dhcp/oracle/schema.sql b/raddb/mods-config/sql/ippool-dhcp/oracle/schema.sql index af30a0dc95c..88dba699ed2 100644 --- a/raddb/mods-config/sql/ippool-dhcp/oracle/schema.sql +++ b/raddb/mods-config/sql/ippool-dhcp/oracle/schema.sql @@ -18,6 +18,7 @@ CREATE TABLE dhcpippool ( gateway VARCHAR(15) NOT NULL, expiry_time TIMESTAMP(0) NOT NULL, status_id INT DEFAULT 1, + counter INT DEFAULT 0, FOREIGN KEY (status_id) REFERENCES dhcpstatus(status_id) ); diff --git a/raddb/mods-config/sql/ippool-dhcp/postgresql/queries.conf b/raddb/mods-config/sql/ippool-dhcp/postgresql/queries.conf index ba02186f2f3..10acb3d62fc 100644 --- a/raddb/mods-config/sql/ippool-dhcp/postgresql/queries.conf +++ b/raddb/mods-config/sql/ippool-dhcp/postgresql/queries.conf @@ -181,7 +181,9 @@ update_free = "\ # update_update = "\ UPDATE ${ippool_table} \ - SET expiry_time = 'now'::timestamp(0) + '${lease_duration} second'::interval \ + SET \ + expiry_time = 'now'::timestamp(0) + '${lease_duration} second'::interval, \ + counter = counter + 1 \ WHERE pool_name = '%{control:${pool_name}}' \ AND pool_key = '${pool_key}' \ AND framedipaddress = '%{%{DHCP-Requested-IP-Address}:-%{DHCP-Client-IP-Address}}'" diff --git a/raddb/mods-config/sql/ippool-dhcp/postgresql/schema.sql b/raddb/mods-config/sql/ippool-dhcp/postgresql/schema.sql index 348341f9803..8b2bfb40787 100644 --- a/raddb/mods-config/sql/ippool-dhcp/postgresql/schema.sql +++ b/raddb/mods-config/sql/ippool-dhcp/postgresql/schema.sql @@ -14,7 +14,8 @@ CREATE TABLE dhcpippool ( pool_key VARCHAR(64) NOT NULL default '0', gateway VARCHAR(16) NOT NULL default '', expiry_time TIMESTAMP(0) without time zone NOT NULL default NOW(), - status dhcp_status DEFAULT 'dynamic' + status dhcp_status DEFAULT 'dynamic', + counter INT NOT NULL DEFAULT 0 ); CREATE INDEX dhcpippool_poolname_expire ON dhcpippool USING btree (pool_name, expiry_time); diff --git a/raddb/mods-config/sql/ippool-dhcp/sqlite/queries.conf b/raddb/mods-config/sql/ippool-dhcp/sqlite/queries.conf index 7d486ee92b6..23c1c6b9e6f 100644 --- a/raddb/mods-config/sql/ippool-dhcp/sqlite/queries.conf +++ b/raddb/mods-config/sql/ippool-dhcp/sqlite/queries.conf @@ -132,7 +132,9 @@ update_free = "\ # update_update = "\ UPDATE ${ippool_table} \ - SET expiry_time = datetime(strftime('%%s', 'now') + ${lease_duration}, 'unixepoch') \ + SET \ + expiry_time = datetime(strftime('%%s', 'now') + ${lease_duration}, 'unixepoch'), \ + counter = counter + 1 \ WHERE pool_name = '%{control:${pool_name}}' \ AND pool_key = '${pool_key}' \ AND framedipaddress = '%{%{DHCP-Requested-IP-Address}:-%{DHCP-Client-IP-Address}}'" diff --git a/raddb/mods-config/sql/ippool-dhcp/sqlite/schema.sql b/raddb/mods-config/sql/ippool-dhcp/sqlite/schema.sql index 85b5723d693..2efde522b87 100644 --- a/raddb/mods-config/sql/ippool-dhcp/sqlite/schema.sql +++ b/raddb/mods-config/sql/ippool-dhcp/sqlite/schema.sql @@ -16,6 +16,7 @@ CREATE TABLE dhcpippool ( gateway varchar(15) NOT NULL DEFAULT '', expiry_time DATETIME NOT NULL default (DATETIME('now')), status_id int NOT NULL DEFAULT 1, + counter int NOT NULL DEFAULT 0, FOREIGN KEY(status_id) REFERENCES dhcpstatus(status_id) );