#!/usr/bin/perl 
###############################################################################
my $VERSION='domrom.pl v1.41'; # 10/08/99 Domrom -- DOMain Register Or Modify 
#my $VERSION='domrom.pl v1.4'; # 10/08/99 Domrom -- DOMain Register Or Modify 
# Dale Bewley <dale@bewley.net>, Brian Jared <bjared@monster.com>
#------------------------------------------------------------------------------
#
# v1.4 Dale Bewley <dale@bewley.net> 10/08/1999
#  Added support for reading defaults from configuration file.
#  See http://www.bewley.net/perl/.domromrc
#
# v1.3 Brian Jared <bjared@monster.com> 08/08/1999
#  Added "Organization Options" y'know, *WHO* does this domain belong
#  to? Kind of important for registering a domain...
#
# v1.2 Dale Bewley <dale@bewley.net> 07/21/1999
#  Fixed CGI support. Don't understand why, but if I had 'my' on all the 
#  defaults then CGI mode would not print them on the HTML form!
#
# v1.1 Dale Bewley <dale@bewley.net> 07/09/1999
#  Big overhaul. Support for all fields now. Plan to add CGI support.
# 
# v1.0 Dale Bewley <dale@bewley.net> 06/29/1999
#  modified some defaults and added support for file full of domain names
#  added a little POD to the bottom, but may be better to just add a __DATA__
#  section and stick the internic template down there inside the code.
#
# v0.9 Brian Jared <bjared@monster.com> 06/25/1999
#  slightly modified script to be configurable enough to change any of the
#  default values for requesting MODIFICATIONS or a NEW domain.
#
# v0.8 Dale Bewley <dale@bewley.net> 11/19/1998
#  Simple script to fill in a domain template with some info and mail it...
#
# Todo
#  o Support other auth schemes. Use PGP::Sign module.
#  o Include some nice POD
#  o Make the web form prettier.. cut out the legalese
#  o Store defaults in cookies
#  o Revamp the command line mode a little
#  o Support for other registries... right..
#  o Optionally read defaults from .domromrc file found in ./ or /etc
#
# Here is a patch for Net::Whois $Id: Whois.pm,v 1.13 1999/01/30 03:00:24 chip Exp
# 
#[root@bewley Net]# diff Whois.pm.bak Whois.pm > patch
#[root@bewley Net]# cat patch
#37,38c37,38
#<     print "Record Created:   ", $w->record_created,   "\n";
#<         if $w->record_created;;
#---
#>     print "Record Created:   ", $w->record_created,   "\n"
#>         if $w->record_created;
#220c220,221
#<     } while (@text && ($t eq '' || $t =~ /^registrant:/i));
#---
#>     } while (@text && ($t !~ /^registrant:/i));
#>     $t = shift @text;
#
# Copyright (C) 1999 Dale Bewley, Brian Jared
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# 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.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
###############################################################################

#-----------------------------------------------------------------------------(
# Default configuration values. Most of which, you will want to change.
# You can override these with a ~/.domromrc or /etc/domromrc file.
# if debug is non-zero, no mail will be sent
$DEBUG          = 1;

# default name server info
$NS1_HOST	= '';
$NS1_IP		= '';
$NS2_HOST	= '';
$NS2_IP		= '';
$NS3_HOST	= '';
$NS3_IP		= '';

# default organization info
$ORGANIZATION	= '';
$ORG_STREET	= '';
$ORG_CITY	= '';
$ORG_STATE	= '';
$ORG_ZIP	= '';
$ORG_COUNTRY	= '';

# default contact info
$ADMINISTRATIVE	= '';
$BILLING	= '';
$TECHNICAL	= '';

# default authorization info. password and pgp are not yet supported
$AUTH_SCHEME	= 'MAIL-FROM';

# default email headers
$FROM		= '';
$TO		= 'hostmaster@internic.net';
$CC		= 'dale@bewley.net';

# default registration mode (add, delete, modify)
$MODE		= 'MODIFY';

# internic domain template is embeded below so leave this blank
# otherwise you may put it in a file which you name here
$TEMPLATE       = '';

# These options must be changed here and should not be in the rc file.
#
# items not adjustable from config file
$DATE 		= localtime();
$MAIL 		= '/usr/sbin/sendmail -oi -t';

# list in the valid configs in order of preference. first one found is used
@VALID_CONFIGS  = qw( ./.domromrc /etc/domromrc );

#-----------------------------------------------------------------------------)

