Subversion Repositories sysadmin_scripts

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
75 rodolico 1
#! /usr/bin/perl -w
2
 
3
use Sys::Syslog;
4
 
5
my $statusFile = '/opt/bin/updatedns.status';
6
my $template = '/opt/bin/updatedns.template';
7
my $nsupdate = '/usr/bin/nsupdate';
8
my $keyfile = '/opt/bin/keys/Kdyndd.net.+157+35226.key';
9
 
10
my $entries;
11
 
12
sub doUpdateNS {
13
   my ($hostname, $ip) = @_;
14
   my $nsupdateFileName = "/tmp/$hostname.nsupdate";
15
   open TEMPLATE, "<$template" or die "could not open template $template for read: $!\n";
16
   my $template = join( '', <TEMPLATE> );
17
   close TEMPLATE;
18
   $template =~ s/\{hostname\}/$hostname/gi;
19
   $template =~ s/\{ip\}/$ip/gi;
20
   open OUTPUT, ">$nsupdateFileName" or die "Could not create $nsupdateFileName: $!\n";
21
   print OUTPUT $template;
22
   close OUTPUT;
23
   return `$nsupdate -k $keyfile $nsupdateFileName`;
24
}
25
 
26
 
27
my $realIP = $ENV{'SSH_CLIENT'};
28
$realIP =~ m/^([\d.]+)/;
29
$realIP = $1;
30
my ($hostname,$temp) = split( ' ', $ENV{'SSH_ORIGINAL_COMMAND'});
31
$realIP = $temp if $temp;
32
 
33
openlog('updatedns', 'cons,pid', 'user');
34
 
35
die "You must send hostname with command\n" unless $hostname;
36
 
37
if ( $hostname !~ m/[a-z0-9-]\.dyndd\.net/ ) {
38
   syslog( 'warning', "Attempt to set incoming server name to invalid host [$hostname]");
39
   exit;
40
}
41
if ( -f $statusFile ) {
42
   open STATUS, "<$statusFile" or die "could not open $statusFile: $!\n";
43
   chomp( (%entries) = map { split "\t" } my (@a) = <STATUS> );
44
   close STATUS;
45
}
46
if ( ( exists $entries{$hostname} ) && ( $entries{$hostname} eq $realIP ) ) {
47
   print "dyndd.net: Already set to the correct IP, [$hostname] = [$realIP]\n";
48
   syslog('info', '%s', "Already set to the correct IP, [$hostname] = [$realIP]");
49
} else {
50
   $entries{$hostname} = $realIP;
51
   open STATUS, ">$statusFile" or die "could not open $statusFile: $!\n";
52
   foreach my $key ( keys %entries ) {
53
      print STATUS "$key\t$entries{$key}\n";
54
   } # foreach
55
   my $output = &doUpdateNS( $hostname, $realIP );
56
   print "$hostname updated to $realIP, results are\n$output\n";
57
   syslog('info', '%s', "$hostname updated to $realIP" );
58
}
59
closelog();
60
 
61
1;