DNS Boss Documentation 
 
 
 
 
 
Table Of Contents 
_________________ 
 
 
15 MINUTE CHEAT SHEET
README
ABOUT DNS BOSS
ADD SPECIAL BIND OPTIONS TO ETC NAMED CONF
ALWAYS COPY HOSTS DOMAIN
ALWAYS COPY HOSTS FILE
APPEND DB DOMAIN
APPEND NAMED BOOT
APPEND SPECIAL BIND CONFIGURATIONS TO ETC NAMED CONF
ARCHIVE THE CURRENT STATE OF THE DNS BOSS SYSTEM
BIND VERSION 8 X AND 4 X
BIND VERSIONS
COMMON ERRORS
CONVERT PRE-EXISTING DNS DATA INTO DNSBOSS FORMAT DATA
CONVERT TO CACHING ONLY
CONVERT TO SECONDARY
EDIT HOSTS
GENERIC EDITOR
HOW TO DO A CNAME
HOW TO DO COMMAND LINE UPDATES WITHOUT THE GUI
HOW TO GET STARTED
HOW TO SETUP A DNS SECONDARY
HOW TO USE WEB USER INTERFACE
IP MANAGEMENT
JAVA API
LICENSE
LOAD DEFAULT DNS DOMAIN
LOAD DNS DOMAIN
NEVER COPY HOSTS FILE
NO DNS
OPEN AND EXTENSIBLE
PLATFORMS
REFRESH RETRY EXPIRE TTL
REMOTELY MAINTAIN ANOTHER MACHINE THAT HAS BEEN INSTALLED WITH DNS BOSS
REMOVE ALL DNS DATABASES BUT NOT CONFIGURATION DATA
REMOVE DNS DOMAIN COMPLETELY
REPLICATION
REVERT TO THE FOLLOWING AVAILABLE DNS BOSS SYSTEM ARCHIVE
ROLL BACK TO THE PREVIOUS STATE OF THE HOSTS FILE FOR THIS DOMAIN
SAVE SETTINGS
SET DEFAULT DNS NAME AND IP FOR NSLOOKUP SERVER
SET THE PATH TO THE NAMED EXECUTABLE
SKIP ALL DNS RECORDS FOR THIS HOST
SKIP DNS RECORD
SKIP MX
SPINNING RED BALL
SUGGESTED SOLARIS CONFIGURATION FOR LARGE SITES
UPDATE ALL DOMAINS
UPDATE THIS DOMAIN
USE CUSTOM DB CACHE FILE
USE STANDARD DB CACHE FILE
USER INTERFACES
 
 
 
 
 
 
15 MINUTE CHEAT SHEET
 




                  DNS BOSS CHEAT SHEET   
   How to get your DNS primary up in about 15 minutes


     The following is a condensed cheat sheet/cook 
book showing how to build a DNS primary with DNS Boss 
in about the shortest amount of time possible.  In most 
cases, you should be able to get your DNS primary up 
in about 15 minutes.  

* It is suggested that you try this out on a 
  non-production machine first, then do it on a 
  production machine.

Installation for Solaris
________________________
Download as root and install it:
# netscape http://www.dnsboss.com/register.shtml &
# uncompress *.Z
# tar xvf *.tar
# ls
DNSBoss
# pkgadd -d .
y
y

Installation for Linux
______________________
# netscape http://www.dnsboss.com/register.shtml &
# gunzip *.gz 
# tar xvf *.tar
# ./install.sh 

To run it for Solaris or Linux
______________________________
As root, run it:
# /opt/DNSBoss/bin/dnsboss

Setup your DNS domain
_____________________
* Preparation.
For now, you can move the resolve.conf file out of 
the way:
# mv /etc/resolv.conf /etc/resolv.conf-
# vi /etc/nsswitch.conf
hosts:      files dns

* Add your site info into DNS Boss GUI:
On the main GUI, put in all of the site info:
Enter DNS domain                  (Example:  
                                   bobspizza.com).
Enter primary name (this machine) (Example:  
                                   ns1.bobspizza.com).
Enter email contact               (Example:  
                                   janedoe.bobspizza.com).
Leave refresh, retry, expire, and minimum TTL at 
their defaults.
Enter mail exchanger 1-4,         (Example:  
                                   mail.bobspizza.com).
                                  delete unused mail 
                                  exchangers
Delete secondary 1-4 for now.
Select:  "Save settings" button.
Select:  "Edit hosts", and add some IP's and 
i         unqualified host names
like the following example:
202.190.50.59     casper
Select:  "Update this domain" button.


* Verify that it worked.
# nslookup casper.bobspizza.com.

Optional crontab entry to update DNS every 30 minutes: 
______________________________________________________
# csh
# setenv EDITOR /usr/ucb/vi
# crontab -e
1,30 * * * * /opt/DNSBoss/bin/dnsboss_commandline > /dev/null 2>&1


You are done.








 
 
________________________________________________________________
 
 
README
 





              DNS Boss README


Description:
____________
DNS Boss is a GUI tool for installing and maintaining 
DNS on the Solaris SPARC, Solaris x86, or Linux platforms.  
With DNS Boss you can take care of your DNS needs 
by creating either a DNS Primary, a DNS Secondary, or 
a DNS Caching-only server.  DNS Boss is a huge time 
saving tool, it is easy to install, and it is very 
easy to use!  To get the DNS for your site up, you 
do not need to do anything other than install your 
machine, and then install and run DNS Boss.  After 
you run DNS Boss on the machine running your DNS 
server, your DNS data will becomes live, and other 
DNS clients can start getting their DNS requests 
answered from your new DNS server.  Once you create 
your DNS Primary with DNS Boss, you can easily build
DNS Secondaries and Caching-only servers if you want, 
by installing and running the same DNS Boss software 
on those machines.  DNS Boss has a standard "X" GUI,
a Web GUI, a command-line interface, and an open 
Java API if you wish to do automated report writting, 
or if you wish to do custom integration.  DNS Boss
has the capability to support multiple users 
including limiting access to certain DNS domains and
locking mechanisms.

30 day free trial:
__________________
DNS Boss is distributed with a 30 day free trial for
the DNS Boss software running on your DNS Primary.  
31 days after installation, a license to use the 
software must be purchased, or the software will not
allow you to do updates.  The same DNS Boss software 
can also be used to create your DNS Secondaries, or 
DNS Caching-only servers for free.  To purchase a 
license for your DNS Primary, see 
http://www.dnsboss.com, or send email to 
support@dnsboss.com.

Solaris installation example:
_____________________________
# mkdir /export/home1/tmp_dir 
# cp DNSBoss_SPARC_Solaris.tar.Z /export/home1/tmp_dir
# cd /export/home1/tmp_dir
# /bin/uncompress DNSBoss_SPARC_Solaris.tar.Z
# /bin/tar xvf DNSBoss_SPARC_Solaris.tar
# /usr/sbin/pkgadd -d .
# cd ../ ; rm -rf /export/home1/tmp_dir

Linux Installation example:
___________________________
# mkdir /home/dnsboss
# mv DNSBoss_Linux.tar.Z /home/dnsboss
# cd /home/dnsboss
# /bin/gunzip DNSBoss_Linux.tar.gz
# /bin/tar xvf DNSBoss_Linux.tar
# ./install.sh

To run it:  
__________
Solaris, or Linux:
__________________
This is the normal "X" GUI.
# /opt/DNSBoss/bin/dnsboss

To convert your pre-existing DNS data:
______________________________________
# cp /etc/named.conf /etc/named.conf-orig
or
# cp /etc/named.boot /etc/named.boot-orig
Bring up the "X" GUI and set the BIND version to 
your version of BIND.     
# /opt/DNSBoss/bin/dnsboss
Then select under the "Advanced" menu:
"Convert pre-existing DNS data into DNS Boss format DNS data"
Then select the button:  "Load DNS domain" to 
navigate between DNS domains.  Select "Update 
all domains" once.  Select "Edit hosts" to add 
hosts, then you will need to select 
"Update this domain" every time a change is made.

Example of how to use other BIND version:
_________________________________________
Go to the Advanced menu, and select:
Set the path to the named executable

Other command line options:
___________________________
Shows all command line options. 
# /opt/DNSBoss/bin/dnsboss_commandline  -help  

Builds DNS for all DNS domains and restarts BIND.
# /opt/DNSBoss/bin/dnsboss_commandline

Builds DNS for all DNS domains and restarts BIND.
# /opt/DNSBoss/bin/dnsboss_commandline  -autobuild_all_domains

Builds DNS for one DNS domain and restarts BIND.
# /opt/DNSBoss/bin/dnsboss_commandline  -autobuild       your_domain.com

Builds DNS for all DNS domains but do not restart BIND.
# /opt/DNSBoss/bin/dnsboss_commandline  -autobuild_no_restart  your_domain.com

Add a DNS domain.
# /opt/DNSBoss/bin/dnsboss_commandline  -add_domain      your_domain.com

Delete a DNS domain.
# /opt/DNSBoss/bin/dnsboss_commandline  -delete_domain   your_domain.com

Convert a pre-existing domain.  Requires existence of /etc/named.conf-orig or
/etc/named.boot-orig containing your pre-existing DNS data.
# /opt/DNSBoss/bin/dnsboss_commandline  -converter

Add an IP and a name to a DNS domain.
# /opt/DNSBoss/bin/dnsboss_commandline  -add_ip_to_domain  your_domain.com  subnet  ip  name

Add a host to the next available IP for DNS domain on subnet.
# /opt/DNSBoss/bin/dnsboss_commandline  -add_host_to_next_available_ip  name your_domain.com  subnet  true

Remove an entry.
# /opt/DNSBoss/bin/dnsboss_commandline  -remove_host     name  your_domain.com

Check if an IP exists in any DNS domain.
# /opt/DNSBoss/bin/dnsboss_commandline  -ip_exists       ip

Check if a name exists in DNS domain.
# /opt/DNSBoss/bin/dnsboss_commandline  -name_exists_in_domain   name  yourdomain.com

List all names in a DNS domain.
# /opt/DNSBoss/bin/dnsboss_commandline  -list_names_in_domain   yourdomain.com

List all IP's in a DNS domain.
# /opt/DNSBoss/bin/dnsboss_commandline  -list_ips_in_domain     yourdomain.com
   
List all subnets in a DNS domain.
# /opt/DNSBoss/bin/dnsboss_commandline  -list_subnets_in_domain     yourdomain.com