#-----------------------------------------------------------------------------(
# main program
#
# for determining availability of domain
# this version ---> $Id: Whois.pm,v 1.13 1999/01/30 03:00:24 chip Exp
# is broked. If Chip hasn't fixed it, try the patch in the comments above
use Net::Whois;


# find a valid config file if one exists. 
foreach $config (@VALID_CONFIGS) {
  if (-e $config) {
    print "reading configuration from $config\n" if $DEBUG;
    &loadConfig($config);
    &loadTemplate();
    last; # don't look for any other config files
  }
}


if ($0 =~ m/\.cgi$/) {
  # name the script domrom.cgi and it runs in web mode
  &runWebMode;
} else {
  # otherwise run in command line mode
  &runCLIMode;
}
exit;
#----------------------------------------------------------------------------)


#----------------------------------------------------------------------------)
sub loadConfig {
  my $config = shift;
  my $name = '';
  my $val = '';

  open (CONFIG, "<$config") || die "Config file $config is not readable. $!";
  while (<CONFIG>) {
    m/^#|^\s*$/ && next; # skip comments and blank lines
    chomp;
    ($name, $val) = split(/\s*=\s*/,$_,2); # ignore spaces around = sign
    $name =~ s/[a-z]/[A-Z]/g;
    $name =~ m/MAIL/ && next;
    $$name = $val;
    print "$name = $$name\n" if $DEBUG;
  }
}
#----------------------------------------------------------------------------)

#----------------------------------------------------------------------------)
sub loadTemplate {
  if ($TEMPLATE) {
    if (-e $TEMPLATE) {
      open (TEMPLATE, "<$TEMPLATE") || die "Can't read template $TEMPLATE $!";
      $TEMPLATE = join('',<TEMPLATE>);
    }
  } else {
    # else if no file contains a template then let's read the template
    # from the __DATA__ section below
    $TEMPLATE = join('',<DATA>);
  }
}
#----------------------------------------------------------------------------)

#----------------------------------------------------------------------------(
sub runWebMode {
  use CGI;
  my $q = new CGI;
  print $q->header();
  my %fields = ();

  print "<h1>Domain Register or Modify</h1>\n<hr>\n";


  # fill up a hash with the values from the form. map is your friend
  map { $fields{$_} = $q->param($_) } $q->param();

  if (! $q->param('DOMAIN')) {
    #
    # we must have a domain to work with.
    print $q->startform(-method=>'GET');
    print "<b>Enter domain:</b> <input type=text name=\"DOMAIN\"><br>\n";
    print $q->radio_group(-name=>'MODE',
			  -values=>['NEW','MODIFY'],
			  -default=>'NEW');
    print "<br>\n" . $q->reset();
    print $q->submit(-name=>'submit', -value=>'Next');
    print $q->endform;
  } elsif ($q->param(web_mode) eq "mail") {
    #
    # user has finished the form, so let's mail it to the registry
    print "<b>I just sent the following email</b><p>\n";
    
    # both work, but the second seems sexier to me. i think.
    #$TEMPLATE =~ s/\${([^\}]+)}/$fields{$1} ? $fields{$1} : ${$1} /gse;
    $TEMPLATE =~ s/\${([^\}]+)}/ $fields{$1} ||= ${$1} /gse; 
    print "<pre>\n$TEMPLATE\n</pre>";
  
    unless ($DEBUG) {
      open (MAIL, "|$MAIL") || die "Can't pipe to $MAIL $!";
      print MAIL "X-Version: $VERSION\n";
      print MAIL $TEMPLATE;
      close MAIL;
    }
    print "<a href=\"" . $q->url . "\">Register another domain?</a>\n";
  } else {
    #
    # User wants to register a new domain, make sure the domain is available
    if ($q->param('MODE') eq 'NEW') {
      my $w = new Net::Whois::Domain $q->param('DOMAIN');
      if ($w) {
	print "<h2>Sorry!</h2>\n<h3><a href='http://www.", lc($w->domain), "'>";
	print $w->domain, "</a> is already registered to..</h3>";
	print $w->name, "<br>", map { "    $_,\n" } $w->address;
	print "<br>since ", $w->record_created if ($w->record_created);
	# user tried to register an existing domain, so let's bail
	return;
      } 
    }

    # user is updating their domain or registering a new available domain
    # so, let's present the form to them
    $TEMPLATE =~ s/\${([^\}]+)}/$fields{$1} ?  
      $q->textfield(-name=>"$1", -default=>"$fields{$1}") :
	$q->textfield(-name=>"$1", -default=>"${$1}")/gse;

    print $q->startform;
    print "<pre>\n$TEMPLATE\n</pre>";
    print $q->reset();
    print $q->submit(-name=>'submit', -value=>'Mail to NIC');
    print $q->hidden(-name=>'web_mode', -value=>'mail');
    print $q->endform . "</pre>\n";
  }

  # print a tagline
  print "<br clear=all><hr><em><a href='http://www.bewley.net/perl/'>$VERSION</a></em>\n";
}
#----------------------------------------------------------------------------)

