summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/system/vyatta_update_resolv.pl268
-rwxr-xr-xscripts/vyatta-system-nameservers102
2 files changed, 0 insertions, 370 deletions
diff --git a/scripts/system/vyatta_update_resolv.pl b/scripts/system/vyatta_update_resolv.pl
deleted file mode 100755
index de09a760..00000000
--- a/scripts/system/vyatta_update_resolv.pl
+++ /dev/null
@@ -1,268 +0,0 @@
-#!/usr/bin/perl -w
-#
-# Module: vyatta_update_resolv.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) 2007 Vyatta, Inc.
-# All Rights Reserved.
-#
-# Author: Marat Nepomnyashy
-# Date: December 2007
-# Description: Script to update '/etc/resolv.conf' on commit of 'system domain-search domain' config.
-#
-# **** End License ****
-#
-
-use strict;
-use lib "/opt/vyatta/share/perl5/";
-use Getopt::Long;
-use Vyatta::Config;
-
-my $dhclient_script = 0;
-my $config_mode = 0;
-
-GetOptions("dhclient-script=i" => \$dhclient_script,
- "config-mode=i" => \$config_mode,
-);
-
-my $vc = new Vyatta::Config();
-$vc->setLevel('system');
-
-my @search_domains;
-my $domain_name = undef;
-my $disable_dhcp_nameservers = undef;
-
-if ($config_mode == 1) {
- $disable_dhcp_nameservers = $vc->exists('disable-dhcp-nameservers');
-} else {
- $disable_dhcp_nameservers = $vc->existsOrig('disable-dhcp-nameservers');
-}
-
-if ($dhclient_script == 1) {
- @search_domains = $vc->returnOrigValues('domain-search domain');
- $domain_name = $vc->returnOrigValue('domain-name');
-} else {
- @search_domains = $vc->returnValues('domain-search domain');
- $domain_name = $vc->returnValue('domain-name');
-}
-
-if ($dhclient_script == 0 && @search_domains > 0 && $domain_name && length($domain_name) > 0) {
- my @location;
- if ($vc->returnOrigValues('domain-search domain') > 0) {
- @location = ["system","domain-name"];
- }
- else {
- @location = ["system","domain-search","domain"];
- }
- Vyatta::Config::outputError(@location,"System configuration error. Both \'domain-name\' and \'domain-search\' are specified, but only one of these mutually exclusive parameters is allowed.");
- exit(1);
-}
-
-my $search_domain_list = '';
-my $search_includes_system = 0;
-
-foreach my $domain (@search_domains) {
- if (length($search_domain_list) > 0) {
- $search_domain_list .= ' ';
- }
- $search_domain_list .= $domain;
- $search_includes_system = 1;
-}
-
-# add domain searches received from the dhcp client to those already in /etc/resolv.conf, as long as domain-name is not set in the CLI
-
-my $search_includes_dhcp = 0;
-
-if (!defined($domain_name)) {
- 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`;
- if ($find_search == 1) {
- 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;
- if (length($search_domain_list) > 0) {
- $search_domain_list .= ' ';
- }
- $search_domain_list .= $dhcp_domain;
- $search_includes_dhcp = 1;
- }
- }
- }
-}
-
-my $search = '';
-if (length($search_domain_list) > 0) {
- my $source;
- if ($search_includes_system == 1) {
- if ($search_includes_dhcp == 1) {
- $source = "(system + dhcp)";
- } else {
- $source = "(system)";
- }
- } else {
- $source = "(dhcp)";
- }
- $search = "#line generated by vyatta_update_resolv.pl $source\nsearch\t\t$search_domain_list\n";
-}
-
-my $domain = '';
-if ($domain_name && length($domain_name) > 0) {
- $domain = "#line generated by vyatta_update_resolv.pl (system)\ndomain\t\t$domain_name\n";
-}
-
-# update /etc/resolv.conf with name-servers received from dhcp client, done when this script is called
-# with either the dhclient-script (on DHCP changes) or config-mode (disable-dhcp-nameservers) options.
-
-if (($dhclient_script == 1) || ($config_mode == 1)) {
- my @current_dhcp_nameservers;
-
- # code below to add new name-servers received from dhcp client, but only if disable-dhcp-nameservers
- # hasn't been enabled.
-
- 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) {
- chomp $each_file;
- my $find_nameserver = `grep nameserver /etc/$each_file 2> /dev/null | wc -l`;
- if ($find_nameserver > 0) {
- my @nameservers = `grep nameserver /etc/$each_file`;
- for my $each_nameserver (@nameservers) {
- my @nameserver = split(/ /, $each_nameserver, 2);
- my $ns = $nameserver[1];
- chomp $ns;
- $current_dhcp_nameservers[$ns_count] = $ns;
- $ns_count++;
- 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) && !($disable_dhcp_nameservers)) {
- open (my $rf, '>>', '/etc/resolv.conf')
- or die "$! error trying to overwrite";
- print $rf "#nameserver written by vyatta_update_resolv.pl (dhcp)\nnameserver\t$ns\n";
- close $rf;
- }
- }
- }
- }
- }
-
- # code below to remove old name-servers from /etc/resolv.conf that were not received in this response
- # from dhcp-server, or to remove previous dhcp supplied name-servers if disable-dhcp-nameservers has
- # been enabled.
-
- my $found_old = 0;
-
- my @nameservers_dhcp_in_resolvconf = `sed -n '/nameserver written/{n;P;}' /etc/resolv.conf`;
- for my $old_style_nameservers (@nameservers_dhcp_in_resolvconf) {
- if ($old_style_nameservers =~ /#line generated by/){
- @nameservers_dhcp_in_resolvconf = `sed -n '/nameserver written/{P;}' /etc/resolv.conf`;
- $found_old = 1;
- last;
- }
- }
- my @dhcp_nameservers_in_resolvconf;
- my $count_nameservers_in_resolvconf = 0;
- for my $count_dhcp_nameserver (@nameservers_dhcp_in_resolvconf) {
- my @dhcp_nameserver = split(/\t/, $count_dhcp_nameserver, 3);
- $dhcp_nameservers_in_resolvconf[$count_nameservers_in_resolvconf] = $dhcp_nameserver[1];
- $count_nameservers_in_resolvconf++;
- }
- if (($#current_dhcp_nameservers < 0) || ($disable_dhcp_nameservers)) {
- for my $dhcpnameserver (@dhcp_nameservers_in_resolvconf) {
- my $cmd;
- chomp $dhcpnameserver;
- if ($found_old == 1) {
- $cmd = "sed -i '/nameserver\t$dhcpnameserver/d' /etc/resolv.conf";
- } else {
- $cmd = "sed -i -n '/nameserver\t$dhcpnameserver/".'{n;x;d;};x;1d;p;${x;p;}'."' /etc/resolv.conf";
- }
- system($cmd);
- }
- } else {
- for my $dhcpnameserver (@dhcp_nameservers_in_resolvconf) {
- my $found = 0;
- my $cmd;
- chomp $dhcpnameserver;
- for my $currentnameserver (@current_dhcp_nameservers) {
- if ($dhcpnameserver eq $currentnameserver){
- $found = 1;
- }
- }
- if ($found == 0) {
- if ($found_old == 1) {
- $cmd = "sed -i '/nameserver\t$dhcpnameserver/d' /etc/resolv.conf";
- } else {
- $cmd = "sed -i -n '/nameserver\t$dhcpnameserver/".'{n;x;d;};x;1d;p;${x;p;}'."' /etc/resolv.conf";
- }
- system($cmd);
- }
- }
- }
-}
-
-# The following will re-write '/etc/resolv.conf' line by line,
-# replacing the 'search' specifier with the latest values,
-# or replacing the 'domain' specifier with the latest value.
-
-my @resolv;
-if (-e '/etc/resolv.conf') {
- open (my $f, '<', '/etc/resolv.conf')
- or die("$0: Error! Unable to open '/etc/resolv.conf' for input: $!\n");
- @resolv = <$f>;
- close ($f);
-}
-
-my $foundSearch = 0;
-my $foundDomain = 0;
-
-open (my $r, '>', '/etc/resolv.conf')
- or die("$0: Error! Unable to open '/etc/resolv.conf' for output: $!\n");
-
-foreach my $line (@resolv) {
- if ($line =~ /^search\s/) {
- $foundSearch = 1;
- if (length($search) > 0) {
- print $r $search;
- }
- } elsif ($line =~ /^domain\s/) {
- $foundDomain = 1;
- if (length($domain) > 0) {
- print $r $domain;
- }
- } elsif ($line !~ /^#line generated by\s/) {
- print $r $line;
- }
-}
-
-if ($foundSearch == 0 && length($search) > 0) {
- print $r $search;
-}
-if ($foundDomain == 0 && length($domain) > 0) {
- print $r $domain;
-}
-
-close ($r);
diff --git a/scripts/vyatta-system-nameservers b/scripts/vyatta-system-nameservers
deleted file mode 100755
index 9c688e80..00000000
--- a/scripts/vyatta-system-nameservers
+++ /dev/null
@@ -1,102 +0,0 @@
-#!/bin/bash
-#
-# Module: vyatta-system-nameservers
-#
-# **** 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: September 2008
-# Description: CLI back-end script for setting/deleting system nameservers
-#
-# **** End License ****
-#
-
-print_usage() {
- echo "Usage:"
- echo -e "\t$0 update <ip of name-server>"
- echo -e "\t$0 delete <ip of name-server>"
-}
-
-restart_dnsmasq () {
- # restart dnsmasq if dns-forwarding is configured
- if cli-shell-api existsActive service dns forwarding; then
- /opt/vyatta/sbin/vyatta-dns-forwarding.pl --update-dnsforwarding >&/dev/null
- fi
-}
-
-update_system_nameservers () {
- nameserver=$1
- touch /etc/resolv.conf
- # if name-server already in /etc/resolv.conf then exit
- if grep -q "$nameserver\($\|[[:space:]]\)" /etc/resolv.conf; then
- exit 0
- else
- # find last instance of cli inserted nameserver
- # insert currently received nameserver immediately after that
- # this is done to keep system set nameservers priority over dhcp received nameservers
- cli_ns_array=($(awk '{if (/(dhcp)/) exit 0; if (!$3) print $2}' /etc/resolv.conf))
- cli_ns_array_len=${#cli_ns_array[*]}
- line_num=0
- if [ $cli_ns_array_len -gt 0 ]; then
- grepped_ns_line=`grep "${cli_ns_array[$cli_ns_array_len-1]}$" -n /etc/resolv.conf`
- echo ${grepped_ns_line%%:*} > /etc/resolv_tmp.conf
- line_num=`cat /etc/resolv_tmp.conf`
- fi
- head -$line_num /etc/resolv.conf > /etc/resolv_tmp.conf
- echo "nameserver $nameserver" >> /etc/resolv_tmp.conf
- total_lines=`cat /etc/resolv.conf | wc -l`
- rest_lines=`expr $total_lines - $line_num`
- tail -$rest_lines /etc/resolv.conf >> /etc/resolv_tmp.conf
- mv -f /etc/resolv_tmp.conf /etc/resolv.conf
- fi
- restart_dnsmasq
-}
-
-delete_system_nameserver () {
- nameserver=$1
- touch /etc/resolv.conf
- # remove specified nameserver
- sed -i "/$nameserver$/d" /etc/resolv.conf
- restart_dnsmasq
-}
-
-#
-# main
-#
-
-case "$1" in
- update)
- if [ $# -ne 2 ]; then
- print_usage
- exit 1
- fi
- update_system_nameservers $2
- exit 0
- ;;
-
- delete)
- if [ $# -ne 2 ]; then
- print_usage
- exit 1
- fi
- delete_system_nameserver $2
- exit 0
- ;;
-
- *)
- print_usage
- exit 1
- ;;
-esac