List duplicate names in a DNS domain.
# /opt/DNSBoss/bin/dnsboss_commandline  -list_duplicate_names_in_domain    yourdomain.com

List duplicate CNAME's in a DNS domain.
# /opt/DNSBoss/bin/dnsboss_commandline  -list_duplicate_cnames_in_domain   yourdomain.com

List all IP's in all DNS domains.
# /opt/DNSBoss/bin/dnsboss_commandline  -list_ips_in_all_domains  

List all subnets in all DNS domains.
# /opt/DNSBoss/bin/dnsboss_commandline  -list_subnets_in_all_domains

List duplicate IP's in all DNS domains.
# /opt/DNSBoss/bin/dnsboss_commandline  -list_duplicate_ips_in_all_domains 

List duplicate IP's, names, and CNAME's in all DNS domains.
# /opt/DNSBoss/bin/dnsboss_commandline  -list_duplicate_ips_names_and_cnames_in_all_domains

List percent fill of IP address space in all DNS domains.
# /opt/DNSBoss/bin/dnsboss_commandline  -list_percent_fill_of_ip_address_space_in_all_domains 

List the total unique DNS names to calculate license pricing.
# /opt/DNSBoss/bin/dnsboss_commandline  -license 

Lock the application so nobody else can do updates.  
Available only on Unix OS's.
# /opt/DNSBoss/bin/lockdnboss 


To uninstall for Solaris or Linux:
__________________________________
# /opt/DNSBoss/bin/uninstall_dnsboss

To start Web UI on Solaris or Linux:
____________________________________
# /opt/DNSBoss/bin/S99dnsbossweb start
Allow user jane_doe access to all DNS domains.
# vi /opt/DNSBoss/etc/password.txt
jane_doe:secret123:*
Make sure the license agreement is accepted.
# vi /opt/DNSBoss/etc/server.properties
la=true
Start a Web browser and point it to port 8080 of 
the DNS primary running DNS Boss.  Make sure
to use https, and not http when typing in
the URL.  Here is an example:
# netscape https://192.168.15.10:8080 
To navigate between DNS domains, just click 
the 'Load DNS domain' button.

Unix crontab example for automated 'hands off' DNS builds:
__________________________________________________________
Crontab Example for Solaris to update DNS every 30 minutes:
godzilla# setenv EDITOR /usr/ucb/vi
godzilla# crontab -e
1,30 * * * * /opt/DNSBoss/bin/dnsboss_commandline > /dev/null 2>&1

Open Java API for custom DNS automation:
________________________________________
# cd /opt/DNSBoss/lib/tools/java_api
# ./api_demo

Website/documentation:
______________________
http://www.dnsboss.com

Support, bugs, requests for permanent licenses:
_______________________________________________
support@dnsboss.com





 
 
________________________________________________________________
 
 
ABOUT DNS BOSS
 





About DNS Boss 

     DNS Boss Version 2.4.

     Copyright 1996-2004 DNS Boss Inc.  
     All rights reserved.

     http://www.dnsboss.com





 
 
________________________________________________________________
 
 
ADD SPECIAL BIND OPTIONS TO ETC NAMED CONF
 





Help on:  Add special BIND 'options' to 
/etc/named.conf

     It is not generally necessary to add anything in 
this window.  DNS Boss should create everything that 
is need for most cases.  However, if you want to 
configure some of the more sophisticated "options" of 
DNS BIND, the window that comes up when you select:
"Add special BIND 'options' to /etc/named.conf" is 
where you do it.  For example if there was a need to 
to change the dump-file, statistics-file, or pid-file 
defaults, they could be changed by uncommenting the 
following lines:

dump-file       "/var/opt/DNSBoss/statistics/named_dump.db";
statistics-file "/var/opt/DNSBoss/statistics/named.stats";
pid-file        "/var/opt/DNSBoss/statistics/server1.pid";

     If you are not certain about what you are 
adding in the 'options' section, then it is suggested 
to not add anything.  Your DNS should work fine 
without adding any of these sophisticated "options".



 
 
________________________________________________________________
 
 
ALWAYS COPY HOSTS DOMAIN
 





Always copy hosts file from this domain

     Normally DNS Boss keeps a separate hosts file for 
each domain.
     In some cases there may be a need to copy all 
of the hosts from one DNS domain and always put them 
into another DNS domain.  To do this, just go to the 
Advanced menu, and select:  "Always copy hosts file
from this domain" and select the DNS domain that you 
wish to have replicated into your current DNS domain.





 
 
________________________________________________________________
 
 
ALWAYS COPY HOSTS FILE
 





Always copy hosts file from this file

     Normally DNS Boss keeps a separate hosts file for 
each domain.  In some cases there may be a need to 
copy all of the hosts from the 
/export/home1/dns/dns_hosts.company_1.com file for 
example, and put them into your current domain.  That 
is what "Always copy hosts file from this file" does.  
You may select any file from the file dialog box.










 
 
________________________________________________________________
 
 
APPEND DB DOMAIN
 




Append special DNS database entries to the 
db.domain file

     In some rare cases it may be necessary to create 
special DNS database records that DNS Boss may not be
able to handle.  To do that, under the Advanced menu,
select:  "Append special DNS database entries to the
db.domain file".  Here is an example of the type of
entry that could be added.

topaz.testcompany.com. IN MX 100 garnet.testcompany.com.

     Keep in mind that this should only be done in
rare cases.





 
 
________________________________________________________________
 
 
APPEND NAMED BOOT
 





Append special entries to the /etc/named.boot file

     In some rare cases, it may be necessary to add 
custom entries to the /etc/named.boot file that did 
not get added by DNS Boss.  This usually should not 
need to be done.  However, if there a need for some 
special entry in /etc/named.boot not already 
created by DNS Boss, just create a file called:

/var/opt/DNSBoss/dns_build_area/append.named.boot

and add whatever entries you want.  DNS Boss will 
append it to the /etc/named.boot file that it
creates.





 
 
________________________________________________________________
 
 
APPEND SPECIAL BIND CONFIGURATIONS TO ETC NAMED CONF
 




Help on:  Append special BIND configurations to 
/etc/named.conf

     It is not generally necessary to add anything in 
this window.  DNS Boss should create everything that 
is need for most cases.  However, if you want to 
append some of the more sophisticated configurations
of DNS BIND to your /etc/named.conf after all of 
the standard configurations that DNS Boss already 
provides, then select:
"Add special BIND 'options' to /etc/named.conf"
to do it.  Here are a couple of examples:

server 204.33.116.7 {
      transfers 2;
};

topology {
      15/8;
      172.88/16;
};

     If you are not certain about what you are 
appending to your BIND /etc/named.conf
file with this window, then it is suggested to not 
add anything.  Your DNS should work fine 
without adding any of these sophisticated 
configurations.







 
 
________________________________________________________________
 
 
ARCHIVE THE CURRENT STATE OF THE DNS BOSS SYSTEM
 





Archive the current state of the DNS Boss system

     By selecting 'Archive the current state of the DNS Boss system' from
the 'Advanced' menu, a system archive is created.  The archive is created
with a date stamp for the file name.  Here is an example showing a sample
archive file.

/var/opt/DNSBoss_archives/040105121609.tar.Z

     The archive files exist as compressed tar files.  These archive
files can be easily be copied to other systems running DNS Boss, to 
create replica DNS servers.

     To unpack a DNS Boss system archive file, simply use either the
'X', or Web UI and under the 'Advanced' menu, and select
'Revert to the following available DNS Boss system archive'.  The
DNS Boss system archive files can also be unpacked from the command
line.  Here is an example.

/opt/DNSBoss/bin/unpack_archive   /var/opt/DNSBoss_archives/040105121609.tar.Z



 
 
________________________________________________________________
 
 
BIND VERSION 8 X AND 4 X
 





Help on:  BIND 8.x and 4.x

     For Solaris, all Solaris 2.7 or greater operating 
systems come pre-built with DNS BIND 8.x.  Before 
Solaris 2.7, Solaris machines came pre-built with 
BIND 4.x.  In some cases it may not be clear what 
version of BIND you are running.  If this is the 
case, you may select the choice button:  "BIND 8.x 
and 4.x" to force DNS Boss to write to both:  
/etc/named.boot (BIND 4.x), and /etc/named.conf 
(BIND 8.x).  This should allow your DNS server to 
serve DNS requests no matter what version of BIND 
your machine is running. 

     If you build a custom version of BIND, and do 
not build it into:  /usr/sbin/in.named, then you
must go to the Advance menu and select:
'Set the path to the named executable'.





 
 
________________________________________________________________
 
 
BIND VERSIONS
 





Bind Versions

     DNS Boss should work with the following BIND 
versions:


          Bind 4.x

          Bind 8.x

          BIND 9.x.


and the version in between provided the versions of 
BIND work.

     If you build a custom version of BIND, and do 
not build it into:  /usr/sbin/in.named, then you
must go to the Advanced menu and select:
'Set the path to the named executable'.



 
 
________________________________________________________________
 
 
COMMON ERRORS
 





Common errors:


DNS Boss started by non-root, user:
The following would happen if you tried to run the 
program as a non-root user if you are in the UNIX 
environment:

Xlib: connection to ":0.0" refused by server
Xlib: Client is not authorized to connect to Server
java.lang.InternalError: Can't connect to X11 window 
server using ':0.0' as the value of the DISPLAY variable.
  at sun.awt.motif.MToolkit.(MToolkit.java:55)
  at java.awt.Toolkit.getDefaultToolkit(Toolkit.java)
  at $1.(Unknown Source)
  at 
  at 


The solution is to do the following:

% su
# xhost +
# /opt/DNSBoss/bin/dnsboss
And, restart the dnsboss program.


Package installation attempted in the wrong directory:
______________________________________________________
Often times people type:  cd DNSBoss  to install the 
Solaris package instead of installing it in the same 
directory where they uncompressed it.  The following 
error message will be seen if an attempt is made at
 installing the Solaris package from the wrong directory:

pkgadd -d .
pkgadd: ERROR: no packages were found in 



The solution is to do the following:

# cd ..
# ls
DNSBoss
# pkgadd -d .


Disproportionate or missing textfield in DNS Boss GUI:
______________________________________________________
# cd /opt/DNSBoss/bin
# ./change_dnsboss_x_ui_fonts
This will cycle through various different fonts
attempting to find one that works for your system.
If you find one that works, select it, and 
DNS Boss will use that font as a default.





 
 