#----------------------------------------------------------------------------(
sub printDebuggingInfo {
  print "<!-- Debugging info:\n User provided values:\n";
  foreach (sort keys %fields) {
    print "\t<br>$_ = $fields{$_}\n";
  }
  print "\n-->";
}
#----------------------------------------------------------------------------)

#----------------------------------------------------------------------------(
sub runCLIMode {
  use Getopt::Long;

  # Checking command-line options for values to override the defaults
  my @MyOptions = (
		   "help|h",     # Shows Help / Usage
		   "new|n",      # Designates request for "New" the domain
		   "update|u",   # Designates request to "Update" the domain

		   "org_n=s",    # Organization Name
		   "org_a=s",    # Organization Address
		   "org_ci=s",   # Organization City
		   "org_s=s",    # Organization State
		   "org_z=s",    # Organization Postal Code (Zip Code)
		   "org_co=s",   # Organization Country

		   "ns_host1=s", # NS1 - Host Name
		   "ns_ip1=s",   # NS1 - IP Address
		   "ns_host2=s", # NS2 - Host Name
		   "ns_ip2=s",   # NS2 - IP Address

		   "tech|t=s",   # WHOIS ID - Technical Contact
		   "bill|b=s",   # WHOIS ID - Billing Contact
		   "admin|a=s",  # WHOIS ID - Administrative Contact

		   "from|f=s",   # EMAIL - From:
		   "to=s",       # EMAIL - To:
		   "cc|c=s",     # EMAIL - Cc:

		   "domain|d=s", # The Domain(s) to register or modify
		  );
  GetOptions(@MyOptions);
  
  if ($opt_help) {
    $DEBUG=1;
    show_usage();
    exit;
  }
  
  if ($opt_domain) {	
  # assuming we could specify more than one domain arg on cmd line...
    foreach $domain_arg (split(/\s+/,$opt_domain)) {	
      if ( -e $domain_arg ) {
	# if arg is a filename
	open(DOMAIN_LIST,"<$domain_arg") || 
	  warn ("Can't read $domain_arg $!");
	# add all domain names from file
	push(@domains,<DOMAIN_LIST>);
      } else {
	# add to list of domains
	push(@domains,$domain_arg); 
      }
    }
    
    if ($opt_debug) { $DEBUG = '1'; }
    if ($opt_update) { $MODE = 'MODIFY'; }
    if ($opt_new) { $MODE = 'NEW'; }

    if ($opt_org_n)  { $ORGANIZATION = $opt_org_n; }
    if ($opt_org_a)  { $ORG_STREET   = $opt_org_a; }
    if ($opt_org_ci) { $ORG_CITY     = $opt_org_ci; }
    if ($opt_org_s)  { $ORG_STATE    = $opt_org_s; }
    if ($opt_org_z)  { $ORG_ZIP      = $opt_org_z; }
    if ($opt_org_co) { $ORG_COUNTRY  = $opt_org_co; }

    if ($opt_ns_host1) { $NS1_HOST = $opt_ns_host1; }
    if ($opt_ns_ip1) { $NS1_IP = $opt_ns_ip1; }
    if ($opt_ns_host2) { $NS2_HOST = $opt_ns_host2; }
    if ($opt_ns_ip2) { $NS2_IP = $opt_ns_ip2; }
    if ($opt_tech) { $TECHNICAL = $opt_tech; }
    if ($opt_bill) { $BILLING = $opt_bill; }
    if ($opt_admin) { $ADMINISTRATIVE = $opt_admin; }
    if ($opt_from) { $FROM = $opt_from; }
    if ($opt_to) { $TO = $opt_to; }
    if ($opt_cc) { $CC = $opt_cc; }
  } else {
    show_usage();
    exit;
  }
  
  foreach $DOMAIN (@domains) {
    chomp $DOMAIN;	# remove newline in case of file list
    
    $FILLED_TEMPLATE = $TEMPLATE;
    $FILLED_TEMPLATE =~ s/(\${[^\}]+})/eval $1/eg;
    if ($DEBUG) {
	print $FILLED_TEMPLATE;
    } else {
      print "mailing $DOMAIN\n";
      open (MAIL, "|$MAIL") || die "Can't pipe to $MAIL $!";
      print MAIL $FILLED_TEMPLATE;
    }
  }
}
#----------------------------------------------------------------------------)


