mkpath(8)


NAME
     mkpath - make a pathalias output file

SYNOPSIS
     /usr/lib/smail/mkpath [-v] [-V] [-x] [-e] [-n] [ -t trace ] [ path_config
     ]
     /usr/lib/smail/dcasehost [ -c ]

DESCRIPTION
     Mkpath creates  pathalias(8)  output  given  a  configuration  file  that
     describes  the  various  sources of input that will be used in generating
     this output, and how these sources of input are to be used.  The name  of
     this  configuration  file  is  given  as  the  path_config  argument.  If
     path_config is -, then a specification will be taken  from  the  standard
     input.   If  path_config  is  omitted,  then  the  default  specification
     /usr/lib/smail/maps/mkpath.conf  is  used.   Unless  redirected  in   the
     configuration file, path data is written to the standard output.

     Dcasehost converts the hostname in a stream of pathalias  data  to  lower
     case.   Normally,  dcasehost  assumes  that  the hostname is in the first
     field in each line, where a field is delimited by whitespace.  If the  -c
     option  is  specified,  then  the hostname is assumed to be in the second
     field.  This is for compatibility with the  -c  option  to  pathalias(8).
     See the pathalias man page for more information.

     The dcasehost command is intended to  be  used  only  within  the  mkpath
     command.

CONFIGURATION FILE FORMAT
     The format of the path configuration file is a set  of  lines  containing
     directives.   Blank  lines  are  ignored and the character ``#'' begins a
     comment which continues until the end of the line.  The various  possible
     directives are described below.

     In these directive descriptions, an argument of arg refers to one of  the
     following types of arguments:

     'literal'              Literal data specified inline.  (single quotes)

     `shell-command`        Take data from the standard output of  this  shell
                            command.  (back quotes)

     filename ...           Take data from the named file or files.  Files may
                            be specified using shell globbing notation, with *
                            ? and [].

     The `shell-command` form preserves newlines and whitespace  and  is  thus
     not entirely equivalent to usage in sh(1).  The following lines result in
     the same input to pathalias:

           map    `cat food`       # ackpft!
           map    food             # oop ack!

     For the `shell-command` and 'literal' forms, the filename used for  error
     messages is [stdin].

     map arg                Specify  map  data  to  be  given  as   input   to
                            pathalias.   Each  file  is  preceded  by  a  line
                            containing:

                                  file { pathname }

                            where pathname is the full pathname to  the  file.
                            This  will  cause error messages from pathalias to
                            refer to the correct file.  Each file is  followed
                            by the line containing:

                                  private {}

                            to  force  the  end  of  scope  for  any   private
                            directives within the map files.

     safemap arg            This is similar to the map directive, and  can  be
                            used  when you do not have sufficient control over
                            what the files contain.  If a  map  file  contains
                            the  pathalias directives delete and adjust, those
                            directives are  removed  and  flagged  as  errors,
                            before  the file is passed to pathalias.  If a map
                            file contains  pathalias  file  directives,  those
                            directives  are  simply removed.  No error message
                            is produced in this case.

     delete arg             Specify hosts, links or networks which are  to  be
                            deleted  at  this  point.   That  is, all previous
                            references  to  any  of  these   items   will   be
                            forgotten.

     adjust arg             Specify hosts or networks that add on a  surcharge
                            to  any  route  though  them.   By  default,  this
                            surcharge is 4000.  Costs can  also  be  added  to
                            each  site  as  with  pathalias.  For example, the
                            following is a valid adjust file:

                                  walldrug glotz              #        default
                                  surcharge of 4000
                                  kgbvax(1000), kremvax(DEAD) #  surcharge  of
                                  1000 & DEAD
                                  nsavax(FAST)                # reduces  cost,
                                  FAST < 0

                            Be careful when using negative adjust  surcharges.
                            The pathalias program will complain if a cost of a
                            link drops below zero.

     dead arg               Specify hosts, links or networks which are  to  be
                            assigned a cost of DEAD.

     text arg               Within an execution block, described  in  a  later
                            section,  the  given specified text is sent as the
                            standard input to a pathalias command.  Otherwise,
                            it  is  written  to  the  standard  output for the
                            mkpath command.

     file filename          Set the file to be used  by  pathalias  for  error
                            messages,  starting  on the next line of pathalias
                            input.  The next line will be reported  as  if  it
                            came  from  the  first  line of the file filename.
                            The file command does not change  where  pathalias
                            will read next, only what pathalias calls the line
                            should an error occur.

     cd [ dir ]             By default, the current directory used  by  mkpath
                            begins in the directory of the configuration file,
                            or in the current directory if  the  configuration
                            is  read  from the standard input.  The cd command
                            without a dir argument changes  to  the  directory
                            from  which  mkpath  was  invoked.  A dir arg of -
                            changes the directory  to  the  default  directory
                            based  on  the  name  of  the  configuration file.
                            Otherwise, dir becomes the current  directory  for
                            file and shell command references.

     sh cmd                 The given shell command is executed.

     pathalias flags        Process the pathalias input directives  that  have
                            been   collected   since  the  last  pathalias  or
                            pathsort directive and  execute  the  pathalias(8)
                            command  with this input.  The specified flags are
                            given as arguments to pathalias.  These flags  can
                            also  contain  i/o  redirection, or pipes to other
                            shell commands.  For example, the following is  an
                            acceptable use of the pathalias directive:

                                  pathalias -l hostname | mkdbm -o paths

     pathsort [ flags ]     This is equivalent to the following directive:

                                  pathalias -i -D | dcasehost | sort  -T  /tmp
                                  flags ...

                            An  example  of  a  potentially  useful   pathsort
                            directive is:

                                  pathsort | sed 's/!foo!/!foobar!/'
                            A pathsort directive is assumed to follow the  end
                            of  a  configuration file if an execution block is
                            not terminated prior to the end of file.

