summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRenato Botelho <garga@FreeBSD.org>2014-11-14 09:51:27 -0200
committerRenato Botelho <garga@FreeBSD.org>2014-11-14 09:51:27 -0200
commit4dbcf2fbcea9cfe2166c958d3872e3a7353e3c5c (patch)
treeaf62e6f4f6493a27c9f51b5a417e911a784532a3
parent9612943eaa3c6ef427ea4414f7c32dc2b326dd55 (diff)
downloadpfsense-4dbcf2fbcea9cfe2166c958d3872e3a7353e3c5c.zip
pfsense-4dbcf2fbcea9cfe2166c958d3872e3a7353e3c5c.tar.gz
Make sure dhcpleases use correct pid file for dnsmasq or unbound. Fixes #4008
-rw-r--r--etc/inc/system.inc34
-rw-r--r--usr/local/www/services_dnsmasq.php3
-rw-r--r--usr/local/www/services_unbound.php3
3 files changed, 28 insertions, 12 deletions
diff --git a/etc/inc/system.inc b/etc/inc/system.inc
index 1b4de5e..63d1d90 100644
--- a/etc/inc/system.inc
+++ b/etc/inc/system.inc
@@ -394,19 +394,29 @@ function system_dhcpleases_configure() {
mwexec("/bin/mkdir -p {$g['dhcpd_chroot_path']}/var/db");
if (!file_exists("{$g['dhcpd_chroot_path']}/var/db/dhcpd.leases"))
@touch("{$g['dhcpd_chroot_path']}/var/db/dhcpd.leases");
- if (isvalidpid("{$g['varrun_path']}/dhcpleases.pid"))
- sigkillbypid("{$g['varrun_path']}/dhcpleases.pid", "HUP");
- else {
- /* To ensure we do not start multiple instances of dhcpleases, perform some clean-up first. */
- if (is_process_running("dhcpleases"))
- mwexec('/bin/pkill dhcpleases');
- @unlink("{$g['varrun_path']}/dhcpleases.pid");
- if (isset($config['unbound']['enable']))
- $dns_pid = "unbound.pid";
- else
- $dns_pid = "dnsmasq.pid";
- mwexec("/usr/local/sbin/dhcpleases -l {$g['dhcpd_chroot_path']}/var/db/dhcpd.leases -d {$config['system']['domain']} -p {$g['varrun_path']}/{$dns_pid} -h {$g['varetc_path']}/hosts");
+
+ if (isset($config['unbound']['enable']))
+ $dns_pid = "unbound.pid";
+ else
+ $dns_pid = "dnsmasq.pid";
+
+ $pidfile = "{$g['varrun_path']}/dhcpleases.pid";
+ if (isvalidpid($pidfile)) {
+ /* Make sure dhcpleases is using correct unbound or dnsmasq */
+
+ $_gb = exec("/bin/pgrep -F {$pidfile} -f {$dns_pid}", $output, $retval);
+ if (intval($retval) == 0) {
+ sigkillbypid($pidfile, "HUP");
+ return;
+ } else
+ sigkillbypid($pidfile, "TERM");
}
+
+ /* To ensure we do not start multiple instances of dhcpleases, perform some clean-up first. */
+ if (is_process_running("dhcpleases"))
+ mwexec('/bin/pkill dhcpleases');
+ @unlink("{$g['varrun_path']}/dhcpleases.pid");
+ mwexec("/usr/local/sbin/dhcpleases -l {$g['dhcpd_chroot_path']}/var/db/dhcpd.leases -d {$config['system']['domain']} -p {$g['varrun_path']}/{$dns_pid} -h {$g['varetc_path']}/hosts");
} else {
sigkillbypid("{$g['varrun_path']}/dhcpleases.pid", "TERM");
@unlink("{$g['varrun_path']}/dhcpleases.pid");
diff --git a/usr/local/www/services_dnsmasq.php b/usr/local/www/services_dnsmasq.php
index 6d353da..75feda9 100644
--- a/usr/local/www/services_dnsmasq.php
+++ b/usr/local/www/services_dnsmasq.php
@@ -44,6 +44,7 @@ require("guiconfig.inc");
require_once("functions.inc");
require_once("filter.inc");
require_once("shaper.inc");
+require_once("system.inc");
$pconfig['enable'] = isset($config['dnsmasq']['enable']);
$pconfig['regdhcp'] = isset($config['dnsmasq']['regdhcp']);
@@ -119,6 +120,8 @@ if ($_POST) {
filter_configure();
/* Update resolv.conf in case the interface bindings exclude localhost. */
system_resolvconf_generate();
+ /* Start or restart dhcpleases when it's necessary */
+ system_dhcpleases_configure();
if ($retval == 0)
clear_subsystem_dirty('hosts');
diff --git a/usr/local/www/services_unbound.php b/usr/local/www/services_unbound.php
index 5677b8b..ba03d44 100644
--- a/usr/local/www/services_unbound.php
+++ b/usr/local/www/services_unbound.php
@@ -41,6 +41,7 @@
require_once("guiconfig.inc");
require_once("unbound.inc");
+require_once("system.inc");
if (!is_array($config['unbound'])) {
$config['unbound'] = array();
@@ -105,6 +106,8 @@ if ($_POST) {
}
/* Update resolv.conf in case the interface bindings exclude localhost. */
system_resolvconf_generate();
+ /* Start or restart dhcpleases when it's necessary */
+ system_dhcpleases_configure();
} else {
if (isset($_POST['enable']) && isset($config['dnsmasq']['enable'])) {
$input_errors[] = "The system dns-forwarder is still active. Disable it before enabling the DNS Resolver.";
OpenPOWER on IntegriCloud