#----------------------------------------------------------------------------(
sub show_usage {
	print STDERR <<"E_O_HELP";
$VERSION -- Domain Register Or Modify 
A PERL script to modify or register domains with INTERNIC quickly and 
efficiently.
By: Dale Bewley <dale\@bewley.net> and Brian Jared <bjared\@monster.com>

Usage: ./domrom.pl [Option|Switch]... -d "[host host ...]"

Switches:
   -h,-help               This Help Documentation
   -n,-new                Designates a NEW domain 
   -u,-update             Designates UPDATING a domain (Default)

Organization Options:
   -org_n                 Organization Using Domain Name
   -org_a                 Street Address
   -org_ci                City
   -org_s                 State
   -org_z                 Postal Code (Zip Code)
   -org_co                Country

Internic Options:
   -d "[host1 host2 ...]" Domain to Request or Modify. (Required)
   -ns_host1 [host]       Hostname of Primary DNS [$NS1_HOST]
   -ns_ip1 [addr]         IP Address of Primary DNS [$NS1_IP]
   -ns_host2 [host]       Hostname of Slave DNS [$NS2_HOST]
   -ns_ip2 [addr]         IP Address of Slave DNS [$NS2_IP]
   -t,-tech [handle]      Technical Contact (WHOIS handle) [$TECHNICAL]
   -b,-bill [handle]      Billing Contact (WHOIS handle) [$BILLING]
   -a,-admin [handle]     Billing Contact (WHOIS handle) [$ADMINISTRATIVE]

Mail Options:
   -to [email_addr]       Sets 'To:' header. Useful For Debugging. [$TO]
   -from [email_addr]     Sets 'From:' header. [$FROM]
   -cc [email_addr]       Sets 'Cc:' header. [$CC]

E_O_HELP
}
#----------------------------------------------------------------------------)

#----------------------------------------------------------------------------(
=pod

=head1 NAME

domrom.pl  - DOMROM -- DOMain Register Or Modify

=head1 SYNOPSIS

 domrom.pl [Option|Switch] -d <domain name or file of domain names>

=head1 DESCRIPTION

A PERL script to register or modify domains via INTERNIC quickly and 
efficiently. Run it from the command line or rename it to domrom.cgi
and it will instantly become a handy web app. Requires Net::Whois, and CGI.pm.

Set default values for your site in the top of the script, override them
from the command line, configuration file, or web form.

=cut
#----------------------------------------------------------------------------)




__DATA__
From: ${FROM}
Date: ${DATE}
To: ${TO}
Cc: ${CC}
Subject: ${MODE} DOMAIN ${DOMAIN}

******* Please DO NOT REMOVE Version Number or Sections A-Q ********

Domain Version Number: 4.0

******* Email completed agreement to hostmaster@internic.net *******

        NETWORK SOLUTIONS, INC.

        DOMAIN NAME REGISTRATION AGREEMENT


A.      Introduction. This domain name registration agreement
("Registration Agreement") is submitted to NETWORK SOLUTIONS, INC.
("NSI") for the purpose of applying for and registering a domain name
on the Internet. If this Registration Agreement is accepted by NSI,
and a domain name is registered in NSI's domain name database and
assigned to the Registrant, Registrant ("Registrant") agrees to be
bound by the terms of this Registration Agreement and the terms of
NSI's Domain Name Dispute Policy ("Dispute Policy") which is
incorporated herein by reference and made a part of this Registration
Agreement. This Registration Agreement shall be accepted at the
offices of NSI. 

B. Fees and Payments.

1) Registration or renewal (re-registration) date through March 31, 1998:
Registrant agrees to pay a registration fee of One Hundred United States
Dollars (US) as consideration for the registration of each new domain
name or Fifty United States Dollars (US) to renew (re-register) an
existing registration.
2) Registration or renewal date on and after April 1, 1998:  Registrant
agrees to pay a registration fee of Seventy United States Dollars (US) 
 as consideration for the registration of each new domain name or the 
