Listing 7. Script to Activate Printcap Entries
#! /bin/sh
echo " spool.chk mod 11-15-99 mjp"
if [ $1. = debug. ]; then
set -xv; shift 1
fi
# start/stop script
INIT=/sbin/init.d/bsd
LPC='/usr/sbin/lpc'
if [ ! -f $LPC ]; then
LPC=`which lpc 2>/dev/null`
fi
if [ -z "$LPC" ]; then
echo "BSD printing doesn't seem to be"
echo " installed on this system because I"
echo " I can't find 'lpc'."
exit
fi
if [ -z "$1" ]; then
echo "Script to reset a print queue & check"
echo " & optionally create spool directories"
echo " defined in /etc/printcap."
echo " "
echo "Usage: spool_chk [-c] [queue_name ...]"
echo " "
fi
if [ "$1" = "-c" ]; then
action=c
reset=y
shift 1
else
echo -n "Create missing directories & log"
echo " files, or List only (c/l) [c]? "
read action
if [ -z "$action" ]; then action=c; fi
fi
if [ -n "$1" ]; then
if [ "$1". = all. ]; then
ques=`awk -F: 'NF<1{next}
$1~/^#/ || $2~/#|=/{next}
$1~/\|/{char=index($1,"|") - 1
printf "%s ", substr($1,1,char)}
$1!~/\|/ {printf "%s ",$1}'\
/etc/printcap`
else
ques="$*"
fi
if [ -z "$reset" ]; then
echo -n 'Abort & Restart the queue (y/n)\
[y]? '
read reset
fi
else
# get list of spool directories:
qu=`awk -F: 'NF<1{next}
$1~/^#/ {next} $0~/\|/{print}' \
/etc/printcap | awk -F\
| '{printf "%s ",$1}'`
echo $qu
echo " "
echo -n "Which of these queues do you want to\
check [all]?
"
read ques
if [ "$ques". = . ] || \
[ "$ques". = all. ]; then
ques="$qu"
fi
echo " "
if [ -z "$reset" ]; then
echo -n 'Abort & Restart the queues (y/n)\
[y]? '
read reset
fi
fi
if [ $reset. = . ]; then reset=y; fi
if [ ! -d /var/spool/lpd ]; then
mkdir /var/spool/lpd
fi
for que in $ques; do
echo -n "${que}: "
# grab the full printcap entry for this queue:
sed -n /$que/,'/|/p' /etc/printcap |
sed -n '1,/:$/p' >/tmp/prtr$$
# get the spool directory, stripping off colons
# & whitespace:
dir=`sed -n s/sd=//p /tmp/prtr$$ | \
head -1 | tr -d ':\011\040\134'`
if [ -d $dir ]; then
echo "$dir exists."
if [ $reset. = y. ]; then
if [ -x $INIT ]; then
$INIT stop
$INIT start
else
$LPC restart $que
fi
fi
else
if [ $action. = c. ];then
mkdir $dir
if [ $? -eq 0 ]; then
chown daemon.daemon $dir
$LPC start $que
if [ $? -eq 0 ]; then
echo "$que started."
else
echo "Couldn't start $que"
fi
else
echo "mkdir on $dir failed"
fi
else
echo "$dir is missing."
fi
fi
if [ $action. != c. ];then
ls -l $dir
continue
fi
# parse out log file location
log=`sed -n s/lf=//p /tmp/prtr$$ | \
head -1 | tr -d ':\011\040\134'`
if [ ! -f $log ]; then
touch $log
if [ $? != 0 ]; then
echo "Couldn't create $log."
else
chmod a+wr $log
chown lp.lp $log
echo "$log created"
fi
fi
rm -f /tmp/prtr$$ # clean up
done