Don't overwrite a possibly valid leasefile if we have no valid lease.
This commit is contained in:
parent
1b8dc7f05e
commit
44511e6789
@ -33,7 +33,7 @@ void open_leasefile(void)
|
|||||||
{
|
{
|
||||||
char leasefile[PATH_MAX];
|
char leasefile[PATH_MAX];
|
||||||
get_leasefile_path(leasefile, sizeof leasefile, client_config.interface);
|
get_leasefile_path(leasefile, sizeof leasefile, client_config.interface);
|
||||||
leasefilefd = open(leasefile, O_WRONLY|O_TRUNC|O_CREAT|O_CLOEXEC, 0644);
|
leasefilefd = open(leasefile, O_WRONLY|O_CREAT|O_CLOEXEC, 0644);
|
||||||
if (leasefilefd < 0)
|
if (leasefilefd < 0)
|
||||||
suicide("%s: (%s) Failed to create lease file '%s': %s",
|
suicide("%s: (%s) Failed to create lease file '%s': %s",
|
||||||
client_config.interface, __func__, leasefile, strerror(errno));
|
client_config.interface, __func__, leasefile, strerror(errno));
|
||||||
@ -59,6 +59,10 @@ static void do_write_leasefile(struct in_addr ipnum)
|
|||||||
log_line("%s: (%s) memccpy failed", client_config.interface, __func__);
|
log_line("%s: (%s) memccpy failed", client_config.interface, __func__);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
size_t outlen = strlen(out);
|
||||||
|
// Make sure that we're not overwriting the leasefile with an invalid
|
||||||
|
// IP address. This is a very minimal check.
|
||||||
|
if (outlen < 7) return;
|
||||||
if (safe_ftruncate(leasefilefd, 0)) {
|
if (safe_ftruncate(leasefilefd, 0)) {
|
||||||
log_line("%s: (%s) Failed to truncate lease file: %s",
|
log_line("%s: (%s) Failed to truncate lease file: %s",
|
||||||
client_config.interface, __func__, strerror(errno));
|
client_config.interface, __func__, strerror(errno));
|
||||||
@ -69,7 +73,6 @@ static void do_write_leasefile(struct in_addr ipnum)
|
|||||||
client_config.interface, __func__, strerror(errno));
|
client_config.interface, __func__, strerror(errno));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
size_t outlen = strlen(out);
|
|
||||||
ssize_t ret = safe_write(leasefilefd, out, outlen);
|
ssize_t ret = safe_write(leasefilefd, out, outlen);
|
||||||
if (ret < 0 || (size_t)ret != outlen)
|
if (ret < 0 || (size_t)ret != outlen)
|
||||||
log_line("%s: (%s) Failed to write ip to lease file.",
|
log_line("%s: (%s) Failed to write ip to lease file.",
|
||||||
|
Loading…
Reference in New Issue
Block a user