________________________________________________________________
 
 
CONVERT PRE-EXISTING DNS DATA INTO DNSBOSS FORMAT DATA
 





Convert pre-existing DNS data into DNS Boss format 
DNS data

     Some sites may already have a DNS implementation, 
but may wish to use DNS Boss to simplify their 
maintenance.  If this describes your site then do the 
following.  

1) If you haven't already done so, install DNS Boss.  
   Leave your pre-existing DNS databases where they 
   are for now, DNS Boss will save its databases in 
   its own location (/var/opt/DNSBoss/dns_databases).

2) Make a copy of your pre-existing /etc/named.boot, 
   or your /etc/named.conf (for BIND 8.x or 9.x), 
   and save it in the one of the following locations:

     /etc/named.boot-orig 
     /etc/named.conf-orig 

3) Select:  "Convert pre-existing DNS data into DNS 
   Boss format DNS data" from the "Advanced" menu of 
   the DNS Boss GUI.  If you have a need to use 
   separate hosts files for each domain, the DNS 
   Boss Converter creates then, and they can be found
   under the /etc directory.  Here is an example:
     /etc/dns_hosts_corp.com
     /etc/dns_hosts_eng.com
   Even if you don't choose to use these optional 
   files, the converted data is still saved in DNS 
   Boss.

4) Load each domain in DNS Boss by selecting:  "Load 
   DNS domain" and check the information on the main 
   GUI.  Also select "Edit hosts" for each domain and 
   look at the host file to make sure everything looks
   valid.  You should see a hosts file with hosts that
   are not fully qualified.  If you see things you 
   need changed, change them.  

5) Select "Update all domains" under the Advanced 
   menu.  DNS Boss will then attempt to create all of
   the forward, reverse, loopback, and boot files, 
   and then restart /usr/sbin/in.named.

     The DNS Boss Converter makes educated decisions 
about how to convert your DNS into a format consistant
with DNS Boss.  You may not agree with every decision 
it made, so it is important that you load each domain
in the DNS Boss GUI, and check the information that 
that the converter came up with.  The converter is 
not designed to be able to convert every obscure DNS 
entry.  The converter is a helper, not an end all- 
once you get the converted data into the DNS Boss 
GUI, you can manipulate it.  In some cases the DNS 
Boss Converter may convert all of the data 
perfectly, and it may not need any modifications.




 
 
________________________________________________________________
 
 
CONVERT TO CACHING ONLY
 




Convert this server to a Caching-only DNS Server

     To convert this machine into a Caching-only DNS 
Server, select "Caching-only" from the "Advanced" 
menu.  You will then have several options of the type 
of machine you want this machine to be.  Just 
select:  "Convert this server to a Caching-only DNS 
Server".  As long as you have a connection to the 
Internet, your server should start working as a
Caching-only DNS server at this time.





 
 
________________________________________________________________
 
 
CONVERT TO SECONDARY
 





Convert this server to a Secondary DNS Server

     To convert this machine into a secondary DNS 
Server, select the "Convert this server to a Secondary
DNS Server" from the "Advanced" menu.  You will then 
have several options of the type of machine you want 
this machine to be.  You must again select:  "Convert 
this server to a DNS Secondary Server.
     After this is done, you must follow the 
instructions to get one file off of the DNS primary.
This is important.  After you have got the file, hit
the "Convert this server to a DNS Secondary Server"
one last time to restart the in.named with the new
files and especially the named.boot file you just
ftp'd from the special place on the DNS primary.  
After this, your DNS Secondary should be working.





 
 
________________________________________________________________
 
 
EDIT HOSTS
 





Edit hosts

     In order for DNS (Domain Name System) to 
function, it needs DNS records.  This software 
produces those DNS databases from the host file, and 
the other information provided.  
     For machines that you do NOT want in DNS, but, 
you would still like to have them in the host file, 
you can add in the comment field of the hosts file 
the following: [no_dns].  Here is an example:

Hit the edit hosts button.

192.168.77.211 topaz   # This host would get a DNS 
                       # record.
192.168.77.212 emerald # [no_mx]  This host would 
                       # not get an MX record.
192.168.77.213 ruby    # [no_dns] This host would 
                       # not get any DNS records.

     Is edit hosts the same as the /etc/hosts file on 
a UNIX machine?  No, when you hit the Edit hosts 
button, it edits another file that is not the 
/etc/hosts file.  You can see the name of the file 
you are saving when you save it using the Generic 
editor.

     If you are running this product on a Solaris 
2.x machine, you must make an entry very similar to 
the following in the /etc/nsswitch.conf:

hosts:      files dns





 
 
________________________________________________________________
 
 
GENERIC EDITOR
 





Generic editor

     Generic editor is a simple platform 
independant editor.





 
 
________________________________________________________________
 
 
HOW TO DO A CNAME
 





How to create a CNAME record

     DNS Boss automatically creates CNAME records when
it does its updates All you have to do is put the name
of the CNAME record you wish to create on the same 
line of the hosts file that comes up when you hit 
"Edit hosts".

Example:
________

208.19.71.50 spiderman ftp www # this would create
                               # CNAME's for ftp and www





 
 
________________________________________________________________
 
 
HOW TO DO COMMAND LINE UPDATES WITHOUT THE GUI
 





 How to do DNS Boss from the command line without 
the GUI

     DNS Boss allows command line execution of the 
product to do updates from the command line without 
bringing up the GUI. This is convenient for sites 
that want to run a nightly build of their DNS data 
from a hosts file that changes every day.  This 
must be done after all of the GUI parameters have 
been set up.  To do this, set the following options 
via the GUI:  Select "Always copy hosts file from 
this file" (under the Advanced menu).  After you 
have saved all of the other settings for your 
domain the way you like them, make a change to 
your host file, and run the following from 
the command line:

Example:
________
# /opt/DNSBoss/bin/dnsboss_commandline 

Then do a nslookup to see if it really worked.
Example:
________
# nslookup tiger.your_company.com.

If it comes back with the proper DNS entry, they you 
could put an entry into the root crontab so DNS Boss 
can automatically generate DNS databases from your 
hosts file.  This would create updated DNS databases 
every 30 minutes every day.  After the updated 
databases are created, /usr/sbin/in.named 
automatically gets restarted so your DNS should be 
up to date. 

Example:
________
# setenv EDITOR /usr/ucb/vi
# crontab -e
1,30 * * * * /opt/DNSBoss/bin/dnsboss_commandline > /dev/null 2>&1

     Here is a list of the DNS Boss command line
options.

Example:
________
# /opt/DNSBoss/bin/dnsboss_commandline -help
/opt/DNSBoss/bin/lockdnboss 
/opt/DNSBoss/bin/dnsboss_commandline  -autobuild_all_domains
/opt/DNSBoss/bin/dnsboss_commandline  -autobuild     your_domain.com
/opt/DNSBoss/bin/dnsboss_commandline  -add_domain    your_domain.com
/opt/DNSBoss/bin/dnsboss_commandline  -delete_domain your_domain.com
/opt/DNSBoss/bin/dnsboss_commandline  -converter
/opt/DNSBoss/bin/dnsboss_commandline  -add_host_to_next_available_ip  
                                       name your_domain.com  subnet  true
/opt/DNSBoss/bin/dnsboss_commandline  -remove_host name  
                                       your_domain.com
/opt/DNSBoss/bin/dnsboss_commandline  -ip_exists ip
/opt/DNSBoss/bin/dnsboss_commandline  -name_exists_in_domain 
                                       name  yourdomain.com
/opt/DNSBoss/bin/dnsboss_commandline  -list_names_in_domain 
                                       yourdomain.com
/opt/DNSBoss/bin/dnsboss_commandline  -list_ips_in_domain yourdomain.com
/opt/DNSBoss/bin/dnsboss_commandline  -list_subnets_in_domain 
                                       yourdomain.com
/opt/DNSBoss/bin/dnsboss_commandline  -list_duplicate_names_in_domain 
                                       yourdomain.com
/opt/DNSBoss/bin/dnsboss_commandline  -list_duplicate_cnames_in_domain  
                                       yourdomain.com
/opt/DNSBoss/bin/dnsboss_commandline  -list_ips_in_all_domains  
/opt/DNSBoss/bin/dnsboss_commandline  -list_subnets_in_all_domains
/opt/DNSBoss/bin/dnsboss_commandline  -list_duplicate_ips_in_all_domains 
/opt/DNSBoss/bin/dnsboss_commandline  -list_duplicate_ips_names_and_cnames_in_all_domains







 
 
________________________________________________________________
 
 
HOW TO GET STARTED
 





How to get started creating a DNS primary

     Here is how to get started using the tool.  The 
DNS Boss GUI has most likely already been started, 
but if not, start it up as super-user like this:

# /opt/DNSBoss/bin/dnsboss

After the GUI is up, change all of the TextFields to 
reflect the information about your DNS domain.  Make 
sure that you put in an email address in the 
following format:  someuser.company.com  (not 
someuser@company.com).  If you are not sure about a 
setting, try to follow the defaults.

     After you have put all of the information in the 
TextFields that you want, delete any of the mail 
exchanger, or DNS secondary fields you are not using.
You must have one mail exchanger, and it is a good 
idea to have at least one DNS secondary, but it is 
not required.
     
     After deleting any empty mail exchanger, or 
secondary fields, hit the "Save settings" button.  If
you made any errors, they should show up in the 
TextArea.  If you made an error, fix it, and hit 
"Save settings" again.

     After you have saved your settings, hit the 
"Edit hosts" button, and type in some hosts for your
domain.  The proper format for hosts in this file is 
the following:
216.45.70.45  somemachine    # This is right
Do NOT attempt to put fully qualified hosts in this 
file, that is WRONG:
216.45.70.45 somemachine.company.com # This is WRONG
After you have added a few hosts in the proper 
format, hit the Save button.

     After you have saved some hosts, hit the "Update 
this domain" button.  This should create the DNS 
databases for you, and restart your in.named process 
which allows your DNS data to get out to your 
secondary's, and the rest of the Internet.

     You may now hit the "Exit" button if your wish.  

     To get back to the domain you were modifying, 
just bring up the tool, and hit "Load DNS domain", 
and double click the domain that you wish to modify.
This machine must be the DNS primary for that 
domain.  At this point, you may "Edit hosts" again
if you wish.  After you are done, make sure that the
following is hit "Update this domain" so that 
changes will take effect and be seen by the rest of 
the Internet.





 
 
________________________________________________________________
 
 
HOW TO SETUP A DNS SECONDARY
 





