#!/usr/bin/perl

open (STDERR, ">&STDOUT");
select ((select(STDOUT), $| = 1)[0]); # Synchronize STDOUT
select ((select(STDERR), $| = 1)[0]); # with STDERR

($dns_lib = $0) =~ s:(^|/)[^/]*$::;
($script=$0) =~ s:^.*/([^/]*)$:$1:;	# Get the simple name of this script.

push (@INC, $dns_lib);

require 5.0;
require 'dns_lib.perl';

use Getopt::Long;
$Getopt::Long::autoabbrev=1;    # Allow keyword abbreviations (to uniqueness).
$Getopt::Long::getopt_compat=1; # Allow both "--foo=bar" and "+foo=bar" style.
#$Getopt::Long::option_start='(--|-|\+)';       # [Use the defaults]
#$Getopt::Long::order=$Getopt::Long::REQUIRE_ORDER; # Options can't intermingle
$Getopt::Long::order=$Getopt::Long::PERMUTE;    # or options may intermingle.
$Getopt::Long::ignorecase=1;    # Don't consider case in options.
$Getopt::Long::debug=0;         ### Debug ###

$opt_help = ($#ARGV < 0);

&GetOptions ('help') || die "\nTry: $script --help for more information.\n\n";

if ($opt_help) { 
 
    print <<"EndOfHelp";
Usage: $script [OPTION] host cname
 
  --help   This page.

  host     The fully qualified DNS name of the alias you want to add.
  cname    The canonical name of the host you are making an alias for.
 
EndOfHelp
    
    exit;

} # End if - help

$name = $ARGV[0];

if (! $name) {

    die "\nError.  Try: $script --help for more information.\n\n";

} else {

    $name = &verify_name ($name);

}

$server = $ARGV[1];

if (! $server) {

    die "\nError.  Try: $script --help for more information.\n\n";

} else {

    $server = &verify_name ($server);

}

if ((($x = &verify_zone ($name)) eq 'PRIMARY') || ($x eq 'SEC_W_GLUE')) {

    $host = '@';
    $zone = $name;

} else {

    ($host, $zone) = split ('\.', $name, 2);
    die "Error: Cannot add CNAME for $host to $zone -- no .primary file, use new_primary.\n" unless (($x = &verify_zone ($zone)) eq 'PRIMARY') || ($x eq 'SEC_W_GLUE');

}

&rcs_co ($zone, '.primary');
@file = &read_file ($zone, '.primary');
@recs = &find_record (&build_record ($host, '', '', ''), @file);

if ($#recs >= 0) {

    $output = "\nExisting Record(s)\n$name already has the following records:\n\n";

    foreach $rec (@recs) {

	$output .= "$rec";

    }

} else {

    $record = &build_record ($host, 'CNAME', $server, '');
    ($result, @file) = &add_record ($record, @file);
    
    if ($result eq 'ADDED') {

	&write_file ($zone, '.primary', @file);
	$output = "\nRecord Added: CNAME added for $host in $zone that points at $server\n";
	$change = 1

    } elsif ($result eq 'DUPLICATE') {

	$output = "\nDuplicate Record: Identical CNAME record for $host in $zone\n";

    } else {

	$output = "\nError: This isn't supposed to happen...\n";

    }

}

&rcs_ci ($zone, '.primary', "Script $script: added CNAME record for $host", $change);
print "$output\n";

exit;

