mirror of
https://github.com/pi-hole/dnsmasq.git
synced 2025-12-19 18:28:25 +00:00
import of dnsmasq-2.51.tar.gz
This commit is contained in:
61
src/lease.c
61
src/lease.c
@@ -42,14 +42,20 @@ void lease_init(time_t now)
|
||||
initial state of the database. If leasefile-ro is
|
||||
set without a script, we just do without any
|
||||
lease database. */
|
||||
if (!daemon->lease_change_command)
|
||||
#ifdef HAVE_SCRIPT
|
||||
if (daemon->lease_change_command)
|
||||
{
|
||||
file_dirty = dns_dirty = 0;
|
||||
return;
|
||||
strcpy(daemon->dhcp_buff, daemon->lease_change_command);
|
||||
strcat(daemon->dhcp_buff, " init");
|
||||
leasestream = popen(daemon->dhcp_buff, "r");
|
||||
}
|
||||
strcpy(daemon->dhcp_buff, daemon->lease_change_command);
|
||||
strcat(daemon->dhcp_buff, " init");
|
||||
leasestream = popen(daemon->dhcp_buff, "r");
|
||||
else
|
||||
#endif
|
||||
{
|
||||
file_dirty = dns_dirty = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -100,19 +106,14 @@ void lease_init(time_t now)
|
||||
lease_set_hwaddr(lease, (unsigned char *)daemon->dhcp_buff2, (unsigned char *)daemon->packet, hw_len, hw_type, clid_len);
|
||||
|
||||
if (strcmp(daemon->dhcp_buff, "*") != 0)
|
||||
{
|
||||
char *p;
|
||||
/* unprotect spaces */
|
||||
for (p = strchr(daemon->dhcp_buff, '*'); p; p = strchr(p, '*'))
|
||||
*p = ' ';
|
||||
lease_set_hostname(lease, daemon->dhcp_buff, 0);
|
||||
}
|
||||
lease_set_hostname(lease, daemon->dhcp_buff, 0);
|
||||
|
||||
/* set these correctly: the "old" events are generated later from
|
||||
the startup synthesised SIGHUP. */
|
||||
lease->new = lease->changed = 0;
|
||||
}
|
||||
|
||||
#ifdef HAVE_SCRIPT
|
||||
if (!daemon->lease_stream)
|
||||
{
|
||||
int rc = 0;
|
||||
@@ -133,6 +134,7 @@ void lease_init(time_t now)
|
||||
die(_("lease-init script returned exit code %s"), daemon->dhcp_buff, WEXITSTATUS(rc) + EC_INIT_OFFSET);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Some leases may have expired */
|
||||
file_dirty = 0;
|
||||
@@ -173,7 +175,6 @@ void lease_update_file(time_t now)
|
||||
struct dhcp_lease *lease;
|
||||
time_t next_event;
|
||||
int i, err = 0;
|
||||
char *p;
|
||||
|
||||
if (file_dirty != 0 && daemon->lease_stream)
|
||||
{
|
||||
@@ -199,15 +200,8 @@ void lease_update_file(time_t now)
|
||||
}
|
||||
|
||||
ourprintf(&err, " %s ", inet_ntoa(lease->addr));
|
||||
|
||||
/* substitute * for space: "*" is an illegal name, as is " " */
|
||||
if (lease->hostname)
|
||||
for (p = lease->hostname; *p; p++)
|
||||
ourprintf(&err, "%c", *p == ' ' ? '*' : *p);
|
||||
else
|
||||
ourprintf(&err, "*");
|
||||
ourprintf(&err, " ");
|
||||
|
||||
ourprintf(&err, "%s ", lease->hostname ? lease->hostname : "*");
|
||||
|
||||
if (lease->clid && lease->clid_len != 0)
|
||||
{
|
||||
for (i = 0; i < lease->clid_len - 1; i++)
|
||||
@@ -550,7 +544,7 @@ int do_script_run(time_t now)
|
||||
/* If the lease still has an old_hostname, do the "old" action on that first */
|
||||
if (lease->old_hostname)
|
||||
{
|
||||
#ifndef NO_FORK
|
||||
#ifdef HAVE_SCRIPT
|
||||
queue_script(ACTION_OLD_HOSTNAME, lease, lease->old_hostname, now);
|
||||
#endif
|
||||
free(lease->old_hostname);
|
||||
@@ -560,8 +554,11 @@ int do_script_run(time_t now)
|
||||
else
|
||||
{
|
||||
kill_name(lease);
|
||||
#ifndef NO_FORK
|
||||
#ifdef HAVE_SCRIPT
|
||||
queue_script(ACTION_DEL, lease, lease->old_hostname, now);
|
||||
#endif
|
||||
#ifdef HAVE_DBUS
|
||||
emit_dbus_signal(ACTION_DEL, lease, lease->old_hostname);
|
||||
#endif
|
||||
old_leases = lease->next;
|
||||
|
||||
@@ -569,6 +566,7 @@ int do_script_run(time_t now)
|
||||
free(lease->clid);
|
||||
free(lease->vendorclass);
|
||||
free(lease->userclass);
|
||||
free(lease->supplied_hostname);
|
||||
free(lease);
|
||||
|
||||
return 1;
|
||||
@@ -579,7 +577,7 @@ int do_script_run(time_t now)
|
||||
for (lease = leases; lease; lease = lease->next)
|
||||
if (lease->old_hostname)
|
||||
{
|
||||
#ifndef NO_FORK
|
||||
#ifdef HAVE_SCRIPT
|
||||
queue_script(ACTION_OLD_HOSTNAME, lease, lease->old_hostname, now);
|
||||
#endif
|
||||
free(lease->old_hostname);
|
||||
@@ -591,9 +589,13 @@ int do_script_run(time_t now)
|
||||
if (lease->new || lease->changed ||
|
||||
(lease->aux_changed && (daemon->options & OPT_LEASE_RO)))
|
||||
{
|
||||
#ifndef NO_FORK
|
||||
#ifdef HAVE_SCRIPT
|
||||
queue_script(lease->new ? ACTION_ADD : ACTION_OLD, lease,
|
||||
lease->fqdn ? lease->fqdn : lease->hostname, now);
|
||||
#endif
|
||||
#ifdef HAVE_DBUS
|
||||
emit_dbus_signal(lease->new ? ACTION_ADD : ACTION_OLD, lease,
|
||||
lease->fqdn ? lease->fqdn : lease->hostname);
|
||||
#endif
|
||||
lease->new = lease->changed = lease->aux_changed = 0;
|
||||
|
||||
@@ -603,7 +605,10 @@ int do_script_run(time_t now)
|
||||
|
||||
free(lease->userclass);
|
||||
lease->userclass = NULL;
|
||||
|
||||
|
||||
free(lease->supplied_hostname);
|
||||
lease->supplied_hostname = NULL;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user