How do I set up a DNS secondary?

     After you have saved the DNS configurations for 
your DNS domain (the DNS primary), go to the machine 
that you wish to use as a secondary, either by telnet
on a UNIX machine, or by walking up to it in person 
on a non-UNIX machine.  You may create the DNS 
secondary by using the DNS Boss GUI, or by doing the 
eqivalent of these commands from the command line:

mkdir -p /var/opt/DNSBoss/dns_secondary

cd /var/opt/DNSBoss/dns_secondary

ftp name_of_dns_primary_that_has_dnsboss_installed
ftp> cd /var/opt/DNSBoss/dns_build_area

ftp> dir
yourcompany.com

ftp> cd yourcompany.com  
ftp> dir
ftp> get named.boot_for_secondary
ftp> get named.conf_for_secondary
ftp> get db.cache
ftp> get db.127.0.0
ftp> quit

On a SUN, or HPUX machine:
     For Solaris 2.5 and Solaris 2.6 ( Bind 4.x )
          mv named.boot_for_secondary /etc/named.boot
     For Solaris 2.7 or greater ( BIND 8.x, or 9.x )
          mv named.conf_for_secondary /etc/named.conf
     
     For Solaris
          vi /etc/nsswitch.conf
          Make sure the following exists:
          hosts:      files dns
          Save the file.

     reboot

On an SGI 
     chkconfig named on
     uname -r
     If it is 4.X.X.
        mv named.boot_for_secondary 
           /usr/etc/named.d/named.boot
     Otherwise,
        mv named.boot_for_secondary /etc/named.boot
     reboot

     Thats it, you should be done.  The secondary's 
should pull over the latest DNS databases after you
make changes to them.  You do not need to add a 
/etc/resolv.conf on a UNIX machine that is acting as
a DNS primary or secondary.  It automatically know 
how to resolve IP addresses as long as it is 
functioning properly.
     Make sure you test everything.  The nslookup 
command is a great way to do this.  On most Unix 
machines you can type:
nslookup - yoursecondary.yourcompany.com.
> ls -t any yourcompany.com.
This should give you a good idea if you are on track.  





 
 
________________________________________________________________
 
 
HOW TO USE WEB USER INTERFACE
 





How to use the Web user interface

     DNS Boss allows users to maintain their DNS Boss 
primary remotely from a Web user interface.  Different
users may have access if they are added to the file:

/opt/DNSBoss/etc/password.txt

