h2n(1)                                                                  h2n(1)

NAME
       h2n - Translate host table to name server file format

SYNOPSIS
       h2n [option-list]

DESCRIPTION
       h2n   translates   /etc/hosts  to  DNS  zone  files  and  creates  BIND
       named.[boot|conf] configuration files.  This tool can be  run  once  or
       many  times.   After  converting your host table to DNS format, you can
       manually maintain the DNS files, or you can maintain the host table and
       run  h2n each time you modify /etc/hosts.  h2n automatically increments
       the serial number in each DNS file when it makes a new one.

       h2n generates files starting with the prefix "db."   These  are  called
       "db  files."   The  domain  data are stored in a file called db.DOMAIN,
       where DOMAIN defaults to the first label in  your  domain  name  (given
       with  the  -d  option).   The  address-to-name data are stored in files
       named db.NET, where NET is a network number (given with the -n option).
       An  email  address of the person responsible for the domain is included
       in the start-of-authority record for the  domain  (given  with  the  -u
       option).

       Each  time  h2n  is  run, it generates the DNS files from scratch.  Any
       changes that were manually made to the DNS files are lost.  If you need
       to  add resource records to a db file generated by h2n, put the records
       in a file prefixed with "spcl." instead of "db."   h2n  will  add  this
       file's  data  by  appending  an  $INCLUDE  directive  to the end of the
       db.DOMAIN or db.NET file.  Top-of-zone, i.e., zone apex, records can be
       added  to the forward-mapping db.DOMAIN file with the -T option instead
       of placing them in a "spcl" file.  If a "spcl" file is present  for  -d
       DOMAIN,  h2n  will  first  read the DNS resource records from the file,
       check them for errors,  and  store  the  information  internally.   The
       "spcl" data is then referenced during subsequent processing of the host
       table to prevent conflicting DNS records from being generated.

       By default, the MX RRset of a host consists of a single MX record  with
       a  weight  of  10 that points to the host itself as the mail exchanger.
       The default MX RRset can be extended by specifying a global set  of  MX
       records  with  the  -m option.  All MX record generation for the domain
       can be suppressed by specifying the -M option.   To  fine-tune  the  MX
       RRset  on a host-by-host basis, the following flags can be specified in
       the comment field of the relevant host table entry:

       [no mx]    Suppress all MX record generation for a host.  This is  use-
                  ful  for  such  devices as printers and networking equipment
                  which do not need mailer information.

       [smtp]     Generate the default self-pointing MX  record  but  suppress
                  the  global MX record(s) from the -m option(s).  In environ-
                  ments that have a network firewall, this can be used to pre-
                  vent  external mail from reaching a host while still provid-
                  ing MX information for the routing of internal mail.

       [no smtp]  Suppress the default self-pointing MX record but include any
                  global  MX  record(s)  from the -m option(s).  Situations in
                  which this can be useful are:

                  *  A host no longer receives mail and its host name can  not
                     become an alias of the replacement mailhost.

                  *  All  mail should first be routed to one or more mail hubs
                     where virus and/or spam filtering can take  place  before
                     being delivered to the host's IP address.

                  Mail for hosts flagged with [no smtp] will instead be routed
                  to the highest-priority mailhost(s) in the set of global  MX
                  records.
                  NOTE: This  flag  requires  that  the  MTA (Message Transfer
                        Agent, e.g., sendmail, postfix, exim, etc.) running on
                        the  target mailhost(s) be configured to either accept
                        mail on behalf of the host having the [no  smtp]  flag
                        or  deliver  mail  to the flagged host's IP address in
                        lieu of the host's suppressed self-pointing MX record.

       Another  comment  section  flag  is  [TTL=num], where num is a specific
       time-to-live value to use for all resource  records  generated  from  a
       hostname  entry  in the host table.  This is useful for setting artifi-
       cially high or low TTL values for individual hosts.   For  example,  if
       you are going to be moving a host to a new IP address, you can use this
       to set a low TTL value such as 900 (seconds).  This limits how long the
       old  IP  address,  aliases,  and/or  MX  records will be cached on non-
       authoritative name servers.  The maximum any client will have  to  wait
       for  the  new  IP  address to be seen would be 15 minutes in this case.
       Time intervals can also appear symbolically as seconds, minutes, hours,
       days, and/or weeks, e.g., [TTL=15M], [TTL=2h30m], etc.

       The  [no  ptr]  flag  is available for situations where it's desired to
       suppress the creation of the reverse-mapping PTR record for a  particu-
       lar  host  table entry.  For example, if secondary A records are needed
       for a particular IP address, the additional names can either  be  added
       via  a "spcl" file or, perhaps more conveniently, entries with the same
       IP address but alternate names can be added to the host table.   Speci-
       fying  the  [no ptr] flag for the secondary entries leaves a single PTR
       record that points to the primary canonical hostname.

       [rafcp] is a comment field flag which causes certain records to be cre-
       ated  or  not  created.   Including [rafcp] in the comment section will
       cause WKS records indicating RAFCP support to be generated for the host
       and  suppress  generation  of all MX records, even those specified with
       the -m option.  This is to support routable AFCP on the TIO-side of  HP
       3000s which use Telnet Express Boxes as front ends.

       Three  additional  comment  field  flags  are  [no  -c],  [mh=...]  and
       [rp=...].  They correspond to and are documented in the sections  deal-
       ing with the -c, +m, and -r options, respectively.

       By  default,  h2n creates a BIND 4 boot file, ./named.boot (-b option),
       and a BIND 8/9 configuration file, ./named.conf (+c option).  Files for
       caching-only  name  servers,  ./[boot|conf].cacheonly, are also created
       unless they already exist.  If either of the -z or -Z options are used,
       h2n   creates   a   boot/conf  file  called  ./[boot|conf].sec.save  or
       ./[boot|conf].sec, respectively, for a slave  name  server.   h2n  will
       also  look for the following files and, if found, append their contents
       to the appropriate boot/conf files:

           ./spcl-boot or ./spcl-conf
           ./spcl-boot.sec or ./spcl-conf.sec
           ./spcl-boot.sec.save or ./spcl-conf.sec.save

       It is also possible to prepend site-specific configuration data such as
       ACL definitions to BIND 8/9 conf files with the +C option.

       When h2n starts, it will look for a special configuration file in which
       host-specific network connectivity information can be entered  to  help
       h2n  operate more efficiently in your environment.  The filename search
       paths are:

           $HOME/.h2nrc
           ./h2n.conf
           /etc/h2n.conf
           /etc/opt/h2n/h2n.conf
           /usr/local/etc/h2n.conf

       In addition to  host-specific  network  information,  h2n  command-line
       options  can  be included as a way to customize various default values.
       For more detailed documentation, refer  to  the  sample  h2n.conf  file
       which is included in the h2n distribution.

