diff options
-rw-r--r-- | Makefile.am | 1 | ||||
-rwxr-xr-x | scripts/system/vyatta_update_hosts.pl | 99 | ||||
-rw-r--r-- | templates/system/domain-name/node.def | 4 | ||||
-rw-r--r-- | templates/system/host-name/node.def | 29 |
4 files changed, 105 insertions, 28 deletions
diff --git a/Makefile.am b/Makefile.am index 0d2f049d..1919b44b 100644 --- a/Makefile.am +++ b/Makefile.am @@ -42,6 +42,7 @@ sbin_SCRIPTS += scripts/vyatta-passwd-sync sbin_SCRIPTS += scripts/system/vyatta_check_username.pl sbin_SCRIPTS += scripts/system/vyatta_check_domainname.pl sbin_SCRIPTS += scripts/system/vyatta_interface_rescan +sbin_SCRIPTS += scripts/system/vyatta_update_hosts.pl sbin_SCRIPTS += scripts/system/vyatta_update_login.pl sbin_SCRIPTS += scripts/system/vyatta_update_logrotate.pl sbin_SCRIPTS += scripts/system/vyatta_update_resolv.pl diff --git a/scripts/system/vyatta_update_hosts.pl b/scripts/system/vyatta_update_hosts.pl new file mode 100755 index 00000000..0fb2a914 --- /dev/null +++ b/scripts/system/vyatta_update_hosts.pl @@ -0,0 +1,99 @@ +#!/usr/bin/perl -w +# +# Module: vyatta_update_hosts.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) 2012 Vyatta, Inc. +# All Rights Reserved. +# +# Description: +# Script to update '/etc/hosts' on commit of 'system host-name' and +# 'system domain-name' config. +# +# **** End License **** +# + +use strict; +use lib "/opt/vyatta/share/perl5/"; + +use File::Temp qw(tempfile); +use Vyatta::File qw(touch); +use Vyatta::Config; + +my $HOSTS_CFG = '/etc/hosts'; +my $HOSTS_TMPL = "/tmp/hosts.XXXXXX"; +my $HOSTNAME_CFG = '/etc/hostname'; +my $MAILNAME_CFG = '/etc/mailname'; + +sub set_hostname { + my ( $hostname ) = @_; + system("hostname $hostname"); + open (my $f, '>', $HOSTNAME_CFG) + or die("$0: Error! Unable to open $HOSTNAME_CFG for output: $!\n"); + print $f "$hostname\n"; + close ($f); +} + +sub set_mailname { + my ( $mailname ) = @_; + open (my $f, '>', $MAILNAME_CFG) + or die("$0: Error! Unable to open $MAILNAME_CFG for output: $!\n"); + print $f "$mailname\n"; + close ($f); +} + +my $vc = new Vyatta::Config(); + +$vc->setLevel('system'); +my $host_name = $vc->returnValue('host-name'); +my $domain_name = $vc->returnValue('domain-name'); +my $mail_name; +my $hosts_line = "127.0.1.1\t "; + +if (! defined $host_name) { + $host_name = 'vyatta'; +} +$mail_name = $host_name; + +if (defined $domain_name) { + $mail_name .= '.' . $domain_name; + $hosts_line .= $host_name . '.' . $domain_name; +} +$hosts_line .= " $host_name\t #vyatta entry\n"; + +set_hostname $host_name; +set_mailname $mail_name; + +my ($out, $tempname) = tempfile($HOSTS_TMPL, UNLINK => 1) + or die "Can't create temp file: $!"; + +if (! -e $HOSTS_CFG) { + touch $HOSTS_CFG; +} +open (my $in, '<', $HOSTS_CFG) + or die("$0: Error! Unable to open '$HOSTS_CFG' for input: $!\n"); + +while (my $line = <$in>) { + if ($line =~ m:^127.0.1.1:) { + next; + } + print $out $line; +} +print $out $hosts_line; + +close ($in); +close ($out); + +system("sudo cp $tempname $HOSTS_CFG") == 0 + or die "Can't copy $tempname to $HOSTS_CFG: $!"; + diff --git a/templates/system/domain-name/node.def b/templates/system/domain-name/node.def index 87f9e0fa..429fd47f 100644 --- a/templates/system/domain-name/node.def +++ b/templates/system/domain-name/node.def @@ -5,8 +5,8 @@ help: System domain name # Allow letter-number-hyphen in label (but can not start or end with hyphen) syntax:expression: exec "/opt/vyatta/sbin/vyatta_check_domainname.pl $VAR(../host-name).$VAR(@)" -# also add localhost line into /etc/hosts (see host-name template)? update: sudo /opt/vyatta/sbin/vyatta_update_resolv.pl + sudo /opt/vyatta/sbin/vyatta_update_hosts.pl -# also update localhost line in /etc/hosts (see host-name template)? delete: sudo /opt/vyatta/sbin/vyatta_update_resolv.pl + sudo /opt/vyatta/sbin/vyatta_update_hosts.pl
\ No newline at end of file diff --git a/templates/system/host-name/node.def b/templates/system/host-name/node.def index 8c733b9f..25f22e29 100644 --- a/templates/system/host-name/node.def +++ b/templates/system/host-name/node.def @@ -7,29 +7,6 @@ syntax:expression: pattern $VAR(@) "^[[:alnum:]][-.[:alnum:]]*[[:alnum:]]$" syntax:expression: pattern $VAR(@) "^.{1,63}$" ; "invalid host-name length" -update: sudo sh -c " \ - hostname '$VAR(@)' - echo '$VAR(@)' > /etc/hostname - touch /etc/hosts - sed -i '/^127.0.1.1/d' /etc/hosts - echo -e \"127.0.1.1\t $VAR(@)\t #vyatta entry\" >> /etc/hosts - if [ x$VAR(../domain-name/@) != x ]; then - echo -e \"127.0.1.1\t $VAR(@).$VAR(../domain-name/@)\t #vyatta entry\" \ - >> /etc/hosts - echo \"$VAR(@).$VAR(../domain-name/@)\" > /etc/mailname - else - echo \"$VAR(@)\" > /etc/mailname - fi" -delete: sudo sh -c " \ - echo 'vyatta' > /etc/hostname - hostname 'vyatta' - touch /etc/hosts - sed -i '/^127.0.1.1/d' /etc/hosts - echo -e \"127.0.1.1\t vyatta\t #vyatta entry\" >> /etc/hosts - if [ x$VAR(../domain-name/@) != x ]; then - echo -e \"127.0.1.1\t vyatta.$VAR(../domain-name/@)\t #vyatta entry\" \ - >> /etc/hosts - echo \"vyatta.$VAR(../domain-name/@)\" > /etc/mailname - else - echo \"vyatta\" > /etc/mailname - fi" +update: sudo /opt/vyatta/sbin/vyatta_update_hosts.pl + +delete: sudo /opt/vyatta/sbin/vyatta_update_hosts.pl |