Just copy one of the sample user names into a real 
users name (don't try to use the sample names:  
sally_jones or frank_black those won't work).  Here 
is what the file looks like:

sally_jones:top_secret:companyabc.com:companydef.com
frank_black:secret_password:*

The fields are:  user name, password, and domains 
that the user will have access to.  The '*' means
that a user has access to all domains.

     Once password.txt is modified, the Web startup 
script must be started:

/opt/DNSBoss/bin/S99dnsbossweb start

     At this point, just point a Web browser to your
DNS Boss DNS primary server like the following 
example (use https, not http):

https://localhost:8080

     To make the Web server to start every time the
server reboots, just do the following as root:

cp /opt/DNSBoss/bin/S99dnsbossweb  /etc/rc2.d






 
 
________________________________________________________________
 
 
IP MANAGEMENT
 





IP Management

     DNS Boss has a powerful IP Management capability 
built into the standard DNS Boss product.  There is 
no additional software to install, or configure.  
With DNS Boss, you get both powerful DNS Management,
and IP Management built into one product!  
  
     To use the IP Manager, just select the:  
"IP Management" drop down menu and select the option 
you wish to use.  Options include the following:


Add a host to the next available IP number
__________________________________________
     Use this option if you wish to add a host to the
next available IP.  DNS Boss will find the available 
hosts, and make sure the host does not already exist.


Remove a host
_____________
     This option removes all occurring instances of 
a host from a hosts file.


Check if an IP number is already being used
___________________________________________
     This option makes sure that the IP is not being 
used in any of the domains being maintained by the 
DNS Boss DNS primary.


Check if a name is already being used
_____________________________________
     This option makes sure that a certain name is 
not already being used in a domain.


View all used names in this domain
__________________________________
     This option lists and sorts all used names in a 
given domain.


View all used IP's in this domain
_________________________________
     This option lists and sorts all used IP's in 
this domain.


View all used subnets in this domain
____________________________________
     This option lists and sorts all used subnets 
used by this domain.


View all duplicate names in this domain
_______________________________________
     This option lists all duplicate names in this 
domain.


View all duplicate CNAMES in this domain
________________________________________
     This option lists all duplicate CNAMES in this 
domain.


View all used IP's in all domains
_________________________________
     This option lists all IP's in all domains.


View all duplicate IP's in all domains
____________________________________
     This option lists all duplicate IP's in all 
domains.


View duplicate:  IP's, names, and CNAMES in all domains
_______________________________________________________
     This option lists all duplicate:  IP's, names, 
and CNAMES in all domains.


     The IP Management features can also be 
implemented from the Java API, and from the command 
line.  Here are the command line features that 
demonstrate the IP Management capabilities.

/opt/DNSBoss/bin/lockdnboss 
/opt/DNSBoss/bin/dnsboss_commandline  -autobuild_all_domains
/opt/DNSBoss/bin/dnsboss_commandline  -autobuild       your_domain.com
/opt/DNSBoss/bin/dnsboss_commandline  -add_domain      your_domain.com
/opt/DNSBoss/bin/dnsboss_commandline  -delete_domain   your_domain.com
/opt/DNSBoss/bin/dnsboss_commandline  -converter
/opt/DNSBoss/bin/dnsboss_commandline  -add_host_to_next_available_ip  name your_domain.com  subnet  true
/opt/DNSBoss/bin/dnsboss_commandline  -remove_host     name  your_domain.com
/opt/DNSBoss/bin/dnsboss_commandline  -ip_exists       ip
/opt/DNSBoss/bin/dnsboss_commandline  -name_exists_in_domain   name  yourdomain.com
/opt/DNSBoss/bin/dnsboss_commandline  -list_names_in_domain   yourdomain.com
/opt/DNSBoss/bin/dnsboss_commandline  -list_ips_in_domain     yourdomain.com
/opt/DNSBoss/bin/dnsboss_commandline  -list_subnets_in_domain     yourdomain.com
/opt/DNSBoss/bin/dnsboss_commandline  -list_duplicate_names_in_domain     yourdomain.com
/opt/DNSBoss/bin/dnsboss_commandline  -list_duplicate_cnames_in_domain     yourdomain.com
/opt/DNSBoss/bin/dnsboss_commandline  -list_ips_in_all_domains     yourdomain.com
/opt/DNSBoss/bin/dnsboss_commandline  -list_subnets_in_all_domains     yourdomain.com
/opt/DNSBoss/bin/dnsboss_commandline  -list_duplicate_ips_in_all_domains     yourdomain.com
/opt/DNSBoss/bin/dnsboss_commandline  -list_duplicate_ips_names_and_cnames_in_all_domains




 
 
________________________________________________________________
 
 
JAVA API
 





Java API

     DNS Boss has an extremely powerful Java API to 
modify data, and generate reports.  With the DNS Boss 
API, a rich set of features become available to:  
customize, automate, and program your DNS environment.

     To demo the DNS Boss API, simply do the following:

# cd /opt/DNSBoss/lib/tools/java_api
# ls 
api_demo     APIDemo.java
# ./api_demo

     The APIDemo.java Java program gives a running 
example of how to use the features of the API. 

     When recompiling, make sure to use SDK 1.2 or 
greater, and use the following CLASSPATH.  Example:
/usr/java/bin/javac -classpath \
  /usr/java/lib/rt.jar:/opt/DNSBoss/lib/dnsboss.jar:/opt/DNSBoss/lib/tools/java_api \
  APIDemo.java

     For best results, create a few DNS domains and 
add some sample data into each domain.  Then run:  
/opt/DNSBoss/lib/tools/java_api/api_demo.

     Here is the current version of the Java API 
example source code.     



/*
     APIDemo.java

     This stand alone Java application demonstrates 
     the features of the DNS Boss 
     Java API.  
*/




import java.util.Vector;
import java.util.TreeMap;
import java.util.Iterator;


class APIDemo {

     APIDemo() {
          DNSBoss myDNSBoss = new DNSBoss();

          System.out.println( "___________________________________________________________________________________" );

          TreeMap domainNamesTreeMap = myDNSBoss.getDomainNames();
          int domainNamesCounter = 0;
          for ( Iterator mainIterator = domainNamesTreeMap.keySet().iterator(); mainIterator.hasNext(); ) {
               ++domainNamesCounter;

               String dns_domain = (String)mainIterator.next();

               System.out.println( " " );
               System.out.println( "___________________________________________________" );
               System.out.println( "DNS domain #" + domainNamesCounter + ":        " + dns_domain );


               //
               // List all subnets.
               //
               TreeMap subNetsForDomainTreeMap = myDNSBoss.getSubNetsForDomain( dns_domain );
               int subNetsForDomainCounter = 0;
               for ( Iterator myIterator = subNetsForDomainTreeMap.keySet().iterator(); myIterator.hasNext(); ) {
                    ++subNetsForDomainCounter;
                    String subNet = (String)myIterator.next();
                    System.out.println( subNetsForDomainCounter + "     Subnets for     " + 
                                        dns_domain + ":  " + subNet );
               }

               //
               // List all available IP's for a subnet.
               //
               System.out.println( "___________________________________________________" );
               System.out.println( "Available IP's:" );
               TreeMap subNetsForDomainTreeMap1 = myDNSBoss.getSubNetsForDomain( dns_domain );
               subNetsForDomainCounter = 0;
               for ( Iterator myIterator = subNetsForDomainTreeMap1.keySet().iterator(); myIterator.hasNext(); ) {
                    ++subNetsForDomainCounter;
                    String subNet = (String)myIterator.next();
                    System.out.println( subNetsForDomainCounter + "     Subnets for     " + 
                                        dns_domain + ":  " + subNet );
                    Vector availableIPsVector = myDNSBoss.getAllAvailableIPsForDomainOnSubNet( dns_domain, subNet );
                    for ( int i=0;i < availableIPsVector.size();++i) {
                         String anAvailableIP = (String)availableIPsVector.elementAt(i);
                         System.out.println( "Available IP for domain:  " + dns_domain + " on subnet:  " + 
                                              subNet + "  IP:  " + anAvailableIP );
                    }
                    
               }
               System.out.println( "___________________________________________________" );
               System.out.println( " " );


               //
               // Add a host.
               //
               System.out.println( "___________________________________________________" );
               System.out.println( "Add hosts" );
               TreeMap subNetsForDomainTreeMap2 = myDNSBoss.getSubNetsForDomain( dns_domain );
               for ( Iterator myIterator = subNetsForDomainTreeMap2.keySet().iterator(); myIterator.hasNext(); ) {
                    String subNet = (String)myIterator.next();
                    // Use:  true to really write the next available IP.
                    boolean write = false;
                    String addHostToNextAvailableIP = myDNSBoss.addHostToNextAvailableIPForDomainOnSubNet( 
                                                           "robin", dns_domain, subNet, write );
                    System.out.println( "     Prepared to add:     " + addHostToNextAvailableIP );
               }

               //
               // List out names in a domain.
               //
               System.out.println( "___________________________________________________" );
               TreeMap namesInADomainTreeMap   = myDNSBoss.getNamesInADomain( dns_domain );
               int namesInADomainCounter = 0;
               for ( Iterator myIterator = namesInADomainTreeMap.keySet().iterator(); myIterator.hasNext(); ) {
                    ++namesInADomainCounter;
                    String name = (String)myIterator.next();
                    if ( namesInADomainTreeMap.containsKey( name ) ) {
                         System.out.println( namesInADomainCounter + "     Unique name for " + 
                                             dns_domain + ":  " + name );
                    }
                    System.out.println( "      " + name + "." + dns_domain + " exists:  " + 
                                        myDNSBoss.nameExistsInDomain( name, dns_domain ) );
               }

               //
               // List out unique IP's in a domain.
               //
               System.out.println( "___________________________________________________" );
               TreeMap uniqueIPsInADomainTreeMap   = myDNSBoss.getUniqueIPsInADomain( dns_domain );
               int uniqueIPsInADomainCounter = 0;
               for ( Iterator myIterator = uniqueIPsInADomainTreeMap.keySet().iterator(); myIterator.hasNext(); ) {
                    ++uniqueIPsInADomainCounter;
                    String ip = (String)myIterator.next();
                    if ( uniqueIPsInADomainTreeMap.containsKey( ip ) ) {
                         System.out.println( uniqueIPsInADomainCounter + "     Unique IP for   " + 
                                             dns_domain + ":  " + ip );
                    }
               }

               //
               // List out unique names in a domain.
               //
               System.out.println( "___________________________________________________" );
               System.out.println( "Hosts:" );
               Vector aDomainsHostDataVector    = myDNSBoss.getHostsInADomain( dns_domain );
               for ( int i=0;i < aDomainsHostDataVector.size();++i) {
                    HostEntry myHostEntry = (HostEntry)aDomainsHostDataVector.elementAt(i);
                    System.out.println( i + "     " + myHostEntry.getIP() + "  " + myHostEntry.getName() );
               }

               //
               // List duplicate names in a domain.
               //
               System.out.println( "___________________________________________________" );
               System.out.println( "Duplicate names in:  " + dns_domain );
               Vector duplicateNamesInADomainVector    = myDNSBoss.getDuplicateNamesInADomain( dns_domain );
               for ( int i=0;i < duplicateNamesInADomainVector.size();++i) {
                    System.out.println( duplicateNamesInADomainVector.elementAt(i) );
               }
               System.out.println( "___________________________________________________" );
               System.out.println( " " );

               System.out.println( "___________________________________________________________________________________" );
          }

          //
          // List all IP's and names in all domains.
          //
          System.out.println( "___________________________________________________________________________________" );
          System.out.println( " " );
          System.out.println( "Listing all IP's and names in all domains." );
          System.out.println( " " );
          displayTreeMap( myDNSBoss.getGlobalIPsAndNames() );
          System.out.println( " " );
          System.out.println( "___________________________________________________________________________________" );


          //
          // List all subnets in all domains.
          //
          System.out.println( " " );
          System.out.println( "Listing all subnets in all domains." );
          System.out.println( " " );
          displayTreeMap( myDNSBoss.getGlobalSubNets() );
          System.out.println( " " );
          System.out.println( "___________________________________________________________________________________" );


          //
          // Listing all duplicate:  IP's, names, and CNAMES in all domains.
          //
          System.out.println( " " );
          System.out.println( "Listing all duplicate:  IP's, names, and CNAMES in all domains. " );
          System.out.println( " " );
          displayVector( myDNSBoss.getDuplicateIPsNamesAndCNamesInAllDomains() );
          System.out.println( " " );
          System.out.println( "___________________________________________________________________________________" );

         
          //
          // Listing only duplicate IP's in all domains.
          //
          System.out.println( " " );
          displayVector( myDNSBoss.getGlobalDuplicateIPs() );
          System.out.println( " " );
          System.out.println( "___________________________________________________________________________________" );

     }

     public void displayVector( Vector myVector ) {
          for(int i=0;i < myVector.size();++i) {
               System.out.println( (String)myVector.elementAt(i) );
          }
     }

     public void displayTreeMap( TreeMap myTreeMap ) {
          for ( Iterator myIterator = myTreeMap.keySet().iterator(); myIterator.hasNext(); ) {
               String data = (String)myIterator.next();
               System.out.println( myTreeMap.get( data ) );
          }
     }

     public static void main(String args[]) {
          new APIDemo();
     }

}

 





 
 
________________________________________________________________
 
 
LICENSE
 



                DNS Boss 2.4 
END-USER LICENSE AGREEMENT AND LIABILITY DISCLAIMER

This end user license agreement is a legal agreement 
between you (an individual or an entity) and DNS 
Boss for the use of the software product DNS Boss 2.4.
It contains rights and restrictions associated with 
the accompanying software.  By installing DNS 
Boss 2.4, you are agreeing to be bound by the terms
of this Agreement.  If you do not agree to the terms
of this Agreement, you are not authorized to use DNS
Boss 2.4.

GRANT OF LICENSE.  By selecting "Agree" at the bottom
of this text window, DNS Boss grants you ("the 
Licensee") a non-exclusive, nontransferable, license
to use DNS Boss 2.4 ("the Software") under the terms
of this agreement for one computer.  DNS Boss 2.4 is
licensed to the Licensee, not sold.

COPYRIGHT.  DNS Boss 2.4 is Copyrighted.  Title, 
ownership rights, and intellectual property rights 
belong to DNS Boss.  The Software is protected by 
the copyright laws and treaties.  Title and related
rights in the content accessed through the Software
is the property of the applicable content owner and
may be protected by applicable law. This License
gives the Licensee no rights to such content.

RESTRICTIONS.  The Licensee may not make copies of 
the Software other than for backup or archival 
purposes.  Licensee may not distribute, rent, 
lease, sublicense or sell the software to third 
parties.  Licensee may not post DNS Boss 2.4 on
ftp sites, web sites, newsgroups, bulletin boards
or other public places.  Licensee may not decompile,
modify, reverse engineer, disassemble, or otherwise
attempt to discover the source code of the software.
Licensee may not create any program deriving wholly
or in part from the software.  Licensee may not 
use the Software for purposes transmitting 
pornography.  DNS Boss reserves the right to 
refuse to license the Software to anyone; including
those they deem to be participating in unethical 
conduct.  Licensee may not use the Software in any 
manner which is illegal in the regional government, 
or the laws of California, or the laws of the 
United States of America.


RESTRICTED RIGHTS.  Use, duplication, reproduction, 
and disclosure by Government is subject to 
restrictions in subdivision (c) (1) (ii) of the 
Rights in Technological Data and Computer Software 
Clause at 252.227.7013 and in subparagraphs (a) 
through (d) of the Commercial Software Restricted 
Rights Clause at 52.227-19. 

CONFIDENTIALITY.  Licensee agrees software is 
confidential and proprietary information of DNS Boss.
Licensee will take adequate steps to ensure software
is protected from unauthorized disclosure or use. 

EXPORT LAW ASSURANCES.  Licensee agrees that the 
software and its accompanying documentation will not 
be downloaded, exported, or reexported into or to a
national or resident of Cuba, Iraq, Iran, North Korea,
Libya, Sudan, or Syria, or to any country the U.S.
has embargoed goods, as well as any country on the 
U.S. Commerce Department's Table of Denial Orders 
and/or the U.S. Treasury Department's list of
Specially Designated Nations.

TERMINATION.  Licensee may terminate this license at 
any time by destroying the program, documentation, 
and all permitted copies.  If Licensee fails to comply
with any provision of this agreement, this license 
will be terminated immediately without notice from 
DNS Boss.  Upon such termination, Licensee must 
destroy all copies of the software.

DISCLAIMER OF WARRANTY/LIMITATION OF LIABILITY.  DNS 
Boss makes no warranty, express or implied for this
software including but not limited to the implied 
warranty of fitness for intended use.  This software
is provided AS IS.  Under no circumstances and under
no legal theory, tort, contract, or otherwise shall
DNS Boss, or its suppliers or resellers be liable to
the Licensee, or any other person or entity for any
direct, indirect, special, incidental or 
consequential damages of any character including, 
without limitation, damages for loss of goodwill,
work stoppage, computer or network failure or
malfunction, or any and all other commercial, or 
non-commercial damages or losses however caused, 
even if DNS Boss has been advised of the 
possibility of such damages.  All risk pertaining 
to the performance or use of the software 
remains with the Licensee.

HIGH RISK ACTIVITIES.  The Software is not 
fault-tolerant and is not designed, manufactured or 
intended for use or resale as on-line control 
equipment in hazardous environments requiring 
fail-safe performance, such as in the operation of 
nuclear facilities, aircraft navigation or 
communication systems, air traffic control, direct 
life support machines, or weapons systems, in which
the failure of the Software could lead directly to
death, personal injury, or severe physical or 
environmental damage ("High Risk Activities").  DNS
Boss and its suppliers specifically disclaim any 
express or implied warranty of fitness for High 
Risk Activities.

GOVERNING LAW.  Governing Law. Any action related to 
this License will be governed by California law and 
controlling U.S. federal law. No choice of law rules
of any jurisdiction will apply.





  
               
 
 
________________________________________________________________
 
 
LOAD DEFAULT DNS DOMAIN
 





Load default DNS domain

     If you ever have questions about what the default
settings are for any of the settings this is a good 
place to look.  If you don't know what all of the 
different settings mean, just use the defaults.





 
 
________________________________________________________________
 
 
LOAD DNS DOMAIN
 





Load DNS Domain


     "Load DNS Domain" allows you to look at another 
DNS domain.  After it loads, the configurations may 
be changed.  After that "Update DNS Databases" 
should be selected.





 
 
________________________________________________________________
 
 
NEVER COPY HOSTS FILE
 





Never copy hosts file from another domain or file

     The never copy hosts file from another domain or
file turns off the automatic copy of the hosts file 
from another domain or file.





 
 
________________________________________________________________
 
 
NO DNS
 




Add [no_dns] to comment field

     If there is ever a case where you have the need 
to omit DNS entry, just put [no_dns] anywhere in the
comment field of the comment field.  This will 
eliminate the DNS records for that host only.
     Here is an example:

217.18.74.56  topaz  # [no_dns] John Doe SUN workstation





 
 
________________________________________________________________
 
 
OPEN AND EXTENSIBLE
 

DNS Boss:  Open and Extensible 

     DNS Boss is very open and extensible.  DNS Boss 
is not constrained to specific versions of BIND.  It 
should work with all of the functioning versions of
BIND from 4.x to 8.x to 9.x and all of the releases
in between.  DNS Boss is deliberately not shipped with
a verion of BIND, so that the Systems Administrator
can use the version of BIND that already comes with 
the system, or one they wish to build.  For example,
if a Systems Administrator were to only install DNS 
Boss on a Solaris 2.5 to Solaris 10 machine, they
should be able to get a DNS primary running without
installing anything else, because SUN ships a working 
version of BIND by default.

     DNS Boss is NOT locked into a SQL database.  
DNS Boss writes the DNS databases into open ASCII
files.  If for some reason, a decision was ever made
to stop using DNS Boss, the ASCII DNS database files
could still be modified by hand, and a company would
not be locked into a proprietary solution, tied to
a proprietary version of a SQL type database.

     DNS Boss can easily be extended by using either
the command line interface with UNIX shell scripts,
or the Java API.  DNS Boss has powerful IP
Management capabilities.



 
 
________________________________________________________________
 
 
PLATFORMS
 



Platforms DNS Boss been ported to

     Currently DNS Boss is ported to: 

     Solaris 2.5 - Solaris 10   SPARC

     Solaris 2.5 - Solaris 10   Intel

     Linux 



 
 
________________________________________________________________
 
 
REFRESH RETRY EXPIRE TTL
 




Refresh, Retry, Expire, Minimum TTL

These settings tell the secondary when to come and retrieve 
the DNS data from the primary, for example, every 6 hours
(REFRESH).  If for some reason the secondary is unable to 
pull at that 6 hour interval then (RETRY) every 1 hour
for up to 20 days (EXPIRE) and if it is unable to pull the 
data from the primary after the 20 days, we should delete 
the DNS data as they are two old.  Also, the primary server 
is telling all caching servers to hold the data for 6 hours
(MINIMUM) and after 6 hours, then to come back and get the 
new data.  Here is an example:

@  IN  SOA  ns.bobspizza.com.  hostmaster.bobspizza.com. (
              2001112024  ; Serial Number 
              21600       ; Refresh every 6 hours
              3600        ; Retry every hour
              1728000     ; Expire every 20 days
              21600 )     ; Minimum 6 hours





 
 
________________________________________________________________
 
 
REMOTELY MAINTAIN ANOTHER MACHINE THAT HAS BEEN INSTALLED WITH DNS BOSS
 





Remotely maintain another machine that has been 
installed with DNS Boss
   
Web:
____
     Users using the Web User interface can
modify any number of DNS Primary Servers
running DNS Boss through their Web Browser.

X UI:
_____
     In some cases, it may be desirable to maintain 
multiple "DNS Boss" servers from one central location
via the "X" DNS Boss User Interface.  By selecting 
this option, you will have this capability.  Some 
sites may not have a firewall.
     If there is a firewall in place, a hole must 
be made in the firewall for outgoing traffic for rsh
from the central "DNS Boss" DNS primary to the 
external "DNS Boss" DNS primary.  Another hole must
be punched in the firewall for incomming "X" 
traffic from the external "DNS Boss" DNS primary 
to the internal "DNS Boss" DNS primary. 
     Also, on the external "DNS Boss" DNS primary, 
there must be an entry in the /.rhosts, file for 
the internal machine.  There is no need to do any 
xhosting, because DNS Boss already does it 
automatically.
     Here in an of examples of what the /.rhosts, 
file would look like for a external machine that 
you want to remotely maintain from an internal 
machine. 

external# vi /.rhosts
internal
internal.company.com









 
 
________________________________________________________________
 
 
REMOVE ALL DNS DATABASES BUT NOT CONFIGURATION DATA
 






Remove all DNS databases but not configuration data
   
     This give you the opportunity to clean out all 
of the existing DNS databases.  After selecting this, 
you should immediately select "Update all domains".





 
 
________________________________________________________________
 
 
REMOVE DNS DOMAIN COMPLETELY
 






Remove DNS domain completely

     This deletes the DNS configuration directories 
for a DNS domain, but it does not delete the DNS 
databases for that domain.  To do that, you must do 
the following:

"Remove DNS domain completely"
"Remove all DNS databases but not configuration data"
"Update DNS databases"






 
 
________________________________________________________________
 
 
REPLICATION
 





DNS Boss Replication


     DNS Boss has a very easy to use built in replication 
mechanism for the replication of DNS Boss primary servers.  
To use this there must be 1 DNS Boss Replication Sender, 
and there can be any number of DNS Boss Replication 
Receivers.  DNS Boss must be installed on the Replication 
Sender and Receiver machines.  

     To enable the DNS Boss Replication Sender for a DNS
primary, simply go to the Advanced menu and select:
"DNS Boss Replication Sender"
Click on:  "Enable DNS Boss Replication Sender"
Choose an unused Port number you wish to use for the 
transfer of data.  Select a unique user name and password.
These are not related to the UNIX user name or password, 
they are only for DNS Boss Replication.  Then in the 
TextField, put in the IP's of the other DNS Boss Primary 
Receivers where you wish to push your DNS data.  There 
must be only 1 IP per line.  Then hit Save and then Exit.

     To enable the DNS Boss Replication Receiver for a DNS
primary, you must go to a different machine installed with
DNS Boss, and go to the Advanced menu and select:
"DNS Boss Replication Receiver"
Click on:  "Enable DNS Boss Replication Receiver"
Type in the IP number of the DNS Boss Replication Sender.
Type in the same Port number you used on the DNS Boss
Replication Sender.  Click Save.  Go to the File menu on 
the same window (DNS Boss Replication Receiver), and select
"DNS Boss Replication Authentication"
Type in the same user name and password that you used on
the DNS Boss Replication Sender.  Click Save.  Click Exit.

     Then go back to the DNS Boss Replication Sender machine, 
and after you have created a domain, click on "Update this 
domain".  If you look on the DNS Boss Replication Receiver
machine, you should see the updates comming through from 
the DNS Boss Replication Sender as long as you still have
the DNS Boss Replication Receiver window up.

     To monitor, or receive DNS updates the DNS Boss 
Replication Receiver window must be up.  If the window is
not up, updates will not receiveed.  The exception to this
is that there is a non-GUI DNS Boss Replication Receiver 
server that can be used.  To use this server just follow 
this example:

# cd /opt/DNSBoss/bin
# cp S99dnsbossprimaryreplicationreceiver  /etc/rc2.d
# /etc/rc2.d/S99dnsbossprimaryreplicationreceiver start

This will allow the DNS Boss Replication Receiver
to start up automatically in a non-GUI mode if there is 
a system reboot.  Do not run the non-GUI Receiver at the
same time as the GUI Receiver, run one or the other.




 
 
________________________________________________________________
 
 
REVERT TO THE FOLLOWING AVAILABLE DNS BOSS SYSTEM ARCHIVE
 





Revert to the following available DNS Boss system archive

     By selecting 'Revert to the following available DNS Boss system archive' 
from the 'Advanced' menu, it is possible to revert to a previous state
of the DNS Boss system.  The most recent archives are listed on top .  Each
archive file contains a compressed tar file sith a date stamp.  Here is an 
example.

/var/opt/DNSBoss_archives/040105121609.tar.Z

     By selecting an archive file, and clicking the:  'Revert to the following
available DNS Boss system archive' button, the system is reverted back to the
selected archive, and the DNS server is automatically restarted.



 
 
________________________________________________________________
 
 
ROLL BACK TO THE PREVIOUS STATE OF THE HOSTS FILE FOR THIS DOMAIN
 





Roll back to to the previous state of the hosts file 
for this domain

     If for some reason bad data gets put into the 
hosts file that you are editing, and you would like 
to revert back to the previous version of the hosts 
file, you can do it by making this selection.  
This selection causes DNS Boss to:  copy in the 
previous version of the hosts file for this domain, 
and remove all DNS databases, and then rebuilt all 
DNS databases.  This removes any old non-existing 
DNS data.

     The rollback gets the previous version of the 
hosts file even if you are in a new GUI session.




 
 
________________________________________________________________
 
 
SAVE SETTINGS
 






Save settings

     Save settings saves all of the information that 
has been entered on to the hard disk of the machine
that is running this product.





 
 
________________________________________________________________
 
 
SET DEFAULT DNS NAME AND IP FOR NSLOOKUP SERVER
 





Set default DNS name and IP for nslookup 
'Server' name


     This option should be selected if DNS 
Boss is being used to manage multiple DNS 
domains.  It sets the 'Server' name and 
IP response from the nslookup command.  
The IP must be a valid IP of your DNS 
primary.  The server name can be fake or 
real, and should be a fully qualified 
name.

     Also, with DNS Boss it is possible 
to make the Staging DNS Boss Primary be 
hidden, so that its name does not show up.
Only the names of the external DNS 
servers would show up.  Just select the 
checkbox: "Hidden staging DNS primary".





 
 
________________________________________________________________
 
 
SET THE PATH TO THE NAMED EXECUTABLE
 





Set the path to the named executable

     Use this window to set the path to the executable of 
the version of BIND that you wish to use.  DNS Boss uses 
your version of BIND.  For example, relatively recent 
versions of the Solaris operating system ship with a 
pre-built version of BIND 8.x located at: 
/usr/sbin/in.named
which is used as the default version of BIND in DNS Boss 
if nothing else is selected.

     To use another version of BIND, just select, or type 
in the complete path to the BIND executable you wish to
use in this window.  For example, one could install the 
free, pre-built or build it yourself Solaris package of 
BIND 9.x for Solaris which should be available at-
http://www.sunfreeware.com.  After installing the package, 
use this window to select:
/usr/local/sbin/named
and the http://www.sunfreeware.com pre-built version of 
BIND 9 should be capable of working.  Also make sure you 
select BIND 9.x on the main GUI window as the BIND version.






 
 
________________________________________________________________
 
 
SKIP ALL DNS RECORDS FOR THIS HOST
 





Skip all DNS records for this host

     In some cases it may be desireable to completely
skip all the DNS records for a given host in the host
file.  To do this, just add [no_dns] to the host file
behind the comment character.  Here is an example of
a host that would get all of its DNS records skipped:

201.188.104.120  panther  # [no_dns] Jane Doe





 
 
________________________________________________________________
 
 
SKIP DNS RECORD
 





Skip all DNS records for this host

     In some cases it may be desireable to not have 
a MX record.  To do this, just add [no_mx] to the 
host file behind the comment character.  Here is an 
example of a host that would get its MX record 
skipped:

201.188.104.110   casper   # [no_mx] John Doe





 
 
________________________________________________________________
 
 
SKIP MX
 





Skip MX record

     In some cases it may be desireable to not have a 
MX record.  To do this, just add [no_mx] to the host 
file behind the comment character.  Here is an 
example of a host that would get its MX record 
skipped:

201.188.104.110   casper   # [no_mx] John Doe





 
 
________________________________________________________________
 
 
SPINNING RED BALL
 





What is the spinning red ball


     The spinning red ball is "Io", one of Jupiters 
moons. 





 
 
________________________________________________________________
 
 
SUGGESTED SOLARIS CONFIGURATION FOR LARGE SITES
 





Suggested Solaris configurations for large DNS 
implementations spanning multiple geographic regions


     The following is a suggested configuration to 
get DNS BIND 8 or BIND 9 working in a very large site 
spanning multiple geographic regions running a 
centralized administration/staging server.  This 
configuration should be tested in a non-production 
environment first before it is put into a production
environment.

How to set up a DNS Boss Staging / Multiple Primary 
Configuration




"X" User Interface   Web User Interface
  Administration   Administration
       \            /
        \          /
         \        /
          \      /      
  DNS Boss Staging DNS Primary (Sender)
         \         \                         DNS Client
          \         \                      /
           \         \                    /
            \         Production         /
             \        DNS Boss Primary 1 --- DNS Client
              \       (Receiver)
               \
                \
                 \                           DNS Client
                  \                        /
                   \                      /
                    \                    /
                      Production        /
                      DNS Boss Primary 2 --- DNS Client
                      (Receiver)





     So why run multiple DNS primary servers and a 
separate Staging/Administration Server?  Lets ask a 
few very important questions:


QUESTION: Should the site DNS go down if somebody 
makes a mistake on their DNS maintenance?

ANSWER:  With the DNS Boss Staging Server setup, if 
somebody accidently tries to push bad data to all the 
DNS servers, it should only take down the the DNS 
Boss Staging Server DNS, but not the Production DNS 
Boss Primary DNS Servers.  DNS Boss does a huge 
amount of checking and simplification to verify the
correct creation of all DNS data.  If however, 
something slips through that causes a fatal error in 
the restart of BIND, then the DNS Boss Staging Server
will not push the DNS data to the Production DNS 
Boss Servers.  DNS Boss looks at the return status 
code for the restart of your version of BIND and 
will only push data to the Production DNS Servers 
if it sees a successful restart of BIND.  The DNS 
Boss staging server also automatically pings the 
Production DNS Servers before it attempts to 
replicate to verify that they are up to prevent 
pushes from hanging.


QUESTION:  Should the different DNS servers for the 
same DNS domain be out of sync?

ANSWER:  The DNS Boss Staging Server synchronizes 
the data on all Production DNS servers by pushing 
the exact data from the Staging Server to the 
Production Servers.


QUESTION:  What if there is a power blackout at the 
site where the main DNS Primary is located?  
Shouldn't the Production DNS servers located at 
other geographic locations still be able to do 
updates and modifications?

ANSWER:  With the DNS Boss Staging Server setup, if 
there were an extended power blackout where the main
DNS primary was located, a remote DNS Boss Production
DNS Primary located on the other side of the world 
could still do updates, or even take over as the 
DNS Boss Staging DNS Server.


     To install the DNS Boss DNS primary sender (Staging
DNS Server):
# /opt/DNSBoss/bin/dnsboss
Click on the Advanced menu and select:  
DNS Boss Replication Sender and fill in the information.

     To install the DNS Boss DNS primary receiver:
# /opt/DNSBoss/bin/dnsboss
Click on the Advanced menu and select:  
DNS Boss Replication Receiver and fill in the information.

     Then go to the DNS Boss DNS primary sender and
click "Update this domain" for any DNS domain.  On the
DNS Boss DNS primary receiver you should see the updates
come across on the receiver GUI.



     Simulated disaster and recovery.
Here is a suggested test to simulate a
disaster that should be performed so you know
what to do when a real disaster hits.
Shutdown your master DNS Boss primary, and
one of your Production DNS Boss Primary DNS
servers.  Example
stagingdns# init 0
ns1# init 0
and turn them both off.  This will simulate
a catastrophic disaster in 1 or more
geographic regions.  Go to your your surviving
Production DNS Primary, and add or delete
some hosts, and:  'Update this domain'.
This should work, and the fact that 2 out of
your 3 DNS primarys are down should not be
significantly noticed by the DNS clients.
The real advantage of doing this is that you
can carry on your business by adding or
deleting new DNS hosts, even while the other
DNS primarys servers are being maintained.
This would not be true if you were running a
Primary to Secondary configuration.  You
would not be able to make updates.






 
 
________________________________________________________________
 
 
UPDATE ALL DOMAINS
 





Update all domains

     This selection causes the DNS (Domain Name 
System) databases for all the DNS domains that this 
software maintains to be updated immediately.  
Before it does an update it also saves your current 
settings automatically.
     If the following selection is ever made under 
the "Advanced" menu: 
"Remove all DNS databases but not configuration data",
you must immediately select:  "Update all domains" 
under the "File" menu.





 
 
________________________________________________________________
 
 
UPDATE THIS DOMAIN
 





Update this domain

     This selection causes the DNS (Domain Name System)
databases for the current domain that this software
maintains to be updated immediately.  Before it does 
an update it also saves your current settings 
automatically. If there exists multiple DNS domains, 
all of the other domains DNS data will also become 
live to the state they were at the last time each of 
those domains got an "Update this domain".
     If the following selection is ever made under 
the "Advanced" menu: 
"Remove all DNS databases but not configuration data",
you must immediately select:  "Update all domains" 
under the "File" menu.





 
 
________________________________________________________________
 
 
USE CUSTOM DB CACHE FILE
 





Use custom db.cache file

     In some cases it may be desireable to  use a 
custom db.cache file.  This could be done if there 
was a need to maintain DNS for an isolated network 
not connected to the Internet.  The standard 
db.cache file is a list of DNS servers on the 
Internet that are at the very top level of the DNS 
tree.  In the following example:  
"www.some_company.com." the final "." is the 
equivalent to all of the machines in the db.cache 
file.  The final dot is not generally referred to 
because it is understood, but it does exist.  To 
better understand what "." is, try the following 
experiment:  

% ping  .
.  is alive
%

When the system says ".  is alive", it is saying 
that one of the machine in the db.cache file, at 
the very top level of the DNS tree, is on the 
network.  

     The standard db.cache file is always used by 
DNS Boss by default without selecting anything.  
You must select "Use custom db.cache file" if 
there is a requirement to maintain DNS from a network 
that is isolated from the rest of the Internet.  
To turn off the use of the custom db.cache, just 
select:  "Use the standard db.cache file".





 
 
________________________________________________________________
 
 
USE STANDARD DB CACHE FILE
 





Use standard db.cache file

     This option under the Advanced menu is used if 
you want to turn off the use of the custom db.cache 
file.  The default is that the standard db.cache is
always used.  The only time when the "Use standard 
db cache file" selection is needed is when there is 
a need to disable the use of the custom db.cache 
file.





 
 
________________________________________________________________
 
 
USER INTERFACES
 





User Interfaces

DNS Boss has several User Interfaces:

1) The standard X User Interface.

   Example:
   ________
   # /opt/DNSBoss/bin/dnsboss

2) The Web User Interface.
   To run the Web User Interface, a user must add an
   entry for themself in the /opt/DNSBoss/etc/passwd.txt
   file, and then start the DNS Boss Web application 
   server.  Nothing else should need to be configured
   to get the standard Web UI working.
   This would give jane_doe web access with a
   password of:  janes-secret-password, and she would
   have access to all DNS domains from the Web UI.

   Example:
   ________
   # vi /opt/DNSBoss/etc/passwd.txt
   jane_doe:janes-secret-password:*

   # /opt/DNSBoss/bin/S99dnsbossweb start
   # netscape https://localhost:8080

