/usr/bin/faxq is in mgetty-fax 1.1.36-3.1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
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 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199  | #!/bin/bash
#
# faxq program 
#
# like "lpq" or "mailq", show jobs waiting in the output queue
#
# SCCS: $Id: faxq.in,v 4.11 2005/04/16 11:29:09 gert Exp $ Copyright (C) 1994 Gert Doering
#
FAX_SPOOL=/var/spool/fax
FAX_SPOOL_OUT=/var/spool/fax/outgoing
#
# echo program that will accept escapes (bash: "echo -e", sun: /usr/5bin/echo)
#
echo="echo -e"
#
# an awk that is not stone-old-brain-dead (that is, not oawk...)
#
AWK=awk
#
# helper program for privileged queue access
FAXQ_HELPER=/usr/lib/mgetty-fax/faxq-helper
# ------------- subroutines -----------
do_faxq_stop()
{
    if [ ! -w . ]
    then
	$echo "$0: not administrator, can't stop queue" >&1 ; exit 0
    fi
    id >stop
}
do_faxq_start()
{
    if [ ! -w . ]
    then
	$echo "$0: not administrator, can't start queue" >&1 ; exit 0
    fi
    if [ ! -f stop  ]
    then
	$echo "$0: queue not stopped, can't restart" >&1 ; exit 0;
    fi
    rm -f stop
}
# -------------------------------------
if cd $FAX_SPOOL_OUT 
then :
else
    $echo "cannot chdir to $FAX_SPOOL_OUT..." >&2
    exit 1
fi
# special commands: faxq stop / start
case $1 in
    stop) do_faxq_stop ; exit 0;;
    start) do_faxq_start ; exit 0;;
    '') ;;
    -*) ;;
    *) cat <<EOF_MSG >&2
$0: invalid command: $1
valid commands:
  stop   stop fax queue handling (admin only)
  start  restart stopped fax queue (admin only)
EOF_MSG
       exit 1 ;;
esac
jobs="*/JOB"
requeue=""
changepri=""
while [ -n "$1" ]
do
    case $1 in
	-v) verbose="true" ;;
	-o) jobs="*/JOB.done" ;;
	-s) jobs="*/JOB.s*" ;;
	-a) jobs="*/JOB*" ;;
	-r) jobs="*/JOB.s*"; requeue="true" ;;
	-P) if [ -z "$2" -o -z "$3" ] ; then
		echo "$0: -P needs arguments!" >&2 ; exit 1 ;
	    fi
	    jobs="$2/JOB"; changepri="$3" ; shift ; shift
	    ;;
	*) cat <<EOF_MSG >&2
$0: invalid option: $flag
valid options:
  -o: show old jobs
  -s: show suspended jobs
  -a: show all jobs
  -v: verbose output
  -r: restart suspended jobs
  -P <job> <pri>: change priority of job <job> to <pri>
EOF_MSG
	   exit 1 ;;
    esac
    shift
done
jobs=`ls $jobs 2>/dev/null`
[ -z "$jobs" ] && $echo "no jobs."
for i in $jobs
do
    USER=""; PHONE=""; PAGES=""; MAILTO=""; VERBTO=""; 
    ACCT=""; INPUT=""; TIME=""; PRI=""; RE=""
    # read jobs using 'tr', remove all quote characters, dollar, and backslash
    if [ -z "$verbose" ]
    then
	eval `tr -d '\042\047\140\134\044\073' <$i | \
	     $AWK '$1=="user" { printf "USER=%s;", $2 }
		   $1=="phone" { printf "PHONE=%s;", $2 }
		   $1=="pages" { printf "PAGES=%d;", NF-1 }
		   $1=="priority" { printf "PRI=\" pri=%s.\";", $2}' -`
	$echo "$i: queued by $USER. $PAGES page(s) to $PHONE.$PRI"
    else
	eval `tr -d '\042\047\140\134\044\073' <$i | \
	     $AWK '$1=="user" { printf "USER=%s;", $2 }
		   $1=="mail"  { printf "MAILTO=\"%s\";", substr( $0, 6 ) }
		   $1=="phone" { printf "PHONE=%s;", $2 }
		   $1=="verbose_to" \
			       { printf "VERBTO=\"%s\";", substr( $0, 12 ) }
		   $1=="acct_handle" \
			       { printf "ACCT=\"%s\";", substr( $0, 13 ) }
		   $1=="input" { printf "INPUT=\"%s\";", substr( $0, 7 ) }
		   $1=="time"  { printf "TIME=\"%s:%s\";",
				 substr( $0, 6, 2 ), substr( $0, 8,2 ) }
		   $1=="subject"{ printf "RE=\"%s\";", substr( $0, 9 ) }
		   $1=="priority"{ printf "PRI=\"%s\";", $2 }
		   $1=="pages" { if ( NF==2 ) printf "PAGES=\"%s\";", $2
				 else if ( NF==3 )
                                     printf "PAGES=\"%s %s\";", $2, $3
				 else
                                     printf "PAGES=\"%s ... %s\";", $2, $NF
			       }' -`
	$echo "$i:"
	$echo "\tQueued by: $USER"
	$echo "\t       at: "`find $(dirname $i)/${PAGES%% *} -printf "%Ax %AH:%AM\n"`
       if [ -z "$VERBTO" ]
       then
	$echo "\t       to: $PHONE"
       else
	$echo "\t       to: $VERBTO ($PHONE)"
       fi
       test ! -z "$RE" && \
	$echo "\t       Re: $RE"
       test ! -z "$MAILTO" && \
	$echo "\t   E-Mail: $MAILTO"
       test ! -z "$INPUT" && \
	$echo "\t    Input: $INPUT"
	$echo "\t    Pages: $PAGES"
       test ! -z "$TIME" && \
	$echo "\tSend time: $TIME"
       test ! -z "$ACCT" && \
	$echo "\tAcct info: $ACCT"
       test ! -z "$PRI" && \
	$echo "\t Priority: $PRI"
	sed -e '/Status/!d' -e 's/Status/           Status:/' $i
       if [ -f "$i.locked" ] ; then
        $echo "\t   Status: LOCKED (being sent right now)"
       else
	expr $i : ".*done$" >/dev/null ||
	$echo "\t   Status: not sent yet"
       fi
    fi
# if "changepri", change priority of job
# TODO - this is currently broken, needs changing over to $FAXQ_HELPER
    if [ -n "$changepri" ] && expr "$i" : ".*JOB$" >/dev/null
    then
	d=`dirname $i`
	if [ ! -w $d ] ; then
	    $echo "$i: not owner, can't change priority"
	else
	    echo "priority $changepri" >>$i
	    $echo "Priority changed to $changepri"
	    touch .queue-changed 2>/dev/null
	fi
    fi
# if "requeue", requeue *.suspended-Jobs
    if [ -n "$requeue" ] && expr "$i" : ".*JOB.s" >/dev/null
    then
	d=`dirname $i`
	$FAXQ_HELPER requeue $d
    fi
done
test -n "$verbose" -a -n "$jobs" -a -r faxqueue_done &&
    $echo "\nLast \`\`faxrunq'' run at: `cat faxqueue_done`"
# queue stopped?  (print only if not "no jobs.")
test -n "$jobs" -a -f stop &&
    $echo "\nWarning: fax queue handling stopped (stop file exists).\n"
 |