applicable renewal (re-registration) fee (currently Thirty-Five United 
States Dollars (US)) at the time of renewal (re-registration).
3) Period of Service:  The non-refundable fee covers a period of two (2)
years for each new registration, and one (1) year for each renewal, 
and includes any permitted modification(s) to the domain name record
during the covered period.
4) Payment:  Payment is due to Network Solutions within thirty (30) 
days from the date of the invoice.

C.      Dispute Policy. Registrant agrees, as a condition to
submitting this Registration Agreement, and if the Registration
Agreement is accepted by NSI, that the Registrant shall be bound by
NSI's current Dispute Policy. The current version of the Dispute
Policy may be found at the InterNIC Registration Services web site:
"http://www.netsol.com/rs/dispute-policy.html". 

D.      Dispute Policy Changes or Modifications. Registrant agrees
that NSI, in its sole discretion, may change or modify the Dispute
Policy, incorporated by reference herein, at any time. Registrant
agrees that Registrant's maintaining the registration of a domain name
after changes or modifications to the Dispute Policy become effective
constitutes Registrant's continued acceptance of these changes or
modifications. Registrant agrees that if Registrant considers any such
changes or modifications to be unacceptable, Registrant may request
that the domain name be deleted from the domain name database. 

E.      Disputes. Registrant agrees that, if the registration of its
domain name is challenged by any third party, the Registrant will be
subject to the provisions specified in the Dispute Policy. 

F.      Agents. Registrant agrees that if this Registration Agreement
is completed by an agent for the Registrant, such as an ISP or
Administrative Contact/Agent, the Registrant is nonetheless bound as a
principal by all terms and conditions herein, including the Dispute
Policy. 

G.      Limitation of Liability. Registrant agrees that NSI shall have
no liability to the Registrant for any loss Registrant may incur in
connection with NSI's processing of this Registration Agreement, in
connection with NSI's processing of any authorized modification to the
domain name's record during the covered period, as a result of the
Registrant's ISP's failure to pay either the initial registration fee
or renewal fee, or as a result of the application of the provisions of
the Dispute Policy. Registrant agrees that in no event shall the
maximum liability of NSI under this Agreement for any matter exceed
Five Hundred United States Dollars (US). 

H.      Indemnity. Registrant agrees, in the event the Registration
Agreement is accepted by NSI and a subsequent dispute arises with any
third party, to indemnify and hold NSI harmless pursuant to the terms
and conditions contained in the Dispute Policy. 

I.      Breach. Registrant agrees that failure to abide by any
provision of this Registration Agreement or the Dispute Policy may be
considered by NSI to be a material breach and that NSI may provide a
written notice, describing the breach, to the Registrant. If, within
thirty (30) days of the date of mailing such notice, the Registrant
fails to provide evidence, which is reasonably satisfactory to NSI,
that it has not breached its obligations, then NSI may delete
Registrant's registration of the domain name. Any such breach by a
Registrant shall not be deemed to be excused simply because NSI did
not act earlier in response to that, or any other, breach by the
Registrant. 

J.      No Guaranty. Registrant agrees that, by registration of a
domain name, such registration does not confer immunity from objection
to either the registration or use of the domain name. 

K.      Warranty. Registrant warrants by submitting this Registration
Agreement that, to the best of Registrant's knowledge and belief, the
information submitted herein is true and correct, and that any future
changes to this information will be provided to NSI in a timely manner
according to the domain name modification procedures in place at that
time. Breach of this warranty will constitute a material breach. 

L.      Revocation. Registrant agrees that NSI may delete a
Registrant's domain name if this Registration Agreement, or subsequent
modification(s) thereto, contains false or misleading information, or
conceals or omits any information NSI would likely consider material
to its decision to approve this Registration Agreement. 

M.      Right of Refusal. NSI, in its sole discretion, reserves the
right to refuse to approve the Registration Agreement for any
Registrant. Registrant agrees that the submission of this Registration
Agreement does not obligate NSI to accept this Registration Agreement.
Registrant agrees that NSI shall not be liable for loss or damages
that may result from NSI's refusal to accept this Registration
Agreement. 

N.      Severability. Registrant agrees that the terms of this
Registration Agreement are severable. If any term or provision is
declared invalid, it shall not affect the remaining terms or
provisions which shall continue to be binding. 

O.      Entirety. Registrant agrees that this Registration Agreement
and the Dispute Policy is the complete and exclusive agreement between
Registrant and NSI regarding the registration of Registrant's domain
name. This Registration Agreement and the Dispute Policy supersede all
prior agreements and understandings, whether established by custom,
practice, policy, or precedent. 

