# h2n

NAME
SYNOPSIS
DESCRIPTION
OPTIONS
RETURN VALUE
DIAGNOSTICS
EXAMPLES
DEPENDENCIES
VERSION

    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)