#!/usr/bin/perl
#
# Author: Peter Keel
# 
# Automates DNS entries.
#

die "Usage: $0 domain [IP]\n"       unless($ARGV[0]);

#
# Set filenames
#
$namedboot="/etc/named.boot";
$namedconf="/var/adm/named.conf";
$nameddir="/etc/named";
$namedtemplate="/etc/named/pri.template.dom";
$namedfile="$nameddir/pri.$ARGV[0]";
$domain="$ARGV[0]";
$ip="193.246.253.12";

#
# check if 2nd Argument is somewhat IP-esque.
#
if ($ARGV[1]) {
    $_ = $ARGV[1];
    if (/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/) { 
	$ip=$ARGV[1];
    }
}

#
# Check if domain already exists
#
open(NAMEDBOOT,"<$namedboot") || die "Cannot open $namedboot for input\n";
    while (<NAMEDBOOT>){
	(@olddom)=split(' ',$_);
            if ($olddom[1] eq $domain){
    	        $flag='true';
                };
        };
close NAMEDBOOT;
die "Domain already exists\n" unless ($flag ne 'true');

#
# insert domain into named.boot (for now)
#

format NAMEDBOOT =
primary    @<<<<<<<<<<<<<<<<<<<<<<<< pri.@<<<<<<<<<<<<<<<<<<<<<<<<<<<
$domain, $ARGV[0]
.

open(NAMEDBOOT,">>$namedboot") || die "Cannot open $namedboot for ouput\n";
write (NAMEDBOOT);
close NAMEDBOOT;

#
# Make a new file.
#
open(NAMEDTEMPLATE,"<$namedtemplate") || die "Cannot open $namedtemplate for output\n";
open(NAMEDFILE,">$namedfile") || die "Cannot open $namedfile for input\n";
while(<NAMEDTEMPLATE>){
	$_ =~ s/template.dom/$domain/g;
	$_ =~ s/193.246.253.12/$ip/g;
      print NAMEDFILE ($_);
   }

close NAMEDTEMPLATE;
close NAMEDFILE;

system ("vi $namedfile");

#
# BIND 8.8.1 named.conf-entry for secondary DNS. 
#
system ("scp -q com:/etc/named.conf $namedconf"); 
open(NAMEDCONF,">>$namedconf") || die "Cannot open $namedconf for ouput\n";
print NAMEDCONF "zone \"$domain\" \{\n        type slave\;\n        ";
print NAMEDCONF "file \"$ARGV[0]\"\;\n        masters \{\n                ";
print NAMEDCONF "193.246.253.10\;\n        \}\;\n\}\;\n\n";
close NAMEDCONF;
system ("scp -q $namedconf com:/etc/named.conf"); 

#
# Evil kludge for BIND 4.9 on com2
# 
system ("scp -q com2:/etc/named.boot $namedconf"); 
open(NAMEDCONF,">>$namedconf") || die "Cannot open $namedconf for ouput\n";

format NAMEDCONF =
secondary   @<<<<<<<<<<<<<<<<<<<< 193.246.253.10    sec.@<<<<<<<<<<<<<<<<<<<<<<
$domain, $domain
.

write (NAMEDCONF);
close NAMEDCONF;
system ("scp -q $namedconf com2:/etc/named.boot"); 

#
# HUP them. 
# 
system ("ps aux |grep named | grep -v grep | grep -v named-xfer | grep -v hupnamed | cut -b 12-16,60-80");
system ("ssh com /opt/bin/hupnamed");
