summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am1
-rw-r--r--debian/control8
-rw-r--r--debian/copyright3
-rw-r--r--debian/vyatta-cfg-system.postinst.in2
-rw-r--r--scripts/dns-forwarding/vyatta-dns-forwarding.pl289
-rwxr-xr-xscripts/rl-system.init2
-rwxr-xr-xscripts/system/vyatta_update_resolv.pl29
-rw-r--r--sysconf/vyatta-sysctl.conf3
-rw-r--r--templates/interfaces/bridge/node.tag/address/node.def3
-rw-r--r--templates/interfaces/tunnel/node.tag/address/node.def3
-rw-r--r--templates/service/dns/forwarding/cache-size/node.def4
-rw-r--r--templates/service/dns/forwarding/dhcp/node.def9
-rw-r--r--templates/service/dns/forwarding/ignore-interface/node.def20
-rw-r--r--templates/service/dns/forwarding/name-server/node.def3
-rw-r--r--templates/service/dns/forwarding/node.def8
-rw-r--r--templates/service/dns/forwarding/system/node.def2
-rw-r--r--templates/service/dns/node.def1
-rw-r--r--templates/system/name-server/node.def30
-rw-r--r--templates/system/static-host-mapping/host-name/node.def17
19 files changed, 403 insertions, 34 deletions
diff --git a/Makefile.am b/Makefile.am
index 576be4be..ec5a473e 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -30,6 +30,7 @@ sbin_SCRIPTS += scripts/keepalived/vyatta-vrrp-state.pl
sbin_SCRIPTS += scripts/telnetd.init
sbin_SCRIPTS += scripts/add_bootfile_eth_hwid
sbin_SCRIPTS += scripts/mod_bootfile_eth_hwid
+sbin_SCRIPTS += scripts/dns-forwarding/vyatta-dns-forwarding.pl
noinst_DATA = test_bootfile
diff --git a/debian/control b/debian/control
index 4b5692bb..f5ea7b48 100644
--- a/debian/control
+++ b/debian/control
@@ -27,13 +27,17 @@ Depends: sed (>= 4.1.5),
ssh,
ed,
tshark,
- iputils-arping
+ ifenslave-2.6,
+ iputils-arping,
installation-report,
laptop-detect,
usbutils,
tasksel,
snmp,
- tcpdump
+ tcpdump,
+ dnsmasq,
+ mdadm
+Pre-Depends: bash-completion
Suggests: util-linux (>= 2.13-5),
net-tools,
ethtool,
diff --git a/debian/copyright b/debian/copyright
index f12deb1f..5eb46c84 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -1,7 +1,8 @@
This package was debianized by An-Cheng Huang <ancheng@vyatta.com> on
Thu, 18 Oct 2007 11:03:18 -0700.
-It's original content from the GIT repository <http://vyatt.com/git/vyatta-cfg-system>
+It's original content from the GIT repository
+ <http://vyatt.com/git/vyatta-cfg-system>
Upstream Author:
diff --git a/debian/vyatta-cfg-system.postinst.in b/debian/vyatta-cfg-system.postinst.in
index 0dd6248f..2c057103 100644
--- a/debian/vyatta-cfg-system.postinst.in
+++ b/debian/vyatta-cfg-system.postinst.in
@@ -7,7 +7,7 @@ bindir=@bindir@
sbindir=@sbindir@
# remove init of daemons that we start/stop
-for init in ntp ssh snmpd openhpid vyatta-keepalived ipvsadm; do
+for init in ntp ssh snmpd openhpid vyatta-keepalived ipvsadm dnsmasq; do
update-rc.d -f ${init} remove >/dev/null
done
diff --git a/scripts/dns-forwarding/vyatta-dns-forwarding.pl b/scripts/dns-forwarding/vyatta-dns-forwarding.pl
new file mode 100644
index 00000000..73a4bbe4
--- /dev/null
+++ b/scripts/dns-forwarding/vyatta-dns-forwarding.pl
@@ -0,0 +1,289 @@
+#!/usr/bin/perl
+#
+# Module: vyatta-dns-forwarding.pl
+#
+# **** License ****
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# This code was originally developed by Vyatta, Inc.
+# Portions created by Vyatta are Copyright (C) 2008 Vyatta, Inc.
+# All Rights Reserved.
+#
+# Author: Mohit Mehta
+# Date: August 2008
+# Description: Script to glue Vyatta CLI to dnsmasq daemon
+#
+# **** End License ****
+#
+
+use lib "/opt/vyatta/share/perl5/";
+use VyattaConfig;
+use VyattaMisc;
+use Getopt::Long;
+
+use strict;
+use warnings;
+
+my $dnsforwarding_init = '/etc/init.d/dnsmasq';
+my $dnsforwarding_conf = '/etc/dnsmasq.conf';
+
+
+sub dnsforwarding_restart {
+ system("$dnsforwarding_init restart >&/dev/null");
+ print "Setting up DNS forwarding.\n";
+}
+
+sub dnsforwarding_stop {
+ system("$dnsforwarding_init stop >&/dev/null");
+ print "Stopping DNS forwarding.\n";
+}
+
+sub dnsforwarding_get_constants {
+ my $output;
+
+ my $date = `date`;
+ chomp $date;
+ $output = "#\n# autogenerated by vyatta-dns-forwarding.pl on $date\n#\n";
+ $output .= "log-facility=/var/log/dnsmasq.log\n";
+ system("rm -f /var/log/dnsmasq.log; touch /var/log/dnsmasq.log");
+ return $output;
+}
+
+sub dnsforwarding_get_values {
+
+ my $dhclient_script = shift;
+
+ my $output = '';
+ my $config = new VyattaConfig;
+ my $use_dnsmasq_conf = 0;
+ my (@ignore_interfaces, $cache_size, @use_nameservers, $use_system_nameservers, @use_dhcp_nameservers);
+
+ $config->setLevel("service dns forwarding");
+
+ if ($dhclient_script == 1){
+ $config->{_active_dir_base} = "/opt/vyatta/config/active/";
+ @ignore_interfaces = $config->returnOrigValues("ignore-interface");
+ $cache_size = $config->returnOrigValue("cache-size");
+ @use_nameservers = $config->returnOrigValues("name-server");
+ $use_system_nameservers = $config->existsOrig("system");
+ @use_dhcp_nameservers = $config->returnOrigValues("dhcp");
+
+ } else {
+ @ignore_interfaces = $config->returnValues("ignore-interface");
+ $cache_size = $config->returnValue("cache-size");
+ @use_nameservers = $config->returnValues("name-server");
+ $use_system_nameservers = $config->exists("system");
+ @use_dhcp_nameservers = $config->returnValues("dhcp");
+ }
+
+ if (@ignore_interfaces != 0) {
+ foreach my $interface (@ignore_interfaces) {
+ $output .= "except-interface=$interface\n";
+ }
+ }
+
+ if (defined $cache_size) {
+ $output .= "cache-size=$cache_size\n";
+ }
+
+ if (@use_nameservers != 0){
+ $use_dnsmasq_conf = 1;
+ foreach my $cli_nameserver (@use_nameservers) {
+ $output .= "server=$cli_nameserver\t# statically configured\n";
+ }
+ }
+
+ if (defined($use_system_nameservers)) {
+ $use_dnsmasq_conf = 1;
+ my $sys_config = new VyattaConfig;
+ $sys_config->setLevel("system");
+ my @system_nameservers;
+ if ($dhclient_script == 1){
+ $sys_config->{_active_dir_base} = "/opt/vyatta/config/active/";
+ @system_nameservers = $sys_config->returnOrigValues("name-server");
+ } else {
+ @system_nameservers = $sys_config->returnValues("name-server");
+ }
+ if (@system_nameservers > 0) {
+ foreach my $system_nameserver (@system_nameservers) {
+ $output .= "server=$system_nameserver\t# system\n";
+ }
+ }
+ }
+
+ if (@use_dhcp_nameservers != 0) {
+ $use_dnsmasq_conf = 1;
+ foreach my $interface (@use_dhcp_nameservers) {
+ my $dhcp_nameserver_count=`grep nameserver /etc/resolv.conf.dhclient-new-$interface | wc -l`;
+ if ($dhcp_nameserver_count > 0) {
+ my @dhcp_nameservers = `grep nameserver /etc/resolv.conf.dhclient-new-$interface`;
+ for my $each_nameserver (@dhcp_nameservers) {
+ my @nameserver = split(/ /, $each_nameserver, 2);
+ my $ns = $nameserver[1];
+ chomp $ns;
+ $output .= "server=$ns\t# dhcp $interface\n";
+ }
+ }
+ }
+ }
+
+ if ($use_dnsmasq_conf == 1) {
+ $output .= "resolv-file=/etc/dnsmasq.conf\n";
+ }
+
+ return $output;
+}
+
+sub dnsforwarding_write_file {
+ my ($config) = @_;
+
+ open(my $fh, '>', $dnsforwarding_conf) || die "Couldn't open $dnsforwarding_conf - $!";
+ print $fh $config;
+ close $fh;
+}
+
+sub check_nameserver {
+
+ my $cmd = `grep nameserver /etc/resolv.conf|wc -l`;
+ return $cmd;
+}
+
+sub check_system_nameserver {
+
+ my $config = new VyattaConfig;
+ $config->setLevel("system");
+ my @system_nameservers = $config->returnValues("name-server");
+ return(@system_nameservers);
+
+}
+
+sub check_dhcp_nameserver {
+
+ my $intf = shift;
+ my $cmd = `grep nameserver /etc/resolv.conf.dhclient-new-$intf|wc -l`;
+ return $cmd;
+}
+
+sub is_dhcp_enabled {
+ my $intf = shift;
+
+ my $config = new VyattaConfig;
+
+ if ($intf =~ m/^eth/) {
+ if ($intf =~ m/(\w+)\.(\d+)/) {
+ $config->setLevel("interfaces ethernet $1 vif $2");
+ } else {
+ $config->setLevel("interfaces ethernet $intf");
+ }
+ } elsif ($intf =~ m/^br/) {
+ $config->setLevel("interfaces bridge $intf");
+ } else {
+ #
+ # currently we only support dhcp on ethernet
+ # and bridge interfaces.
+ #
+ return 0;
+ }
+ my @addrs = $config->returnOrigValues("address");
+ foreach my $addr (@addrs) {
+ if (defined $addr && $addr eq "dhcp") {
+ return 1;
+ }
+ }
+ return 0;
+}
+
+sub check_dhcp_interface {
+
+ my $interface = shift;
+
+ if (!is_dhcp_enabled($interface)) {
+ print "$interface is not using DHCP to get an IP address\n";
+ return 0;
+ }
+
+ if (-e "/var/run/vyatta/dhclient/dhclient_release_$interface") {
+ # dhcp released for the interface
+ print "DHCP lease for $interface has been released.\n";
+ print "Renew lease for $interface before setting this parameter.\n";
+ return 0;
+ }
+
+ return 1;
+}
+
+
+#
+# main
+#
+
+my ($update_dnsforwarding, $stop_dnsforwarding, $system_nameserver, $dhcp_interface, $dhcp_interface_nameserver, $dhclient_script);
+
+GetOptions("update-dnsforwarding!" => \$update_dnsforwarding,
+ "stop-dnsforwarding!" => \$stop_dnsforwarding,
+ "system-nameserver!" => \$system_nameserver,
+ "dhcp-interface-nameserver=s" => \$dhcp_interface_nameserver,
+ "dhclient-script!" => \$dhclient_script,
+ "dhcp-interface=s" => \$dhcp_interface);
+
+if (defined $system_nameserver) {
+ my $system_nameserver_exists = check_system_nameserver();
+ if ($system_nameserver_exists < 1){
+ print "Warning: No DNS servers set in system to forward queries.\n";
+ }
+}
+
+if (defined $dhcp_interface_nameserver) {
+ my $dhcp_interface_nameserver_exists = check_dhcp_nameserver($dhcp_interface_nameserver);
+ if ($dhcp_interface_nameserver_exists < 1){
+ print "Warning: No DNS servers received from DHCP server for $dhcp_interface_nameserver.\n";
+ }
+}
+
+if (defined $dhcp_interface) {
+ if (!check_dhcp_interface($dhcp_interface)){
+ exit 1;
+ }
+}
+
+if (defined $update_dnsforwarding) {
+ my $config;
+ my $vyatta_config = new VyattaConfig;
+
+ $vyatta_config->setLevel("service dns forwarding");
+ my $use_system_nameservers = $vyatta_config->exists("system");
+ my @use_dhcp_nameservers = $vyatta_config->returnValues("dhcp");
+ my @use_nameservers = $vyatta_config->returnValues("name-server");
+
+ if (!(defined $use_system_nameservers) && (@use_dhcp_nameservers == 0) && (@use_nameservers == 0)) {
+ my $nameserver_exists = check_nameserver();
+ if ($nameserver_exists < 1){
+ print "Warning: No DNS servers ('system set' or 'dhcp received') to forward queries.\n";
+ }
+ }
+
+ my $called_from_dhclient_script = 0;
+ if (defined $dhclient_script){
+ $called_from_dhclient_script = 1;
+ }
+ $config = dnsforwarding_get_constants();
+ $config .= dnsforwarding_get_values($called_from_dhclient_script);
+ dnsforwarding_write_file($config);
+ dnsforwarding_restart();
+}
+
+if (defined $stop_dnsforwarding) {
+ dnsforwarding_stop();
+}
+
+exit 0;
+
+# end of file
+
diff --git a/scripts/rl-system.init b/scripts/rl-system.init
index 23d67d12..0f6957ad 100755
--- a/scripts/rl-system.init
+++ b/scripts/rl-system.init
@@ -121,7 +121,7 @@ clear_or_override_config_files ()
udev_rescan ()
{
rm -f /tmp/vyatta_net_name_*
- udevtrigger --subsystem-match=net && udevsettle
+ udevadm trigger --subsystem-match=net && udevsettle
for ff in /tmp/vyatta_net_name_* ; do
f=${ff##*/}
cmd_name_hwid=${f/vyatta_net_name_/}
diff --git a/scripts/system/vyatta_update_resolv.pl b/scripts/system/vyatta_update_resolv.pl
index b35cae4a..8f0e9ead 100755
--- a/scripts/system/vyatta_update_resolv.pl
+++ b/scripts/system/vyatta_update_resolv.pl
@@ -74,14 +74,14 @@ foreach my $domain (@domains) {
# add domain names received from dhcp client to domain search in /etc/resolv.conf if domain-name not set in CLI
if (!defined($domain_name)) {
- my @dhcp_interfaces_resolv_files = `ls /etc/ | grep dhclient.new`;
+ my @dhcp_interfaces_resolv_files = `ls /etc/ | grep resolv.conf.dhclient-new`;
if ($#dhcp_interfaces_resolv_files >= 0) {
for my $each_file (@dhcp_interfaces_resolv_files) {
chomp $each_file;
- my $find_search = `grep search /etc/$each_file 2> /dev/null | wc -l`;
+ my $find_search = `grep "^search" /etc/$each_file 2> /dev/null | wc -l`;
if ($find_search == 1) {
- my $search_string = `grep search /etc/$each_file`;
- my @dhcp_domains = split(/ /, $search_string, 2);
+ my $search_string = `grep "^search" /etc/$each_file`;
+ my @dhcp_domains = split(/\s+/, $search_string, 2);
my $dhcp_domain = $dhcp_domains[1];
chomp $dhcp_domain;
$doms .= ' ' . $dhcp_domain;
@@ -107,7 +107,7 @@ if ($dhclient_script == 1) {
# code below to add new name-servers received from dhcp client
- my @dhcp_interfaces_resolv_files = `ls /etc/ | grep dhclient.new`;
+ my @dhcp_interfaces_resolv_files = `ls /etc/ | grep resolv.conf.dhclient-new`;
if ($#dhcp_interfaces_resolv_files >= 0) {
my $ns_count = 0;
for my $each_file (@dhcp_interfaces_resolv_files) {
@@ -121,8 +121,19 @@ if ($dhclient_script == 1) {
chomp $ns;
$current_dhcp_nameservers[$ns_count] = $ns;
$ns_count++;
- my $search_ns_in_resolvconf = `grep $ns /etc/resolv.conf 2> /dev/null | wc -l`;
- if ($search_ns_in_resolvconf == 0) {
+ my @search_ns_in_resolvconf = `grep $ns /etc/resolv.conf`;
+ my $ns_in_resolvconf = 0;
+ if (@search_ns_in_resolvconf > 0) {
+ foreach my $ns_resolvconf (@search_ns_in_resolvconf) {
+ my @resolv_ns = split(/\s+/, $ns_resolvconf);
+ my $final_ns = $resolv_ns[1];
+ chomp $final_ns;
+ if ($final_ns eq $ns) {
+ $ns_in_resolvconf = 1;
+ }
+ }
+ }
+ if ($ns_in_resolvconf == 0) {
open (APPEND, ">>/etc/resolv.conf") or die "$! error trying to overwrite";
print APPEND "nameserver\t$ns\t\t#nameserver written by $0\n";
close (APPEND);
@@ -145,7 +156,7 @@ if ($dhclient_script == 1) {
}
if ($#current_dhcp_nameservers < 0) {
for my $dhcpnameserver (@dhcp_nameservers_in_resolvconf) {
- my $cmd = "sed -i '/$dhcpnameserver/d' /etc/resolv.conf";
+ my $cmd = "sed -i '/$dhcpnameserver\t/d' /etc/resolv.conf";
system($cmd);
$restart_ntp = 1;
}
@@ -158,7 +169,7 @@ if ($dhclient_script == 1) {
}
}
if ($found == 0) {
- my $cmd = "sed -i '/$dhcpnameserver/d' /etc/resolv.conf";
+ my $cmd = "sed -i '/$dhcpnameserver\t/d' /etc/resolv.conf";
system($cmd);
$restart_ntp = 1;
}
diff --git a/sysconf/vyatta-sysctl.conf b/sysconf/vyatta-sysctl.conf
index cb03a614..fae11945 100644
--- a/sysconf/vyatta-sysctl.conf
+++ b/sysconf/vyatta-sysctl.conf
@@ -24,3 +24,6 @@ net.ipv4.icmp_errors_use_inbound_ifaddr=1
# Turn off SACK since it causes problems with MD5 due to lack of options space
net.ipv4.tcp_sack=0
+
+# Enable packet forwarding for IPv6
+net.ipv6.conf.all.forwarding=1
diff --git a/templates/interfaces/bridge/node.tag/address/node.def b/templates/interfaces/bridge/node.tag/address/node.def
index 52188386..3f04ec06 100644
--- a/templates/interfaces/bridge/node.tag/address/node.def
+++ b/templates/interfaces/bridge/node.tag/address/node.def
@@ -7,5 +7,6 @@ delete:expression: "sudo /opt/vyatta/sbin/vyatta-interfaces.pl --eth-addr-delete
allowed: echo "dhcp <>"
comp_help:Possible completions:
<x.x.x.x/x> Set the IP address and prefix length
- dhcp\t\t\t\tSet the IP address and prefix length via DHCP
+ <h:h:h:h:h:h:h:h/x> Set the IPv6 address and prefix length
+ dhcp Set the IP address and prefix length via DHCP
diff --git a/templates/interfaces/tunnel/node.tag/address/node.def b/templates/interfaces/tunnel/node.tag/address/node.def
index 07ea4a0e..3310ee00 100644
--- a/templates/interfaces/tunnel/node.tag/address/node.def
+++ b/templates/interfaces/tunnel/node.tag/address/node.def
@@ -9,4 +9,5 @@ update:expression: "sudo /opt/vyatta/sbin/vyatta-interfaces.pl --eth-addr-update
delete:expression: "sudo /opt/vyatta/sbin/vyatta-interfaces.pl --eth-addr-delete $VAR(@) --dev $VAR(../@)"; "Error deleting address $VAR(@) on interface $VAR(../@)"
comp_help:Possible completions:
- <x.x.x.x/x> Set the IP address and prefix length
+ <x.x.x.x/x> Set the IP address and prefix length
+ <h:h:h:h:h:h:h:h/x> Set the IPv6 address and prefix length
diff --git a/templates/service/dns/forwarding/cache-size/node.def b/templates/service/dns/forwarding/cache-size/node.def
new file mode 100644
index 00000000..3a73f308
--- /dev/null
+++ b/templates/service/dns/forwarding/cache-size/node.def
@@ -0,0 +1,4 @@
+type: u32
+default:150
+help: Set DNS forwarding cache size
+syntax:expression: ($VAR(@) >=0 && $VAR(@) < 10001) ; "Cache size must be between 0 and 10000"
diff --git a/templates/service/dns/forwarding/dhcp/node.def b/templates/service/dns/forwarding/dhcp/node.def
new file mode 100644
index 00000000..24598129
--- /dev/null
+++ b/templates/service/dns/forwarding/dhcp/node.def
@@ -0,0 +1,9 @@
+multi:
+type: txt
+help: Set to forward DNS queries to nameservers received from DHCP server for specified interface
+syntax:expression: exec "/opt/vyatta/sbin/vyatta-dns-forwarding.pl --dhcp-interface $VAR(@)"
+commit:expression: exec "/opt/vyatta/sbin/vyatta-dns-forwarding.pl --dhcp-interface-nameserver $VAR(@)"
+allowed:
+ local -a array ;
+ array=( /var/lib/dhcp3/eth* ) ;
+ echo -n ${array[@]##*/}
diff --git a/templates/service/dns/forwarding/ignore-interface/node.def b/templates/service/dns/forwarding/ignore-interface/node.def
new file mode 100644
index 00000000..5bf20fa0
--- /dev/null
+++ b/templates/service/dns/forwarding/ignore-interface/node.def
@@ -0,0 +1,20 @@
+multi:
+type: txt
+help: Set interface to ignore DNS queries on
+syntax:expression: exec "
+ intf_array=($(awk '$1 ~ /:/ { print $1 }' /proc/net/dev))
+ intf_array_len=${#intf_array[*]}
+ i=0
+ while [ $i -lt $intf_array_len ]; do
+ temp=${intf_array[$i]%:*}
+ if [ \"$temp\" == \"$VAR(@)\" ] ; then
+ exit 0
+ fi
+ let i++
+ done
+ echo Invalid ethernet interface [$VAR(@)]
+ exit 1 "
+
+allowed: local -a array ;
+ array=($(awk '$1 ~ /:/ { print $1 }' /proc/net/dev));
+ echo -n ${array[@]%:*}
diff --git a/templates/service/dns/forwarding/name-server/node.def b/templates/service/dns/forwarding/name-server/node.def
new file mode 100644
index 00000000..ad67c6de
--- /dev/null
+++ b/templates/service/dns/forwarding/name-server/node.def
@@ -0,0 +1,3 @@
+multi:
+type: ipv4
+help: Set DNS server to forward queries
diff --git a/templates/service/dns/forwarding/node.def b/templates/service/dns/forwarding/node.def
new file mode 100644
index 00000000..46dbd199
--- /dev/null
+++ b/templates/service/dns/forwarding/node.def
@@ -0,0 +1,8 @@
+help: Configure DNS forwarding
+delete:expression: "touch /tmp/dnsmasq.$PPID"
+end:expression: "if [ -f \"/tmp/dnsmasq.$PPID\" ]; then \
+ sudo /opt/vyatta/sbin/vyatta-dns-forwarding.pl --stop-dnsforwarding \
+ rm /tmp/dnsmasq.$PPID; \
+ else \
+ sudo /opt/vyatta/sbin/vyatta-dns-forwarding.pl --update-dnsforwarding; \
+ fi; "
diff --git a/templates/service/dns/forwarding/system/node.def b/templates/service/dns/forwarding/system/node.def
new file mode 100644
index 00000000..e92a7ad6
--- /dev/null
+++ b/templates/service/dns/forwarding/system/node.def
@@ -0,0 +1,2 @@
+help: Set DNS forwarding to system nameservers
+commit:expression: exec "/opt/vyatta/sbin/vyatta-dns-forwarding.pl --system-nameserver"
diff --git a/templates/service/dns/node.def b/templates/service/dns/node.def
new file mode 100644
index 00000000..d7040d0d
--- /dev/null
+++ b/templates/service/dns/node.def
@@ -0,0 +1 @@
+help: Configure Domain Name Server (DNS) parameters
diff --git a/templates/system/name-server/node.def b/templates/system/name-server/node.def
index 3866e82c..fce5cac9 100644
--- a/templates/system/name-server/node.def
+++ b/templates/system/name-server/node.def
@@ -1,19 +1,25 @@
multi:
type: ipv4
help: Set Domain Name Server (DNS)
-update:expression: "sudo sh -c \"touch /etc/resolv.conf && \
-if grep -q '$VAR(@)' /etc/resolv.conf; then \
- exit 0; \
-else \
- mv -f /etc/resolv.conf /etc/old_resolv.conf && \
- echo \\\"nameserver\t $VAR(@)\\\" >> /etc/resolv.conf && \
- cat /etc/old_resolv.conf >> /etc/resolv.conf; \
-fi && \
-if [ -f /etc/ntp.conf ] && grep -q 'server' /etc/ntp.conf; then \
- /usr/sbin/invoke-rc.d ntp restart >&/dev/null; \
-fi\" "
+update: sudo sh -c "touch /etc/resolv.conf &&
+if grep -q \"$VAR(@)\($\|[[:space:]]\)\" /etc/resolv.conf; then
+ exit 0;
+else
+ mv -f /etc/resolv.conf /etc/old_resolv.conf &&
+ echo \"nameserver $VAR(@)\" >> /etc/resolv.conf &&
+ cat /etc/old_resolv.conf >> /etc/resolv.conf;
+fi &&
+if [ -d /opt/vyatta/config/active/service/dns/forwarding ]; then
+ /opt/vyatta/sbin/vyatta-dns-forwarding.pl --update-dnsforwarding >&/dev/null;
+fi &&
+if [ -f /etc/ntp.conf ] && grep -q 'server' /etc/ntp.conf; then
+ /usr/sbin/invoke-rc.d ntp restart >&/dev/null;
+fi"
delete:expression: "sudo sh -c \"touch /etc/resolv.conf && \
-sed -i '/$VAR(@)/d' /etc/resolv.conf && \
+sed -i '/$VAR(@)$/d' /etc/resolv.conf && \
if [ -f /etc/ntp.conf ] && grep -q 'server' /etc/ntp.conf; then \
/usr/sbin/invoke-rc.d ntp restart >&/dev/null; \
+fi && \
+if [ -d /opt/vyatta/config/active/service/dns/forwarding ]; then \
+ /opt/vyatta/sbin/vyatta-dns-forwarding.pl --update-dnsforwarding >&/dev/null; \
fi\" "
diff --git a/templates/system/static-host-mapping/host-name/node.def b/templates/system/static-host-mapping/host-name/node.def
index 189025e3..bd9cfab1 100644
--- a/templates/system/static-host-mapping/host-name/node.def
+++ b/templates/system/static-host-mapping/host-name/node.def
@@ -3,9 +3,14 @@ type: txt
help: Set to map DNS names to system interfaces
syntax:expression: pattern $VAR(@) "^[-a-zA-Z0-9.]+$" ; "invalid host name $VAR(@)"
commit:expression: $VAR(./inet) != ""; "IP address for the static mapping must be set"
-end:expression: "sudo sh -c \"\
- touch /etc/hosts; \
- sed -i '/ $VAR(@) .*#vyatta entry/d' /etc/hosts; \
- if [ -z \"$VAR(./inet/@)\" ]; then exit 0; fi; \
- declare -a aliases=( $VAR(alias/@@) ); \
- echo \\\"$VAR(inet/@)\t $VAR(@) \\${aliases[*]} \t #vyatta entry\\\" \ >> /etc/hosts\" "
+end: sudo sh -c "
+ touch /etc/hosts
+ sed -i '/ $VAR(@) .*#vyatta entry/d' /etc/hosts
+ if [ -z \"$VAR(./inet/@)\" ]; then
+ if [ -d /opt/vyatta/config/active/service/dns/forwarding ]; then /etc/init.d/dnsmasq restart >&/dev/null; fi
+ exit 0
+ fi
+ declare -a aliases=( $VAR(alias/@@) )
+ echo -e \"$VAR(inet/@)\\t $VAR(@) \${aliases[*]} \\t #vyatta entry\" >> /etc/hosts
+ if [ -d /opt/vyatta/config/active/service/dns/forwarding ]; then /etc/init.d/dnsmasq restart >&/dev/null; fi"
+