1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
|
#! /bin/sh
# @(#) mkpath.sh,v 1.6 1992/07/11 11:40:14 tron Exp
#
# mkpath - make a pathalias output file
#
# Copyright (C) 1988 Ronald S. Karr and Landon Curt Noll
# Copyright (C) 1992 Ronald S. Karr
#
# See the file COPYING, distributed with smail, for restriction
# and warranty information.
# Usage:
# mkpath [-v] [-V] [-x] [-e] [-n] [-t trace] [path_config]
#
# -v verbose mode for mkpath, execution block commands
# are executed with the sh(1) -v flag
# -V pathalias(8) runs with '-v' verbose mode
# -x execution block commands are executed with the
# sh(1) '-x' option.
# -e tries to get mkpath to stop when it encounters a
# syntax error, and the internal sh(1) to stop when
# a top level command exits with a non-zero status.
# -n disables the execution of any sh(1) commands
# useful with the '-v' and disables '-x', '-e', '-V', '-t'
# -t trace all input of pathalias(8) is to be copied into
# the file 'trace'.
# path_config pathalia's configuration file, '-' => stdin,
# or $LIB_DIR/maps/mkpath.conf by default
#
# If '-V' and '-t' are both used, '-V' must be before '-t'.
# base directory for smail library/utility
#
# These directories should be owned by root, and only writeable by root
#
LIB_DIR="X_LIB_DIR_X"
UTIL_BIN_DIR="X_UTIL_BIN_DIR_X"
TMPDIR="X_TMP_DIR_X"
MAPDIR="$LIB_DIR/maps"
# standard locations
#
PATHALIAS=$UTIL_BIN_DIR/pathalias
DCASEHOST=$UTIL_BIN_DIR/dcasehost
AWKFILE=$UTIL_BIN_DIR/mkpath.awk
GLEEM=$UTIL_BIN_DIR/gleem
GETOPT=$UTIL_BIN_DIR/getopt
SORT=sort
PATH="X_UTIL_PATH_X:X_SECURE_PATH_X"; export PATH
# parse args - need a public domain getopt command - XXX
#
PROG=$0
USAGE="$PROG: usage: $PROG [-v] [-V] [-x] [-e] [-n] [-t trace] [path_config]"
set -- `$GETOPT -n $PROG -q vVxent: $*`
if [ "$?" -ne 0 ]; then
echo "$USAGE" 1>&2
exit 1
fi
SHELL_ARGS="-"
ERR=0
TEE_FILE=
PWD=`pwd`
for i in $*; do
case $i in
-v) SHELL_ARGS="$SHELL_ARGS"v; shift;;
-V) PATHALIAS="$PATHALIAS -v"; shift;;
-x) SHELL_ARGS="$SHELL_ARGS"x; shift;;
-e) SHELL_ARGS="$SHELL_ARGS"e; ERR=1; shift;;
-n) SHELL_ARGS="$SHELL_ARGS"n; shift;;
-t) if [ -z "$TEE_FILE" ]; then
TEE_FILE="$2"; PATHALIAS="tee -a $TEE_FILE | $PATHALIAS";
fi; shift 2;;
--) shift; break;;
esac
done
# determine the path.conf config file
if [ "$#" -gt 1 ]; then
echo "$USAGE"
exit 4
elif [ "$#" -eq 1 ]; then
CONFIG="$1"
else
CONFIG=
fi
# verify that we can read the config file
# determine the initial directory
#
if [ "$CONFIG" = "-" ]; then
CD="$PWD"
CONFIG="mkpath_stdin"
CONF=""
elif [ -z "$CONFIG" ]; then
CD="$MAPDIR"
cd "$CD"
CD=`pwd`
CONFIG="$MAPDIR"/mkpath.conf
CONF="$CONFIG"
elif [ -r "$CONFIG" ]; then
if [ "`expr $CONFIG : '\\/'`" -eq 0 ]; then
CD=`pwd`
else
CD=`echo "$CONFIG" | sed 's,^\(.*\)/[^/][^/]*$,\1,'`
cd "$CD"
CD=`pwd`
fi
CONF="$CONFIG"
else
echo "$PROG: can not read $CONFIG" 1>&2
exit 5
fi
# special action commands
#
# args to run pathalias, switch fields and sort for the pathsort command
PATHSORT="$PATHALIAS -i -D|$DCASEHOST|$SORT -T $TMPDIR"
# export vars needed for the sub-shell
#
# process the config file
#
trap "rm -f $TMPDIR/stm*;exit 1" 1 2 3 15
if [ "$TEE_FILE" ]; then
cat /dev/null > $TEE_FILE
fi
# strip input of #comments, run it thru awk and into the shell
(echo "#! /bin/sh $SHELL_ARGS"
echo "PROG=\"$PROG\""
echo "PWD=\"$PWD\""
echo "CD=\"$CD\""
echo "CWD=\"$CD\""
echo "ERR=\"$ERR\""
echo "PATH=\"$PATH\""
echo "GLEEM=\"$GLEEM\""
echo "PATHALIAS=\"$PATHALIAS\""
echo "PATHSORT=\"$PATHSORT\""
echo "export PROG PWD CD CWD ERR PATH GLEEM PATHALIAS PATHSORT"
if [ -z "$CONF" ]; then
sed -e 's/[ ]*#.*$//' -e 's/^[ ]*//'
else
sed -e 's/[ ]*#.*$//' -e 's/^[ ]*//' < "$CONFIG"
fi | awk -f "$AWKFILE" ERR="$ERR" PROG="$PROG" - ) | /bin/sh "$SHELL_ARGS"
exit $?
|