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 /var/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 /var/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.