diff options
author | Marat Nepomnyashy <marat@eng-158.vyatta.com> | 2007-12-18 16:53:56 -0800 |
---|---|---|
committer | Marat Nepomnyashy <marat@eng-158.vyatta.com> | 2007-12-18 16:53:56 -0800 |
commit | 7dac33b3bfebabb3a9b95dfe6a0578b9f1c31453 (patch) | |
tree | 5acd7f3ded71a879c5e845a4a3e4a233c3ce2857 /scripts/system | |
parent | c30fc4752c878c12255101aa928c64f7a3511020 (diff) | |
download | vyatta-cfg-system-7dac33b3bfebabb3a9b95dfe6a0578b9f1c31453.tar.gz vyatta-cfg-system-7dac33b3bfebabb3a9b95dfe6a0578b9f1c31453.zip |
Rewrite '/etc/resolv.conf' each time config at 'system domain-search domain $(@)' changes to update the 'search' params. Bug 2113 fix.
Diffstat (limited to 'scripts/system')
-rwxr-xr-x | scripts/system/vyatta_update_resolv.pl | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/scripts/system/vyatta_update_resolv.pl b/scripts/system/vyatta_update_resolv.pl new file mode 100755 index 00000000..0255b256 --- /dev/null +++ b/scripts/system/vyatta_update_resolv.pl @@ -0,0 +1,95 @@ +#!/usr/bin/perl -w +# +# Module: vyatta_update_resolv.pl +# +# **** License **** +# Version: VPL 1.0 +# +# The contents of this file are subject to the Vyatta Public License +# Version 1.0 ("License"); you may not use this file except in +# compliance with the License. You may obtain a copy of the License at +# http://www.vyatta.com/vpl +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +# the License for the specific language governing rights and limitations +# under the License. +# +# 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; +my $change_dir = ''; +my $modify_dir = ''; +GetOptions("change_dir=s" => \$change_dir, "modify_dir=s" => \$modify_dir); + + +use VyattaConfig; +my $vc = new VyattaConfig(); + +if ($change_dir ne '') { + $vc->{_changes_only_dir_base} = $change_dir; +} +if ($modify_dir ne '') { + $vc->{_new_config_dir_base} = $modify_dir; +} + + +my $doms = ''; +$vc->setLevel('system domain-search domain'); +my @domains = $vc->returnValues('.'); +foreach my $domain (@domains) { + if (length($doms) > 0) { + $doms .= ' '; + } + $doms .= $domain; +} + +my $search = ''; +if (length($doms) > 0) { + $search = "search\t\t$doms\t\t#line generated by $0\n"; +} + + +# The following will re-write '/etc/resolv.conf' line by line, +# replacing the 'search' specifier with the latest values. + +my @resolv; +if (-e '/etc/resolv.conf') { + open (RESOLV, '</etc/resolv.conf') or die("$0: Error! Unable to open '/etc/resolv.conf' for input: $!\n"); + @resolv = <RESOLV>; + close (RESOLV); +} + + +my $foundSearch = 0; + +open (RESOLV, '>/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 RESOLV $search; + } + } else { + print RESOLV $line; + } +} +if ($foundSearch == 0 && length($search) > 0) { + print RESOLV $search; +} + +close (RESOLV); + |