mirror of
https://gitlab.isc.org/isc-projects/dhcp
synced 2025-08-31 06:15:55 +00:00
[master] dhcpd -T now writes leases to temp file
Merges in rt22267.
This commit is contained in:
8
RELNOTES
8
RELNOTES
@@ -210,6 +210,14 @@ dhcp-users@lists.isc.org.
|
||||
sent and logged.
|
||||
[ISC-Bugs #2729]
|
||||
|
||||
- When given the -T command line argument, in addition to reading the
|
||||
current lease file, the server will write the leases to a temporary
|
||||
lease file. This can help detect issues in server configuration that
|
||||
only surface when leases are written to the file. The current lease
|
||||
file will not be modified and the temporary lease file is removed upon
|
||||
completion of the test.
|
||||
[ISC-Bugs #22267]
|
||||
|
||||
Changes since 4.3.0 (bug fixes)
|
||||
|
||||
- Tidy up several small tickets.
|
||||
|
@@ -3032,7 +3032,7 @@ void commit_leases_timeout (void *);
|
||||
int commit_leases (void);
|
||||
int commit_leases_timed (void);
|
||||
void db_startup (int);
|
||||
int new_lease_file (void);
|
||||
int new_lease_file (int test_mode);
|
||||
int group_writer (struct group_object *);
|
||||
int write_ia(const struct ia_xx *);
|
||||
|
||||
|
58
server/db.c
58
server/db.c
@@ -106,7 +106,7 @@ int write_lease (lease)
|
||||
/* If the lease file is corrupt, don't try to write any more leases
|
||||
until we've written a good lease file. */
|
||||
if (lease_file_is_corrupt)
|
||||
if (!new_lease_file ())
|
||||
if (!new_lease_file (0))
|
||||
return 0;
|
||||
|
||||
if (counting)
|
||||
@@ -305,7 +305,7 @@ int write_host (host)
|
||||
/* If the lease file is corrupt, don't try to write any more leases
|
||||
until we've written a good lease file. */
|
||||
if (lease_file_is_corrupt)
|
||||
if (!new_lease_file ())
|
||||
if (!new_lease_file (0))
|
||||
return 0;
|
||||
|
||||
if (!db_printable((unsigned char *)host->name))
|
||||
@@ -454,7 +454,7 @@ int write_group (group)
|
||||
/* If the lease file is corrupt, don't try to write any more leases
|
||||
until we've written a good lease file. */
|
||||
if (lease_file_is_corrupt)
|
||||
if (!new_lease_file ())
|
||||
if (!new_lease_file (0))
|
||||
return 0;
|
||||
|
||||
if (!db_printable((unsigned char *)group->name))
|
||||
@@ -530,7 +530,7 @@ write_ia(const struct ia_xx *ia) {
|
||||
* leases until we've written a good lease file.
|
||||
*/
|
||||
if (lease_file_is_corrupt) {
|
||||
if (!new_lease_file()) {
|
||||
if (!new_lease_file(0)) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -702,7 +702,7 @@ write_server_duid(void) {
|
||||
* leases until we've written a good lease file.
|
||||
*/
|
||||
if (lease_file_is_corrupt) {
|
||||
if (!new_lease_file()) {
|
||||
if (!new_lease_file(0)) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -748,7 +748,7 @@ int write_failover_state (dhcp_failover_state_t *state)
|
||||
const char *tval;
|
||||
|
||||
if (lease_file_is_corrupt)
|
||||
if (!new_lease_file ())
|
||||
if (!new_lease_file (0))
|
||||
return 0;
|
||||
|
||||
errno = 0;
|
||||
@@ -973,7 +973,7 @@ int write_billing_class (class)
|
||||
int errors = 0;
|
||||
|
||||
if (lease_file_is_corrupt)
|
||||
if (!new_lease_file ())
|
||||
if (!new_lease_file (0))
|
||||
return 0;
|
||||
|
||||
if (!class -> superclass) {
|
||||
@@ -1028,7 +1028,7 @@ int commit_leases ()
|
||||
if (count && cur_time - write_time > LEASE_REWRITE_PERIOD) {
|
||||
count = 0;
|
||||
write_time = cur_time;
|
||||
new_lease_file();
|
||||
new_lease_file(0);
|
||||
}
|
||||
return (1);
|
||||
}
|
||||
@@ -1048,9 +1048,9 @@ int commit_leases_timed()
|
||||
return (1);
|
||||
}
|
||||
|
||||
void db_startup (testp)
|
||||
int testp;
|
||||
void db_startup (int test_mode)
|
||||
{
|
||||
const char *current_db_path;
|
||||
isc_result_t status;
|
||||
|
||||
#if defined (TRACING)
|
||||
@@ -1077,22 +1077,26 @@ void db_startup (testp)
|
||||
append it, so we create one immediately (maybe this isn't
|
||||
the best solution... */
|
||||
if (trace_playback ()) {
|
||||
new_lease_file ();
|
||||
new_lease_file (0);
|
||||
}
|
||||
#endif
|
||||
if (!testp) {
|
||||
db_file = fopen (path_dhcpd_db, "a");
|
||||
if (!db_file)
|
||||
log_fatal ("Can't open %s for append.", path_dhcpd_db);
|
||||
expire_all_pools ();
|
||||
/* expire_all_pools will cause writes to the "current" lease file.
|
||||
* Therefore, in test mode we need to point db_file to a disposable
|
||||
* file to protect the original lease file. */
|
||||
current_db_path = (test_mode ? "/dev/null" : path_dhcpd_db);
|
||||
db_file = fopen (current_db_path, "a");
|
||||
if (!db_file) {
|
||||
log_fatal ("Can't open %s for append.", current_db_path);
|
||||
}
|
||||
|
||||
expire_all_pools ();
|
||||
#if defined (TRACING)
|
||||
if (trace_playback ())
|
||||
write_time = cur_time;
|
||||
else
|
||||
if (trace_playback ())
|
||||
write_time = cur_time;
|
||||
else
|
||||
#endif
|
||||
time(&write_time);
|
||||
new_lease_file ();
|
||||
}
|
||||
time(&write_time);
|
||||
new_lease_file (test_mode);
|
||||
|
||||
#if defined(REPORT_HASH_PERFORMANCE)
|
||||
log_info("Host HW hash: %s", host_hash_report(host_hw_addr_hash));
|
||||
@@ -1105,7 +1109,7 @@ void db_startup (testp)
|
||||
#endif
|
||||
}
|
||||
|
||||
int new_lease_file ()
|
||||
int new_lease_file (int test_mode)
|
||||
{
|
||||
char newfname [512];
|
||||
char backfname [512];
|
||||
@@ -1194,6 +1198,14 @@ int new_lease_file ()
|
||||
if (!write_leases ())
|
||||
goto fail;
|
||||
|
||||
if (test_mode) {
|
||||
log_debug("Lease file test successful,"
|
||||
" removing temp lease file: %s",
|
||||
newfname);
|
||||
(void)unlink (newfname);
|
||||
return (1);
|
||||
}
|
||||
|
||||
#if defined (TRACING)
|
||||
if (!trace_playback ()) {
|
||||
#endif
|
||||
|
@@ -269,8 +269,11 @@ automatically before installing it.
|
||||
.BI \-T
|
||||
Test the lease file. The server tests the lease file
|
||||
for correct syntax, but will not attempt to perform any network
|
||||
operations. This can be used to test a new lease file
|
||||
automatically before installing it.
|
||||
operations. In addition to reading the lease file it will also
|
||||
write the leases to a temporary lease file. The current lease
|
||||
file will not be modified and the temporary lease file will be
|
||||
removed upon completion of the test. This can be used to test a
|
||||
new lease file automatically before installing it.
|
||||
.TP
|
||||
.BI \-user \ user
|
||||
Setuid to user after completing privileged operations,
|
||||
|
Reference in New Issue
Block a user