3) The Command Line User Interface.
   The following shows the Command Line Interface
   options.

   Example:
   ________
   # /opt/DNSBoss/bin/dnsboss_commandline -help
   /opt/DNSBoss/bin/dnsboss 
   /opt/DNSBoss/bin/dnsboss_commandline  -help
   /opt/DNSBoss/bin/dnsboss_commandline  -gui
   /opt/DNSBoss/bin/dnsboss_commandline  -autobuild_all_domains
   /opt/DNSBoss/bin/dnsboss_commandline  -autobuild       your_domain.com
   /opt/DNSBoss/bin/dnsboss_commandline  -autobuild_no_restart  your_domain.com
   /opt/DNSBoss/bin/dnsboss_commandline  -add_domain      your_domain.com
   /opt/DNSBoss/bin/dnsboss_commandline  -delete_domain   your_domain.com
   /opt/DNSBoss/bin/dnsboss_commandline  -converter
   /opt/DNSBoss/bin/dnsboss_commandline  -license_agree
   /opt/DNSBoss/bin/dnsboss_commandline  -add_ip_to_domain  your_domain.com  subnet  ip  name
   /opt/DNSBoss/bin/dnsboss_commandline  -add_host_to_next_available_ip  name your_domain.com  subnet  true
   /opt/DNSBoss/bin/dnsboss_commandline  -remove_host     name  your_domain.com
   /opt/DNSBoss/bin/dnsboss_commandline  -ip_exists       ip
   /opt/DNSBoss/bin/dnsboss_commandline  -name_exists_in_domain   name  yourdomain.com
   /opt/DNSBoss/bin/dnsboss_commandline  -list_all_domains
   /opt/DNSBoss/bin/dnsboss_commandline  -list_names_in_domain   yourdomain.com
   /opt/DNSBoss/bin/dnsboss_commandline  -list_ips_in_domain     yourdomain.com
   /opt/DNSBoss/bin/dnsboss_commandline  -list_subnets_in_domain     yourdomain.com
   /opt/DNSBoss/bin/dnsboss_commandline  -list_duplicate_names_in_domain    yourdomain.com
   /opt/DNSBoss/bin/dnsboss_commandline  -list_duplicate_cnames_in_domain   yourdomain.com
   /opt/DNSBoss/bin/dnsboss_commandline  -list_ips_in_all_domains  
   /opt/DNSBoss/bin/dnsboss_commandline  -list_subnets_in_all_domains
   /opt/DNSBoss/bin/dnsboss_commandline  -list_duplicate_ips_in_all_domains 
   /opt/DNSBoss/bin/dnsboss_commandline  -list_duplicate_ips_names_and_cnames_in_all_domains
   /opt/DNSBoss/bin/dnsboss_commandline  -list_percent_fill_of_ip_address_space_in_all_domains 
   /opt/DNSBoss/bin/dnsboss_commandline  -set_property default_dns_server ns1.yourdomain.com /opt/DNSBoss/etc/server.properties
   /opt/DNSBoss/bin/dnsboss_commandline  -license 
   /opt/DNSBoss/bin/dnsboss_commandline  -version 
   /opt/DNSBoss/bin/dnsboss_commandline  -show_authorized_domains  jane_doe
   /opt/DNSBoss/bin/lockdnboss 