P.      Governing Law. Registrant agrees that this Registration
Agreement shall be governed in all respects by and construed in
accordance with the laws of the Commonwealth of Virginia, United
States of America. By submitting this Registration Agreement,
Registrant consents to the exclusive jurisdiction and venue of the
United States District Court for the Eastern District of Virginia,
Alexandria Division. If there is no jurisdiction in the United States
District Court for the Eastern District of Virginia, Alexandria
Division, then jurisdiction shall be in the Circuit Court of Fairfax
County, Fairfax, Virginia. 

Q.      This is Domain Name Registration Agreement Version
Number 4.0. This Registration Agreement is only for registrations
under top-level domains: COM, ORG, NET, and EDU. By completing
and submitting this Registration Agreement for consideration and
acceptance by NSI, the Registrant agrees that he/she has read and
agrees to be bound by A through P above. 

Authorization
0a. (N)ew (M)odify (D)elete.........: ${MODE}
0b. Auth Scheme.....................: ${AUTH_SCHEME}
0c. Auth Info.......................: ${AUTH_INFO}

1.  Comments........................: ${COMMENT}

2.  Complete Domain Name............: ${DOMAIN}

 Organization Using Domain Name
3a. Organization Name...............: ${ORGANIZATION}
3b. Street Address..................: ${ORG_STREET}
3c. City............................: ${ORG_CITY}
3d. State...........................: ${ORG_STATE}
3e. Postal Code.....................: ${ORG_ZIP}
3f. Country.........................: ${ORG_COUNTRY}

Administrative Contact
4a. NIC Handle (if known)...........: ${ADMINISTRATIVE}
4b. (I)ndividual (R)ole?............: ${ADMINISTRATIVE_4B}
4c. Name (Last, First)..............: ${ADMINISTRATIVE_4C}
4d. Organization Name...............: ${ADMINISTRATIVE_4D}
4e. Street Address..................: ${ADMINISTRATIVE_4E}
4f. City............................: ${ADMINISTRATIVE_4F}
4g. State...........................: ${ADMINISTRATIVE_4G}
4h. Postal Code.....................: ${ADMINISTRATIVE_4H}
4i. Country.........................: ${ADMINISTRATIVE_4I}
4j. Phone Number....................: ${ADMINISTRATIVE_4J}
4k. Fax Number......................: ${ADMINISTRATIVE_4K}
4l. E-Mailbox.......................: ${ADMINISTRATIVE_4L}

Technical Contact
5a. NIC Handle (if known)...........: ${TECHNICAL}
5b. (I)ndividual (R)ole?............: ${TECHNICAL_5B}
5c. Name(Last, First)...............: ${TECHNICAL_5C}
5d. Organization Name...............: ${TECHNICAL_5D}
5e. Street Address..................: ${TECHNICAL_5E}
5f. City............................: ${TECHNICAL_5F}
5g. State...........................: ${TECHNICAL_5G}
5h. Postal Code.....................: ${TECHNICAL_5H}
5i. Country.........................: ${TECHNICAL_5I}
5j. Phone Number....................: ${TECHNICAL_5J}
5k. Fax Number......................: ${TECHNICAL_5K}
5l. E-Mailbox.......................: ${TECHNICAL_5L}

Billing Contact
6a. NIC Handle (if known)...........: ${BILLING}
6b. (I)ndividual (R)ole?............: ${BILLING_6B}
6c. Name (Last, First)..............: ${BILLING_6C}
6d. Organization Name...............: ${BILLING_6D}
6e. Street Address..................: ${BILLING_6E}
6f. City............................: ${BILLING_6F}
6g. State...........................: ${BILLING_6G}
6h. Postal Code.....................: ${BILLING_6H}
6i. Country.........................: ${BILLING_6I}
6j. Phone Number....................: ${BILLING_6J}
6k. Fax Number......................: ${BILLING_6K}
6l. E-Mailbox.......................: ${BILLING_6L}

Prime Name Server
7a. Primary Server Hostname.........: ${NS1_HOST}
7b. Primary Server Netaddress.......: ${NS1_IP}

Secondary Name Server(s)
8a. Secondary Server Hostname.......: ${NS2_HOST}
8b. Secondary Server Netaddress.....: ${NS2_IP}
8a. Secondary Server Hostname.......: ${NS3_HOST}
8b. Secondary Server Netaddress.....: ${NS3_IP}

END OF AGREEMENT


For instructions, please refer to:
"http://rs.internic.net/help/instructions.txt"

