#!/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', 'f') || die "\nTry: $script --help for more information.\n\n";

if ($opt_help) { 
 
    print <<"EndOfHelp";
Usage: $script [OPTION] host txt
 
  --help   This page.
  --f      Force the addition of the record overriding warnings.

  host     The fully qualified DNS name or IP address you want to add
           the TXT record for.
  txt      The text of the TXT record.  Make sure to quote as needed.
 
EndOfHelp
    
    exit;

} # End if - help

$name = $ARGV[0];

if (! $name) {

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

} else {

    $name = &zone_or_subnet ($name);

}

$txt = $ARGV[1];

if (! $txt) {

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

}

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 TXT 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, 'TXT', '', ''), @file);

if (($#recs >= 0) && (! defined ($opt_f))) {

    $output = "\nExisting TXT Record: $name already has the following TXT records:\n\n";
    
    foreach $rec (@recs) {

	$output .= "$rec";

    }

    $output .= "\nUse the --f option to add new TXT record.\n";

} else {

    $record = &build_record ($host, 'TXT', '"'.$txt.'"', '');
    ($result, @file) = &add_record ($record, @file);

    if ($result eq 'ADDED') {

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

    } elsif ($result eq 'DUPLICATE') {

	$output = "\nDuplicate Record: $host already has an identical TXT RR in $zone\n";

    } else {

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

    }

}

&rcs_ci ($zone, '.primary', "Script $script: added TXT record for $host", $change);

print "$output\n";

exit;