OPTIONS
       -a NET[:NETMASK|/CIDR [mode=S]] ...
            Add  information  about hosts from network NET to the -d DOMAIN db
            file.  This is similar to the -n option, but no PTR data is gener-
            ated,  i.e.,  no  db.NET  file  is  created.   This is useful when
            another server is responsible  for  address-to-name  mapping,  but
            this  server  is  responsible  for  name-to-address mapping.  CIDR
            sizes /8 to /32 are allowed with  the  default  being  /24  unless
            overridden by a previous -N option.  If NET is a supernet sized /8
            to /24 (class A, B, or C) under which smaller networks  (class  B,
            C, or sub-C) are delegated, the mode=S argument allows those dele-
            gated subnets to be specified in subsequent -n/-a options (see the
            +S  option  for details).  Including multiple NET arguments and/or
            -a options is allowed.

            Example:
                -a 192.249.249  15.15.16:255.255.248.0  15.0.48/21

       -A   Don't create name server data for aliases in the host table.

       -b BOOTFILE
            Use BOOTFILE (BIND 4) instead of the default: ./named.boot.

       -B PATH
            Sets  the  directory  where  boot/conf  files  will   be   written
            (named.[boot|conf],  [boot|conf].sec  and/or [boot|conf].sec.save,
            and [boot|conf].cacheonly).  You must specify  an  absolute  path-
            name.

       -c REMOTE-DOMAIN [mode=[A][I][D[Q]]] ...
            Create  CNAME  records  in the default domain for all the hosts in
            REMOTE-DOMAIN.  These CNAME records are generated before any other
            data  in  the  default  DOMAIN specified in the -d option, i.e, RR
            name conflicts favor the -c REMOTE-DOMAIN over the default DOMAIN.
            Also,  CNAME  records  are  only  generated for canonical names in
            REMOTE-DOMAIN - aliases are ignored.  This default behavior can be
            overridden by including one or more of the following mode= flags:

            A  Create additional CNAMEs for aliases in REMOTE-DOMAIN.

            I  Declare  REMOTE-DOMAIN  to be an intra-zone subdomain of the -d
               option DOMAIN, e.g., -c actor.movie.edu   mode=I  implies  that
               there  are  no  NS  records in the movie.edu zone that delegate
               actor.movie.edu to a child zone.  The subdomain "actor" is just
               another  DNS  label  that  a host within the movie.edu zone may
               have as part of its  domain  name.   The  resulting  intra-zone
               CNAME would be:

                   host.movie.edu.   CNAME   host.actor.movie.edu.

               After  the  CNAME is generated or registered, normal processing
               of the host table entry continues. i.e., A, PTR, and other  RRs
               are generated as necessary.

            D  Defer  creation of CNAMEs, i.e., RR names in the default DOMAIN
               takes precedence over naming conflicts in the REMOTE-DOMAIN.

            Q  Do not issue a warning message when a deferred CNAME can not be
               created  due to a naming conflict in the default DOMAIN.  Valid
               only when the D flag is also specified.

            Including multiple REMOTE-DOMAIN arguments and/or  -c  options  is
            allowed.   The  -c option can be effectively canceled for any host
            by including the [no -c] flag in its host table comment field.
            NOTE: The collection of REMOTE-DOMAIN names is sorted so that sub-
                  domains within a domain tree are matched before their parent
                  domains, i.e., the most specific domain matches  before  the
                  least  specific  one.  If a REMOTE-DOMAIN is a parent domain
                  of the -d option DOMAIN, an exception is  made  and  the  -c
                  option is NOT matched for host table entries matching the -d
                  DOMAIN.

       +c [CONFFILE] [mode=S|M]
            Use CONFFILE (BIND 8/9) instead of the default:  ./named.conf  The
            following optional mode= arguments are recognized:

            S  Create  CONFFILE  with  zone  statements in single-line format.
               This is the default.

            M  Create CONFFILE with zone statements  in  multi-line,  indented
               format.

       -C COMMENT-FILE
            Create  resource  records  by using keys in the host table comment
            field  as  indices  into  COMMENT-FILE.    COMMENT-FILE   contains
            "key:resource record" pairs, e.g.,

                B1000:IN HINFO hp9000-B1000 hp-ux

            When h2n encounters "B1000" in the comment section of the host ta-
            ble, it creates a resource record by replacing the  "B1000:"  with
            the host's canonical name.

       +C PRE-CONFFILE
            Prepend  the  contents of PRE-CONFFILE to the BIND 8/9 CONFFILE of
            the +c option.  Useful for holding ACLs, logging specifications as
            an  alternative  to the +L option, and/or option specifications if
            the +O option is used without an argument.

       -d DOMAIN [db=FILE1] [spcl=FILE2] [mode=D]
            Your domain name is DOMAIN.  Use the db= and/or spcl= arguments to
            override  the  default  filenames of db.LABEL and spcl.LABEL where
            LABEL is the first label of DOMAIN,  e.g.,  label.movie.edu.   Use
            the  mode=D  argument  to  set  the  default domain of unqualified
            canonical host names in the hostfile to DOMAIN.

       -e EXCLUDED-DOMAIN ...
            Exclude data from the  hostfile  with  names  in  EXCLUDED-DOMAIN.
            Specifying multiple EXCLUDED-DOMAIN arguments and/or -e options is
            allowed.
            NOTE: The collection of EXCLUDED-DOMAINs is sorted  so  that  only
                  the most top-level domain of a domain tree is kept since its
                  subdomains are essentially redundant in  this  context.   If
                  any EXCLUDED-DOMAIN is the parent of the DOMAIN specified in
                  the -d option and/or a REMOTE-DOMAIN of the  -c/-p  options,
                  an  exception is made and the DOMAIN or REMOTE-DOMAIN is NOT
                  excluded.

       -f FILE
            Command line options are read  from  a  file  called  FILE.   This
            option  cannot  be used within FILE.  Comments are allowed in FILE
            using the same style as in the host table or DNS  database  files,
            i.e.,  comments start after an unquoted "#" or ";" and continue to
            the end of the line.  The quoting characters ["'\] can be used  to
            quote  whitespace and are parsed using rules similar to the shell.

       -h HOST
            Set HOST in the MNAME  (master  name  server)  field  of  the  SOA
            record.  The default is the host on which you run h2n.

       -H HOSTFILE
            Use HOSTFILE instead of /etc/hosts.

       -i NUM
            Set the SOA serial number of all created zones to NUM.

            NOTE: Serial number changes comply with the wrap-around arithmetic
                  specified by RFC-1982.  Setting the -i option may require  a
                  subsequent  run  by h2n before NUM appears as the SOA serial
                  number.

       -I [ignore|warn|audit|audit-only|warn-strict|fail|strict] [rfc2782]
            Controls the level of checking done on hostnames  for  conformance
            to  naming  standards established by RFC-952 and RFC-1123.  The -I
            option accepts one of the following arguments  which  are  ordered
            such  that  each subsequent argument includes the functionality of
            the preceding one:

            ignore   Disables name checking and zone data auditing.

            warn     Issues a warning about hostnames and domain names that do
                     not conform to RFC-952 and RFC-1123.
                     NOTE: Hostname  aliases that generate a CNAME record type
                           (the most common case) are generally not subject to
                           the restrictions of these two RFCs.  This flexibil-
                           ity of alias names allows the  preservation  of  an
                           otherwise  illegal  hostname by making it become an
                           alias instead.

            audit    Issues a warning about -h/-s/-S/-m options that point  to
                     CNAMEs  or  nonexistent  domain  names.   If "spcl" files
                     exist, the same checks are also done with  NS,  MX,  SRV,
                     PTR, AFSDB, and RT records as well as checks for dangling
                     CNAMEs and RP records with missing  TXT  records.   Dele-
                     gated  subdomains  are  checked  for  having at least two
                     listed name servers, no missing glue records, no non-glue
                     records at or below zone cuts, and NS RRsets with consis-
                     tent TTL values.  This is the default setting.

            audit-only
                     Same as audit but excludes the name checking of the  warn
                     argument.

            warn-strict
                     Extends  conformance  checking to the RFC-952 requirement
                     that hostnames and their aliases in the host table be  at
                     least two characters in length.  Includes audit.

            fail     Performs  the same level of checking as the warn argument
                     except  that  non-compliant  hostnames  and  aliases  are
                     rejected.  Includes audit.

            strict   Performs  the  same  level of checking as the warn-strict
                     argument except that non-compliant hostnames and  aliases
                     are rejected.  Includes audit.

            rfc2782  May  be specified independently of the above arguments to
                     check for the presence  of  "_service._protocol"  as  the
                     leading labels in the owner names of SRV records.

            Operators  of  BIND  4/8  name  servers that are configured with a
            "check-names" option setting of "fail" should run h2n with the  -I
            fail option as well.

       -L NUM
            Explicitly use a file handle limit of NUM when generating database
            files.  Default value is 120.

       +L [LOG-SPEC]
            Add a logging  specification  to  the  config  files  (named.conf,
            conf.sec,  conf.sec.save).   If  you only specify +L, you'll get a
            simple logging specification that will eliminate a  lot  of  bogus
            information  that  would  otherwise  fill up your syslog.  You can
            override this by giving your own entries, e.g.,

                +L category lame-servers { null; };

            For each +L LOG-SPEC option that is specified, a  line  containing
            the LOG-SPEC is added in the config file, thus including more than
            one +L option is allowed.  Omitting this option will also omit any
            logging specification from appearing in the config files.  See the
            named man page for valid logging options.

       -m WEIGHT:MX-HOST ...
            Include an MX record that points to MX-HOST  at  WEIGHT  for  each
            host  in your domain which has neither the [no mx] nor [smtp] com-
            ment field flags.   Including  multiple  WEIGHT:MX-HOST  arguments
            and/or -m options is allowed.

            Example:
                -m 10:terminator.movie.edu  20:wormhole

       +m [D|C|P|CP]
            Controls  the  method by which DNS records get generated for hosts
            with multiple addresses.  By default, the canonical name  of  such
            multi-homed  hosts  is  assigned  an  A  record  for each address.
            Aliases unique to one address  are  also  assigned  an  A  record.
            Aliases  common to all addresses are assigned a CNAME record.  The
            PTR record for each address points to the multi-address  canonical
            name.   This  default behavior can be overridden by specifying one
            of the following flags:

            D  Same as the default behavior.

            C  The first alias unique to one address is still  assigned  an  A
               record  but  subsequent  aliases  unique  to  the  address  are
               assigned CNAME records which point to the first alias.

            P  PTR records do not point to the  multi-address  canonical  name
               but  instead point to the first alias having an A record, i.e.,
               the unique name of the specific network interface.

            Combining the C and P flags is allowed.  These  global  specifica-
            tions  can  be  overridden for any host by including the analogous
            [mh=d|c|p|cp] flag in its host table comment field.

       -M   Don't generate MX records.

       -n NET[:NETMASK|/CIDR [mode=S] [domain=NETDOMAIN] [ptr-owner=TEMPLATE]]
            Add information about hosts from network NET to the -d  DOMAIN  db
            file.  CIDR sizes /8 to /32 are allowed with the default being /24
            unless overridden by a previous -N  option.   For  CIDR  sizes  /8
            through  /24, PTR data is written to the corresponding db.NET file
            in the "in-addr.arpa" domain.  Specifying a CIDR size of /8, e.g.,
            -n  NET/8,  will  cause PTR data to be written to a single class-A
            db.NET file.  CIDR sizes 9 through 16 will  cause  the  equivalent
            number  of  class-B  db.NET  files  to  be created.  CIDR sizes 17
            through 24 will cause the  equivalent  number  of  class-C  db.NET
            files  to be created.  If NET is a supernet sized /8 to /24 (class
            A, B, or C) under which smaller networks (class B,  C,  or  sub-C)
            are  delegated, the mode=S argument allows those delegated subnets
            to be specified in subsequent -n/-a options (see the +S option for
            details).   For sub-class-C networks, i.e., CIDR sizes /25 through
            /32, refer to the following sections that explain the domain=  and
            ptr-owner= arguments for details regarding various default values.
            Including multiple NET arguments and/or -n options is allowed.

            domain=NETDOMAIN (for NET/25 to NET/32 only)
                Specifies that the PTR records are to reside in the  DNS  zone
                NETDOMAIN.   If  omitted,  NETDOMAIN  defaults  to  the naming
                scheme illustrated by the following examples:

                    192.168.4.0/25  ->  0-127.4.168.192.in-addr.arpa
                    192.168.4.0/26  ->  0-63.4.168.192.in-addr.arpa
                    192.168.4.0/27  ->  0-31.4.168.192.in-addr.arpa
                    192.168.4.0/28  ->  0-15.4.168.192.in-addr.arpa
                    192.168.4.0/29  ->  0-7.4.168.192.in-addr.arpa
                    192.168.4.0/30  ->  0-3.4.168.192.in-addr.arpa
                    192.168.4.0/31  ->  0-1.4.168.192.in-addr.arpa
                    192.168.4.0/32  ->  0.4.168.192.in-addr.arpa

                The default reverse-mapping db  files  that  h2n  creates  are
                named according to the following pattern:

                    192.168.4.0/25  ->  db.192.168.4.0-127
                    192.168.4.0/26  ->  db.192.168.4.0-63
                    192.168.4.0/27  ->  db.192.168.4.0-31
                    192.168.4.0/28  ->  db.192.168.4.0-15
                    192.168.4.0/29  ->  db.192.168.4.0-7
                    192.168.4.0/30  ->  db.192.168.4.0-3
                    192.168.4.0/31  ->  db.192.168.4.0-1
                    192.168.4.0/32  ->  db.192.168.4.0

                Special  characters  that  are  are valid in a domain name but
                troublesome in filenames will get translated to the "%"  char-
                acter in the db files, e.g.,

                    domain=0/28.4.168.192.in-addr.arpa  ->  db.192.168.4.0%28

                PTR  records  can  even  be  written to the forwarding-mapping
                DOMAIN in the -d option, i.e., domain=DOMAIN, as long  as  the
                -d option precedes the -n option.  Additional resource records
                can be added to a spcl.NET file where NET  is  suffix  of  the
                corresponding  db.NET file.  h2n will append such "spcl" files
                to their matching "db" files via an $INCLUDE directive.

            ptr-owner=TEMPLATE (for NET/25 to NET/32 only)
                Specifies that TEMPLATE be used  to  build  the  zone-relative
                names  in the owner field of PTR records in the NETDOMAIN zone
                file.  Substitution tokens based upon each octet  of  an  IPv4
                address  are  used to construct the appropriate TEMPLATE.  The
                octet tokens (from left to right) are "$1",  "$2",  "$3",  and
                "$4".   To  illustrate  this  concept, here are the fixed tem-
                plates used by h2n to construct PTR owner names for  class  A,
                B,  and  C  NETs  given  a  host  name  with  an IP address of
                "A.B.C.D":

                    Class-A network:
                         $ORIGIN  A.in-addr.arpa.
                         D.C.B      PTR      host.example.com.
                        --------
                        $4.$3.$2  <- effective template
                        -n A/8      (domain=A.in-addr.arpa)
                                    (ptr-owner=$4.$3.$2   )
                                     ^^^^^^^^^^^^^^^^^^^^^
                                      effective arguments

                    Class-B network:
                         $ORIGIN  B.A.in-addr.arpa.
                         D.C        PTR      host.example.com.
                        -----
                        $4.$3    <- effective template
                        -n A.B/16  (domain=B.A.in-addr.arpa)
                                   (ptr-owner=$4.$3        )
                                    ^^^^^^^^^^^^^^^^^^^^^^^
                                      effective arguments

                    Class-C network:
                         $ORIGIN  C.B.A.in-addr.arpa.
                         D          PTR      host.example.com.
                        ---
                        $4         <- effective template
                        -n A.B.C/24  (domain=C.B.A.in-addr.arpa)
                                     (ptr-owner=$4             )
                                      ^^^^^^^^^^^^^^^^^^^^^^^^^
                                         effective arguments

                If the ptr-owner= argument is omitted,  TEMPLATE  defaults  to
                "$4".  For example, given the following host table:

                    192.168.4.0  drama.movie.edu
                    192.168.4.1  comedy.movie.edu
                    192.168.4.2  action.movie.edu
                    192.168.4.3  cartoon.movie.edu

                and the following RFC-2317 delegation in NET's parent zone:

                    $ORIGIN 4.168.192.in-addr.arpa.
                    $GENERATE  0-3   $    CNAME   $.0-3
                    0-3                   NS      ns1.movie.edu.
                                          NS      ns2.movie.edu.

                The  following  -n  option  would  generate  the  required PTR
                records in file db.192.168.4.0-3:

                    -n 192.168.4.0/30

                    $ORIGIN 0-3.4.168.192.in-addr.arpa.
                    0     PTR     drama.movie.edu.
                    1     PTR     comedy.movie.edu.
                    2     PTR     action.movie.edu.
                    3     PTR     cartoon.movie.edu.

                To  illustrate  the  flexibility  in   accommodating   various
                RFC-2317  naming  schemes, suppose that the PTR records are to
                be mapped back to the "movie.edu" zone like so:

                    $ORIGIN 4.168.192.in-addr.arpa.
                    $GENERATE  0-3  $  CNAME  192-168-4-$.movie.edu.

                The following h2n options would  be  needed  to  generate  the
                required owner names of the PTR records in file db.movie:

                    -d movie.edu
                    -n 192.168.4.0/30  domain=movie.edu  ptr-owner=$1-$2-$3-$4

                    $ORIGIN movie.edu.
                    192-168-4-0      PTR     drama
                    192-168-4-1      PTR     comedy
                    192-168-4-2      PTR     action
                    192-168-4-3      PTR     cartoon
                    drama            A       192.168.4.0
                    comedy           A       192.168.4.1
                    action           A       192.168.4.2
                    cartoon          A       192.168.4.3

       -N NETMASK|/CIDR
            Apply NETMASK or CIDR to all subsequent -n/-a  NET  specifications
            as  an alternative to specifying the size of each NET.  Specifying
            a subnet mask or CIDR size with -n/-a overrides the -N subnet mask
            or  size  for  that NET only.  May be specified multiple times for
            different blocks of -n/-a NETs.  CIDR sizes /8 to /32 are allowed.

       -o [REFRESH]:[RETRY]:[EXPIRE]:[MINIMUM]:[DEFAULT-TTL]
            Change  the  default  SOA values to the values provided.  For name
            servers running versions of BIND prior to 8.2, the default  values
            are  (10800:3600:604800:86400).   For versions 8.2 and later which
            implement  RFC-2308,  the  defaults  are  (3H:1H:1W:10M:1D)   with
            DEFAULT-TTL appearing in a $TTL directive and MINIMUM being seman-
            tically treated as a negative caching value.  h2n will always  try
            to determine the BIND version of the master name server (-h option
            or localhost) and act accordingly.  However, if the  BIND  version
            is  unavailable,  h2n  version 2.40 and later will create RFC-2308
            formatted zone files by default *unless* the -o option  is  speci-
            fied with exactly four explicit and/or placeholder values.
            NOTE: These  built-in default values do not override those in zone
                  files that already exist.  Use the -o option to specify  SOA
                  values  that  will  override those in existing zone files as
                  well as becoming the default  values  for  new  zone  files.
                  Also,  existing  $TTL  directives will force RFC-2308 format
                  unless the detected BIND version is less than 8.2, in  which
                  case the directives will be removed.

            Examples:
                -o ::::12H
                    Generates a "$TTL 12H" directive in all zone files.

                -o :::12H
                    Generates  a  non-RFC-2308  TTL  of 12H in the SOA MINIMUM
                    field of all zone files *if* the detected BIND version  is
                    less than 8.2 or is unavailable.

                -o :::
                    Generates  the  same  non-RFC-2308  format as the previous
                    example but using the built-in default SOA values instead.

       -O OPTION OPTION-ARGS
            Add  a  boot  option  specification to the boot files (named.boot,
            boot.sec, boot.sec.save), e.g.,

                -O options no-round-robin

            See the named man page for valid options.  Including more than one
            -O option is allowed.

       +O [OPTION-SPEC]
            Add   an   option   section  specification  to  the  config  files
            (named.conf, conf.sec, conf.sec.save), e.g.,

                +O round-robin no;

            For each +O OPTION-SPEC option that is specified, a line  contain-
            ing  the  OPTION-SPEC  is added to the config file, thus including
            more than one +O OPTION-SPEC option is allowed.  If you use a sin-
            gle +O option without an argument, the global options section will
            not be generated.  This is useful if you want to maintain  a  main
            named.conf  file  for your master and slaves with a complex mix of
            options  {},  logging  {},  and/or  other  global  sections,   and
            "include" the h2n-generated zone sections.  Combine this with a +c
            option.

       +om OPTION OPTIONS-ARGS
            Adds a zone-specific option to the config file (named.conf), e.g.,

                +om also-notify { 15.1.2.3; 15.1.2.4; };

            This option is position dependent and applies to the last -d or -n
            option specified, however, if a +om option appears before  any  -d
            or  -n  options  it  is assumed that the +om option applies to all
            zones.  Thus, it will be added to each zone section in the  config
            file.  Including multiple OPTION/OPTION-ARGS argument pairs and/or
            +om options is allowed.

       +os OPTION OPTIONS-ARGS
            Adds a zone-specific option to the config files  (conf.sec  and/or
            conf.sec.save), e.g.,

                +os max-transfer-time-in 60;

            Like  the  +om option, it is position dependent and applies to the
            last -d or -n option specified.  Also, if  a  +os  option  appears
            before  any -d or -n options it is assumed that the +os applies to
            all zones.  Including multiple OPTION/OPTION-ARGS  argument  pairs
            and/or +os options is allowed.

       -p REMOTE-DOMAIN [mode=A|P]
            Create  only  PTR data for hosts in REMOTE-DOMAIN.  This is useful
            when a different server is responsible for the  forward  (name-to-
            address)   mapping  data  of  REMOTE-DOMAIN  but  this  server  is
            responsible for the reverse (address-to-name) mapping data of each
            -n  option.   Including multiple REMOTE-DOMAIN arguments and/or -p
            options is allowed.  Each REMOTE-DOMAIN may need a mode=  argument
            with one of the following flags:

            A  Required  for  each REMOTE-DOMAIN which had its forward mapping
               data built with the h2n -A option  in  effect.   This  prevents
               dangling PTR records from being generated for multi-homed hosts
               in REMOTE-DOMAIN having the [mh=p] or [mh=cp] flag in the  com-
               ment  field  of  the  host  table.  Can also be specified as an
               override flag for REMOTE-DOMAIN when the  +m  P  option  is  in
               effect.

            P  Enables  the  alternate  method  of  PTR  record generation for
               multi-homed hosts in REMOTE-DOMAIN as previously described  for
               the +m P option when that option is not in effect.  This method
               is overridden for any host in REMOTE-DOMAIN having  the  [mh=d]
               or [mh=c] flag in its comment field.

            NOTE: The collection of REMOTE-DOMAIN names is sorted so that sub-
                  domains within a domain tree are matched before their parent
                  domains,  i.e.,  the most specific domain matches before the
                  least specific one.  If a REMOTE-DOMAIN is a  parent  domain
                  of  the  -d  option  DOMAIN, an exception is made and the -p
                  option is NOT matched for host table entries matching the -d
                  DOMAIN.

       -P   Preserve upper-case characters of hostnames and aliases.  Requires
            the "Tie::CPHash" Perl module to be available.

       -q   Work quietly.

       -r   Enable creation of RP  (Responsible  Person)  records.   Look  for
            strings  in  the  comment  fields  of  the  host  table that match
            [rp=mail-addr[ text]], where mail-addr is a usual  e-mail  address
            specification,  and  (optionally)  text is a free-form text string
            (usually containing a phone number and/or pager number,  or  other
            info).  This construct is converted to an RP record containing the
            e-mail address, and if text is present, a TXT record is also added
            containing text (with the RP record referencing the TXT record).

       -s SERVER ...
            List SERVER for all zones.  Adds NS records for the zone(s) corre-
            sponding to the -d option and all -n options.  Including  multiple
            SERVER arguments and/or -s options is allowed.

       -S SERVER ...
            List SERVER for specific zone(s).  Adds NS records for the zone(s)
            corresponding to the last preceding -d or -n option  (this  option
            is  position  dependent).   There  can  be  multiple zones if this
            applies to a  -n  option.   Including  multiple  SERVER  arguments
            and/or -S options is allowed.

       +S [enable|disable]
            Control  the ability of class A, B, or C NETs to act as supernets,
            i.e., parent networks, for subsequent -n/-a options which  specify
            a  subNET of a smaller class (B, C, or sub-C).  When h2n reads its
            option list, each -n/-a NET is checked to see if has any  overlap-
            ping  IP  addresses with a previously-specified NET.  If an inter-
            class overlap exists, the default behavior is to treat the  situa-
            tion as an ambiguous data entry error, e.g.,

                -n 192.168/16
                -a 192.168.1/24
                Improper -a option (-a 192.168.1/24).
                It overlaps with a network of a different class from a
                previous option:
                  -n 192.168/16
                They can't simultaneously specify a part of the same DNS
                address-to-name space.

            However,  the  overlapping  -n/-a options in the preceding example
            are exactly what is needed in the scenario where:

                1. The file "spcl.192.168" exists and contains NS records
                   which delegate the reverse-mapping name space for
                   192.168.1/24 to other name servers.  Remember that
                   any spcl.NET file that h2n finds is appended to
                   the appropriate db.NET file that gets created.

                2. The host table being used has entries for both parent
                   (192.168/16) and delegated (192.168.1/24) networks.

            When inter-class network overlaps need to exist as  -n/-a  options
            to  accommodate reverse-mapping delegations, the +S option must be
            specified so that the appropriate supernet(s) can be recognized as
            such.   In  the  current  example, specifically assigning supernet
            status  to  the  192.168/16  network  prevents   the   overlapping
            192.168.1/24  network  from being rejected when the option list is
            processed.  The -a option is then able to match  IP  addresses  in
            the  192.168.1/24  network  and  prevent  their  corresponding PTR
            record(s) from being matched and created in  the  db.192.168  zone
            data file, e.g.,

                +S
                -n 192.168/16
                +S disable
                -a 192.168.1/24

            Once the +S option is specified, all subsequent class A, B, and/or
            C NETs declared with the -n/-a options are considered to be super-
            nets relative to any smaller-classed subNET until cancelled by the
            +S disable option.  Multiple +S enable/disable blocks may be used.

            As  mentioned  in  the descriptions for the -n and -a options, the
            mode=S argument may also be used as an alternate way to declare an
            individual NET to be supernet, e.g.,

                -n 192.168/16  mode=S
                -a 192.168.1/24

            NOTE: -n/-a  options that are declared to be supernets must appear
                  before the corresponding -n/-a options for  the  overlapping
                  subnets  since h2n processes these options in a single pass.
                  Also, care should be taken  not  to  overuse  the  +S/mode=S
                  supernetting  feature.   Doing  so prevents the detection of
                  unintended network overlaps.

       -t   Generate TXT records from the host  table  comment  section.   Any
            special h2n processing flags are ignored, e.g., [no smtp].

       +t DEFAULT-TTL [MINIMUM-TTL]
            Create  an  RFC-2308  $TTL directive at the top of all zone files.
            If the MINIMUM-TTL argument is specified, use that as the negative
            caching interval instead of the default value of 10 minutes.

       -T [mode=M] [RR='DNS RR' [RR='...']] [ALIAS='NAME [TTL]'] ...
            Add  additional  top-of-zone-related  records  to DOMAIN of the -d
            option as an alternative to creating them in a "spcl"  file.   The
            following arguments are recognized:

            mode=M  Add the global MX record set from the -m option(s).

            RR=     Add 'DNS RR' with the owner field set to whitespace or the
                    RFC-1035 "@" symbol.  Any DNS record type that is  contex-
                    tually  valid  in  the  zone  apex  can be specified.  The
                    appropriate quotes must enclose 'DNS RR' with its embedded
                    whitespace to capture it as a single argument.

            ALIAS=  Add  a  CNAME  having NAME in the owner field which has an
                    RDATA field that points to "@",  the  zone  apex.   If  an
                    optional TTL is specified, the 'NAME TTL' argument must be
                    enclosed in the appropriate quotes.

            Including multiple RR= and/or ALIAS= arguments and/or  -T  options
            is allowed.

       -u CONTACT
            Set  CONTACT  as the e-mail address in the RNAME (responsible per-
            son) field of the SOA record.  CONTACT should be a  complete  mail
            address, e.g.,

                hostmaster@movie.edu

            Defaults to root@DOMAIN (-d option).  Periods in the username-por-
            tion of the address, e.g.,

                Sam.Spade@movie.edu

            will be escaped if necessary.
            NOTE: If CONTACT lacks the "@" symbol and has a  trailing  period,
                  RNAME format will be assumed and CONTACT left unchanged.

       -v   Display the version number of h2n.

       -V DOMAIN
            Verify the integrity of a domain by performing a zone transfer and
            analyzing the data.  All of the checks described above for the  -I
            audit  option  are  done  plus  those  for  "CNAME and other data"
            errors.  In addition, listed name servers are checked  for  proper
            delegation.  Including multiple DOMAIN arguments and/or -V options
            is allowed.

       -w   Generate WKS records that list the SMTP service over the TCP  pro-
            tocol if an MX record is also created.

       -W PATH
            Sets  the  directory  where db files will be located on the master
            and slave name servers.  This is useful if you build new db  files
            on  a  host  other  than the master.  You must specify an absolute
            pathname.

       -y [mode=D|M]
            Set the SOA serial number of all created zones to use a  date/ver-
            sion  format.   The default format is YYYYMMDDvv where YYYY is the
            year, MM is the month, DD is the day of the month, and "vv" is the
            version  counter that starts at 00 and increments each time h2n is
            run on the same day.  The consistent appearance of this format  in
            the  SOA  record  implies  a limit of 100 updates per day.  The -y
            option may be specified with one of the following mode= flags:

            D  Set the daily format of YYYYMMDDvv (default).

            M  Set the monthly format of YYYYMMvvvv.  This allows up to 10,000
               updates per month to be made.

            NOTE: Serial number changes comply with the wrap-around arithmetic
                  specified by RFC-1982.  If setting the  -y  option  for  the
                  first  time,  it may take a subsequent run by h2n before the
                  desired format is achieved.

       -z ADDRESS ...
            Create a boot/conf file, ./[boot|conf].sec.save, for a slave  name
            server  that  lists ADDRESS as the master to load from, and save a
            copy of the zone data in a backup file.  (This option  is  similar
            to the -Z option).  Including multiple ADDRESS arguments and/or -z
            options is allowed.

       -Z ADDRESS ...
            Create a boot/conf  file,  ./[boot|conf].sec,  for  a  slave  name
            server  that  lists ADDRESS as the master to load from, and do not
            save a copy of the data in a backup file.  (This option is similar
            to the -z option).  Including multiple ADDRESS arguments and/or -Z
            options is allowed.

       [-no]-recurse
            Controls whether or not delegated subdomains are themselves recur-
            sively verified after completing verification of the parent domain
            with the -V option.  Default is -no-recurse.

       [-no]-check-del
            Controls delegation checking when verifying one  or  more  domains
            with  the  -V  option.  NS records that delegate child domains are
            also checked.  Default is -check-del.

       [-no]-show-nxdomain-cnames
            Controls the display of  non-existent  external  domain  names  to
            which an internal CNAME points, i.e., "dangling" CNAMEs, if audit-
            ing is  in  effect.   CNAMEs  pointing  to  non-existent  internal
            domains are always reported.  Default is -show-nxdomain-cnames.

       [-no]-show-chained-cnames
            Controls the display of each element of an external CNAME chain to
            which an internal CNAME points.  The default behavior [-no] is  to
            ignore CNAME chains that successfully resolve and display just the
            chain length of dangling or looping CNAMEs.

       [-no]-debug[:DIRECTORY]
            Controls the removal of all temporary files that get created  dur-
            ing the course of normal processing including a zone transfer file
            obtained with the -V option. If a domain is being  reverified  and
            the  zone  transfer  file  still  exists  from a previous run with
            -debug, then respecifying the -debug option will cause the  exist-
            ing zone transfer data to be used instead of requesting a new copy
            of the zone from an authoritative name  server.   Temporary  files
            are  created  in  the  /tmp  directory  unless  overridden  by the
            optional DIRECTORY argument.  Default is -no-debug.

RETURN VALUE
       h2n returns the following exit codes:

            0    Successful completion.  Review standard error for  incidental
                 messages.

            1    Data  generation error.  Review standard error for message(s)
                 related data errors that would prevent DNS zones  from  being
                 loaded and/or cause name server interoperability issues.

            2    Abnormal end of program.  Review standard error for cause.

DIAGNOSTICS
       Error messages that occur when h2n processes its options list are self-
       explanatory and usually result in abnormal program termination.   Warn-
       ing  messages  related  to the processing of data in the host table and
       "spcl" files attempt to achieve concise clarity but do assume that  the
       user has basic knowledge of the DNS-related RFCs.

       When  a DNS zone is audited, various validity checks are done depending
       on the type of record being inspected (NS, MX,  etc.).   h2n  looks  up
       intra-zone  data  in  its  internal tables and calls the DiG program to
       make DNS queries for resolving references to extra-zone  domain  names.
       The following status codes are used to report badly configured data and
       DNS query failures:

       [CNAME chain ]  The domain name is an extra-zone CNAME that  points  to
                       another CNAME.  The total chain length appearing within
                       parentheses immediately follows.

       [ CNAME loop ]  The domain name is an extra-zone CNAME which ultimately
                       points  back  to itself.  If a CNAME chain is involved,
                       the total length appearing within  parentheses  immedi-
                       ately follows.

       [CNAME record]  The domain name refers to a CNAME record when it should
                       properly point to another record type, most  likely  an
                       address  record  (A,  AAAA,  or  A6).   In  addition to
                       address records, PTR records can point to NSAP  records
                       (RFC-1706) while RT records can also reference ISDN and
                       X25 records (RFC-1183).

       [(*) CNAME RR]  Same as above except that the  domain  name  matches  a
                       wildcard CNAME record.

       [ (*) MX RR  ]  Same  as  above  except  that the domain name matches a
                       wildcard MX record.

       [no addr. RR ]  The domain name  exists  and  should  have  an  address
                       record  (A,  AAAA,  or  A6) but no such RR type exists.
                       Also implies that no NSAP record exists if auditing PTR
                       records  and  no ISDN nor X25 records exist if auditing
                       RT records.

       [(*) non-A RR]  Same as above except that the  domain  name  matches  a
                       wildcard record that is not type A, AAAA, or A6.

       [ no TXT RR  ]  The domain name exists and should have a TXT record but
                       no such record type exists.

       [(*)nonTXT RR]  Same as above except that the  domain  name  matches  a
                       wildcard record that is not type TXT.

       [no A record ]  The  extra-zone  domain  name exists and should have an
                       address record but a DNS query returned no A RRs.

       [no such name]  The intra-zone domain name does not exist.

       [no RRs exist]  The domain name exists as a node in the DNS name  space
                       but  no  DNS  resource  records are associated with the
                       name.

       [  NXDOMAIN  ]  The requested extra-zone domain name does not exist.

       [  FORMERR   ]  The name server was unable to interpret the  DNS  query
                       due to a format error.

       [  SERVFAIL  ]  The  name  server encountered an internal failure while
                       processing the query, for example an  operating  system
                       error, a forwarding timeout, or a failure to load a DNS
                       zone due to bad data.

       [   NOTIMP   ]  The name server did not support the specified query.

       [  REFUSED   ]  The name server refused to perform the specified  query
                       for policy or security reasons.

       [ timed out  ]  The DNS query made by the DiG program timed out.

       [con. refused]  A  query was directed to a host which was not running a
                       name server process.

       [  no route  ]  A query was directed to an unreachable host.

       [unreachable ]  A query was directed to a host on an  unreachable  net-
                       work.

       [bad DNS msg.]  DiG received a malformed response to its DNS query.

       [buffer error]  An  overrun occurred in DiG's command buffer.  This can
                       be alleviated by running DiG 8.3 or newer.

       [sync. error ]  DiG generated unexpected output that  was  detected  by
                       h2n's internal parser.

EXAMPLES
       Create  name  server  data  for networks 192.249.249 and 192.253.253 in
       movie.edu.

           h2n -d movie.edu -n 192.249.249 -n 192.253.253

       Create name server data for networks 192.249.249/24 and  192.253.253/24
       in  "movie.edu".   Eliminate  lines  in  the  host  table  that contain
       "fx.movie.edu" and include an MX record for all hosts  that  points  to
       the  mail hub "postmanrings2x.movie.edu".  Afterwards, append the addi-
       tional resource records in the file spcl.movie.edu to db.movie  via  an
       $INCLUDE directive.  Put all of the options in a file that h2n can read
       with the -f option.

           h2n -f option_file

           option_file contains the following lines:

           -d movie.edu  spcl=spcl.movie.edu
           -n 192.249.249
           -n 192.253.253
           -e fx.movie.edu
           -m 50:postmanrings2x.movie.edu

       If the Web server has the following host file entry:

           192.253.253.80  web.movie.edu

       The following -T option enables the URLs

           http://movie.edu
           http://www.movie.edu

       to resolve to the site's Web server as well as  adding  the  global  MX
       record(s)  from  the  -m  option(s)  to the zone apex in lieu of adding
       records to a "spcl" file:

           -T RR='@ A 192.253.253.80'  ALIAS=www  mode=M

DEPENDENCIES
       h2n requires Perl 5 in order to run.   The  -P  option  for  preserving
       upper-case  characters in the host file requires the "Tie::CPHash" Perl
       module to be installed.  This module can be obtained from  the  Compre-
       hensive Perl Archive Network (CPAN) site at:

           http://search.cpan.org/search?module=Tie::CPHash

       The  DiG  program is required for certain options (-V, -I audit) and to
       obtain the version of BIND that is running on the  master  name  server
       (-h  option)  in  order to optimize its functionality.  The source code
       for DiG is available in the standard BIND distribution at:

           http://www.isc.org/products/BIND

       The "check_del" utility.  You have a couple of choices:

       1.  Use the version written in Perl that's included with the  h2n  dis-
           tribution.   You'll  need the Net::DNS module which can be obtained
           from one of the following sites:

               http://search.cpan.org/search?module=Net::DNS
               http://www.net-dns.org/

       2.  A version written in C can be found  in  the  BIND  8  distribution
           under  the contrib/nutshell directory.  You'll have to compile BIND
           first since "check_del" needs to be  linked  with  some  of  BIND's
           static libraries.

       "check_del"  is  only  needed when h2n is used to verify a DNS zone via
       the -V option.

VERSION
       This documentation describes h2n version 2.56.

h2n(1)                          March 31, 2004                          h2n(1)

