summaryrefslogtreecommitdiff
path: root/scripts/system/vyatta_update_hosts.pl
blob: 0fb2a914306eaf17a5cb291723131dbc178df4f4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
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: $!";