4) The Java API.
   Because of the open, extensible, nature of DNS 
   Boss, Developers, Systems Integrators, and Systems 
   Administrators can easily extend the DNS Boss 
   product and integrate it into their environment.  
   Because it is widely accepted, powerful, and safe, 
   the Java programming language was selected as the 
   programming interface.  To see an already working, 
   pre-built, example which exercises most of the 
   capabilities of the Java API, do the following.

   Example:
   ________
   # cd /opt/DNSBoss/lib/tools/java_api
   # ./api_demo  
   
   To see the Java source used to run the api_demo, 
   just look at the APIDemo.java source.

   Example:
   ________
   # cat APIDemo.java 

/*
     APIDemo.java

     This stand alone Java application demonstrates 
     the features of the DNS Boss 
     Java API.  
*/




import java.util.Vector;
import java.util.TreeMap;
import java.util.Iterator;


class APIDemo {

     APIDemo() {
          DNSBoss myDNSBoss = new DNSBoss();

          System.out.println( "___________________________________________________________________________________" );

          TreeMap domainNamesTreeMap = myDNSBoss.getDomainNames();
          int domainNamesCounter = 0;
          for ( Iterator mainIterator = domainNamesTreeMap.keySet().iterator(); mainIterator.hasNext(); ) {
               ++domainNamesCounter;

               String dns_domain = (String)mainIterator.next();

               System.out.println( " " );
               System.out.println( "___________________________________________________" );
               System.out.println( "DNS domain #" + domainNamesCounter + ":        " + dns_domain );


               //
               // List all subnets.
               //
               TreeMap subNetsForDomainTreeMap = myDNSBoss.getSubNetsForDomain( dns_domain );
               int subNetsForDomainCounter = 0;
               for ( Iterator myIterator = subNetsForDomainTreeMap.keySet().iterator(); myIterator.hasNext(); ) {
                    ++subNetsForDomainCounter;
                    String subNet = (String)myIterator.next();
                    System.out.println( subNetsForDomainCounter + "     Subnets for     " + 
                                        dns_domain + ":  " + subNet );
               }

               //
               // List all available IP's for a subnet.
               //
               System.out.println( "___________________________________________________" );
               System.out.println( "Available IP's:" );
               TreeMap subNetsForDomainTreeMap1 = myDNSBoss.getSubNetsForDomain( dns_domain );
               subNetsForDomainCounter = 0;
               for ( Iterator myIterator = subNetsForDomainTreeMap1.keySet().iterator(); myIterator.hasNext(); ) {
                    ++subNetsForDomainCounter;
                    String subNet = (String)myIterator.next();
                    System.out.println( subNetsForDomainCounter + "     Subnets for     " + 
                                        dns_domain + ":  " + subNet );
                    Vector availableIPsVector = myDNSBoss.getAllAvailableIPsForDomainOnSubNet( dns_domain, subNet );
                    for ( int i=0;i < availableIPsVector.size();++i) {
                         String anAvailableIP = (String)availableIPsVector.elementAt(i);
                         System.out.println( "Available IP for domain:  " + dns_domain + " on subnet:  " + 
                                              subNet + "  IP:  " + anAvailableIP );
                    }
                    
               }
               System.out.println( "___________________________________________________" );
               System.out.println( " " );


               //
               // Add a host.
               //
               System.out.println( "___________________________________________________" );
               System.out.println( "Add hosts" );
               TreeMap subNetsForDomainTreeMap2 = myDNSBoss.getSubNetsForDomain( dns_domain );
               for ( Iterator myIterator = subNetsForDomainTreeMap2.keySet().iterator(); myIterator.hasNext(); ) {
                    String subNet = (String)myIterator.next();
                    // Use:  true to really write the next available IP.
                    boolean write = false;
                    String addHostToNextAvailableIP = myDNSBoss.addHostToNextAvailableIPForDomainOnSubNet( 
                                                           "robin", dns_domain, subNet, write );
                    System.out.println( "     Prepared to add:     " + addHostToNextAvailableIP );
               }

               //
               // List out names in a domain.
               //
               System.out.println( "___________________________________________________" );
               TreeMap namesInADomainTreeMap   = myDNSBoss.getNamesInADomain( dns_domain );
               int namesInADomainCounter = 0;
               for ( Iterator myIterator = namesInADomainTreeMap.keySet().iterator(); myIterator.hasNext(); ) {
                    ++namesInADomainCounter;
                    String name = (String)myIterator.next();
                    if ( namesInADomainTreeMap.containsKey( name ) ) {
                         System.out.println( namesInADomainCounter + "     Unique name for " + 
                                             dns_domain + ":  " + name );
                    }
                    System.out.println( "      " + name + "." + dns_domain + " exists:  " + 
                                        myDNSBoss.nameExistsInDomain( name, dns_domain ) );
               }

               //
               // List out unique IP's in a domain.
               //
               System.out.println( "___________________________________________________" );
               TreeMap uniqueIPsInADomainTreeMap   = myDNSBoss.getUniqueIPsInADomain( dns_domain );
               int uniqueIPsInADomainCounter = 0;
               for ( Iterator myIterator = uniqueIPsInADomainTreeMap.keySet().iterator(); myIterator.hasNext(); ) {
                    ++uniqueIPsInADomainCounter;
                    String ip = (String)myIterator.next();
                    if ( uniqueIPsInADomainTreeMap.containsKey( ip ) ) {
                         System.out.println( uniqueIPsInADomainCounter + "     Unique IP for   " + 
                                             dns_domain + ":  " + ip );
                    }
               }

               //
               // List out unique names in a domain.
               //
               System.out.println( "___________________________________________________" );
               System.out.println( "Hosts:" );
               Vector aDomainsHostDataVector    = myDNSBoss.getHostsInADomain( dns_domain );
               for ( int i=0;i < aDomainsHostDataVector.size();++i) {
                    HostEntry myHostEntry = (HostEntry)aDomainsHostDataVector.elementAt(i);
                    System.out.println( i + "     " + myHostEntry.getIP() + "  " + myHostEntry.getName() );
               }

               //
               // List duplicate names in a domain.
               //
               System.out.println( "___________________________________________________" );
               System.out.println( "Duplicate names in:  " + dns_domain );
               Vector duplicateNamesInADomainVector    = myDNSBoss.getDuplicateNamesInADomain( dns_domain );
               for ( int i=0;i < duplicateNamesInADomainVector.size();++i) {
                    System.out.println( duplicateNamesInADomainVector.elementAt(i) );
               }
               System.out.println( "___________________________________________________" );
               System.out.println( " " );

               System.out.println( "___________________________________________________________________________________" );
          }

          //
          // List all IP's and names in all domains.
          //
          System.out.println( "___________________________________________________________________________________" );
          System.out.println( " " );
          System.out.println( "Listing all IP's and names in all domains." );
          System.out.println( " " );
          displayTreeMap( myDNSBoss.getGlobalIPsAndNames() );
          System.out.println( " " );
          System.out.println( "___________________________________________________________________________________" );


          //
          // List all subnets in all domains.
          //
          System.out.println( " " );
          System.out.println( "Listing all subnets in all domains." );
          System.out.println( " " );
          displayTreeMap2( myDNSBoss.getGlobalSubNets() );
          System.out.println( " " );
          System.out.println( "___________________________________________________________________________________" );


          //
          // Listing all duplicate:  IP's, names, and CNAMES in all domains.
          //
          System.out.println( " " );
          System.out.println( "Listing all duplicate:  IP's, names, and CNAMES in all domains. " );
          System.out.println( " " );
          displayVector( myDNSBoss.getDuplicateIPsNamesAndCNamesInAllDomains() );
          System.out.println( " " );
          System.out.println( "___________________________________________________________________________________" );

         
          //
          // Listing only duplicate IP's in all domains.
          //
          System.out.println( " " );
          displayVector( myDNSBoss.getGlobalDuplicateIPs() );
          System.out.println( " " );
          System.out.println( "___________________________________________________________________________________" );

     }

     public void displayVector( Vector myVector ) {
          for(int i=0;i < myVector.size();++i) {
               System.out.println( (String)myVector.elementAt(i) );
          }
     }

     public void displayTreeMap( TreeMap myTreeMap ) {
          for ( Iterator myIterator = myTreeMap.keySet().iterator(); myIterator.hasNext(); ) {
               String data = (String)myIterator.next();
               System.out.println( myTreeMap.get( data ) );
          }
     }

     public void displayTreeMap2( TreeMap myTreeMap ) {
          for ( Iterator myIterator = myTreeMap.keySet().iterator(); myIterator.hasNext(); ) {
               String data = (String)myIterator.next();
               System.out.println( data );
          }
     }

     public static void main(String args[]) {
          new APIDemo();
     }

}




 
 
________________________________________________________________