EXECUTION BLOCKS
     Directives are executed in blocks.  A map, safemap, delete, adjust,  dead
     or  file directive starts a block.  Successive directives continue it.  A
     pathalias or pathsort directive ends a block.  The end of a file can  end
     a block, generating an implicit pathsort directive.

     Encountering the end of a block normally results in the  execution  of  a
     pathalias(8)  command.   The  exception is when a end of block command is
     read when no block was started.  In this case the block is ignored.

     When the start of a block is seen, all directives up to the  end  of  the
     block  are  collected  and  fed  into the resulting pathalias(8) command.
     Directives such as cd, sh or text within a block only effect that  block.
     Therefore,  a  cd directive within a block will only change the directory
     for the remainder of that block, whereas a  cd  directive  outside  of  a
     block has a global effect.

     Additionally a text or sh directive will feed its  standard  output  into
     the  block's pathalias command when it is inside a block, while a text or
     sh directive outside of a block  will  send  its  output  direct  to  the
     standard  output of the mkpath command.  This later effect allows for the
     injection of literal pathalias output into the output stream.

OPTIONS
     The following options are recognized by mkpath:

     -v                     The internal sh(1) commands are executed with a -v
                            option,  thus  echoing the commands that are piped
                            to the shell prior to their being processed.

     -V                     Tell any pathalias  commands  to  produce  verbose
                            messages.

     -x                     Pass the -x flag  to  invocations  of  the  shell,
                            causing  commands which are about to execute to be
                            echoed.

     -e                     Pass the -e flag  to  invocations  of  the  shell,
                            causing  shells to exit whenever a command returns
                            a non-zero exit status.  In addition,  the  mkpath
                            program  will  exit  when  it  encounters a syntax
                            error or unknown directive.

     -n                     Disable the execution of any shell  commands  that
                            mkpath  generates.   This  is  useful  with the -v
                            option and disables the -x, -e and -V options.

     -t trace               Cause the input to pathalias to be copied into the
                            file trace.

EXAMPLES
     Here is a simple example of a mkpath configuration file:

          # world.conf - configure our map setup to build world.map

          # get the usenet world maps
          cd      /usr/spool/uumaps
          safemap [ud].*

          # merge in the new maps
          cd      /usr/lib/smail/maps
          safemap newmap/*.map

          # delete our site and merge our private map data
          delete  `uuname -l`
          map     world.map private.map tweak.map

     This configuration file can be used for a UUCP gateway host:

          # Pathalias database for a UUCP gateway

          # map information is stored under this directory
          cd /usr/lib/smail

          # build paths to USENET hosts
          map       usenet/[du].*     # grab  all  published  maps,  start  of
          block
          delete    `uuname -l`       # delete  published  references  to  our
          site
          dead      dead              # links and sites with cost of DEAD
          map       ourmap            # add our up-to-date map file
          pathsort  > paths.global    # end of block

          # build paths for our local domain
          map       local.map         # major domain info, start of block
          cd        ../uts            # cd only affects this block
          map       domain.map        # map for uts.amdahl.com domain
          adjust    'flaky'           # add 4000 to routes thru flaky
          adjust    'flako(HOURLY)'   # add HOURLY to routes thru flako
          pathsort  > paths.local     # end of block

          # build a sorted forces file, from the source forces file
          sh        mkline -t forces | dcasehost | sort -u +0 -1 > forces.sort
          # output paths and clean up
          sh        pathmerge forces.sort paths.local paths.global
          sh        rm -f forces.sort paths.local paths.global  # cleanup

SEE ALSO
     pathalias(8),  mkline(8),  mkdbm(8),  mkhpath(8),  mkuuwho(8),   sort(1),
     sh(1), smail(5), smail(8) and pathmerge(8).

BUGS
     The first ``#'' character on  a  line  begins  a  comment  regardless  of
     whether or not it is within quotes.

     The -e option does not stop all execution, only command execution  within
     an instance of the shell created by mkpath.

     Continuation lines are not currently allowed in the  configuration  file.
     Each command must be on a single line.

     For  errors  reported  by  pathalias  for  input  that  came   from   the
     configuration  file  itself,  the  line  number  reported is likely to be
     incorrect, because the pathalias file cannot be used to set a line number
     within the file.

     If both -V and -t are used, the -V option must precede -t .

COPYRIGHT
     Copyright(C)1987, 1988 Ronald S. Karr and Landon Curt Noll
     Copyright(C)1992 Ronald S. Karr
     See a file COPYING, distributed with the source code, or type  smail  -bc
     for distribution rights and restrictions associated with this software.