tsol_netstandard_foomatic revision f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainen# CDDL HEADER START
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainen# The contents of this file are subject to the terms of the
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainen# Common Development and Distribution License (the "License").
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainen# You may not use this file except in compliance with the License.
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainen# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainen# See the License for the specific language governing permissions
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainen# and limitations under the License.
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainen# When distributing Covered Code, include this CDDL HEADER in each
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainen# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainen# If applicable, add the following below this CDDL HEADER, with the
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainen# fields enclosed by brackets "[]" replaced with your own identifying
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainen# information: Portions Copyright [yyyy] [name of copyright owner]
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainen# CDDL HEADER END
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainen#ident "%Z%%M% %I% %E% SMI"
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainen# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainen# Use is subject to license terms.
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainen## Network Standard printer interface program for foomatic.
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainen# We can't do much except exit if spooler/scheduler
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainentrap 'eval exit_clean 15' 15
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainen# Send standard error messages to /dev/null rather than to
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainen# the spooler. Avoids "Terminated" messages that shell puts out
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainen# when gets SIGTERM. Save standard error so it can be used
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainen# when we need it
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainenexec 5>&2 2>/dev/null 3>&1
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainen# set some global variables
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainen: ${LPTMPDIR:=/tmp}
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainen: ${LOCALPATH:=${SPOOLDIR}/bin}
9fd2181788a61500641c66aec0f8c746b19bf830Timo SirainenPATH="/bin:/usr/bin:${LOCALPATH}"
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainen# ${LPTELL} is the name of a program that will send its
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainen# standard input to the Spooler. It is used to forward
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainen# the description of a printer fault to the Spooler,
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainen# which uses it in an alert to the administrator.
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainenif [ ! -x "${LPTELL:=${LOCALPATH}/lp.tell}" ]
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainen fake_lptell () {
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainen while read line
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainen if [ "no" = "${header}" ]
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainen errmsg ERROR ${E_IP_UNKNOWN} \
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainen "unknown printer/interface failure" \
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainen "consult your system administrator;
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainen reasons for failure (if any) follow:"
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainen echo "${line}" >&2
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainen LPTELL=fake_lptell
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainen# ${LPTSOLSEPARATOR} is the name of a program to put banner and trailer
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainen# pages around the job.
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainenif [ -x ${LOCALPATH}/lp.tsol_separator ]
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainen LPTSOLSEPARATOR=${LOCALPATH}/lp.tsol_separator
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainen echo "${LOCALPATH}/lp.tsol_separator not found." >&2
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainen# Error message formatter:
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainen# errmsg severity message-number problem help
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainen# where severity is "ERROR" or "WARNING", message-number is
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainen# a unique identifier, problem is a short description of the
9fd2181788a61500641c66aec0f8c746b19bf830Timo Sirainen# problem, and help is a short suggestion for fixing the problem.
c6afd726060aae56b6622c6c52aec10231c4bf1cTimo SirainenLP_ERR_LABEL="UX:lp"
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainen#E_IP_FILTER=3
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo SirainenE_IP_UNKNOWN=5
9fd2181788a61500641c66aec0f8c746b19bf830Timo SirainenE_IP_BADFILE=6
c6afd726060aae56b6622c6c52aec10231c4bf1cTimo SirainenE_IP_ERRORS=12 # (in slow.filter)
c6afd726060aae56b6622c6c52aec10231c4bf1cTimo Sirainen sev=" ERROR";
c6afd726060aae56b6622c6c52aec10231c4bf1cTimo Sirainen sev="WARNING";
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainen echo "${LP_ERR_LABEL}:$2 ${sev}: $3
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainen TO FIX: $4" >&5
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainen## Check arguments
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainen echo "`expr \"$1\" : \"^[^=]*=\(.*\)\"`"
c6afd726060aae56b6622c6c52aec10231c4bf1cTimo Sirainen## Error Cleanup and Exit
50c617761ee9653bd44646a95178773a3686d62eTimo Sirainen if [ -f "${LPTMPDIR}/pr_eexit_code.$$" ]
50c617761ee9653bd44646a95178773a3686d62eTimo Sirainen /bin/rm ${LPTMPDIR}/pr_eexit_code.$$
50c617761ee9653bd44646a95178773a3686d62eTimo Sirainen if [ -f "${LPTMPDIR}/small_banner.$$" ]
50c617761ee9653bd44646a95178773a3686d62eTimo Sirainen /bin/rm ${LPTMPDIR}/small_banner.$$
50c617761ee9653bd44646a95178773a3686d62eTimo Sirainen if [ -f "${LPTMPDIR}/banner.exit_code.$$" ]
50c617761ee9653bd44646a95178773a3686d62eTimo Sirainen if [ -f "${LPTMPDIR}/banner.errmsg.$$" ]
50c617761ee9653bd44646a95178773a3686d62eTimo Sirainen if [ -f "${tmpfile}" ]
50c617761ee9653bd44646a95178773a3686d62eTimo Sirainen# This program is invoked as
50c617761ee9653bd44646a95178773a3686d62eTimo Sirainen# ${SPOOLDIR}/.../printer request-id user title copies options files...
50c617761ee9653bd44646a95178773a3686d62eTimo Sirainen# The first three arguments are simply reprinted on the banner page,
50c617761ee9653bd44646a95178773a3686d62eTimo Sirainen# the fourth (copies) is used to control the number of copies to print,
50c617761ee9653bd44646a95178773a3686d62eTimo Sirainen# the fifth (options) is a blank separated list (in a single argument)
50c617761ee9653bd44646a95178773a3686d62eTimo Sirainen# of user or Spooler supplied options (without the -o prefix),
50c617761ee9653bd44646a95178773a3686d62eTimo Sirainen# and the last arguments are the files to print.
50c617761ee9653bd44646a95178773a3686d62eTimo Sirainenif [ $# -lt 5 ]
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainen errmsg ERROR ${E_IP_ARGS} \
50c617761ee9653bd44646a95178773a3686d62eTimo Sirainen "wrong number of arguments to interface program" \
50c617761ee9653bd44646a95178773a3686d62eTimo Sirainen "consult your system administrator"
41e51b972f02e8b16c19fab9160294ea0a07c343Timo Sirainenprinter=`basename $0`
50c617761ee9653bd44646a95178773a3686d62eTimo Sirainenoption_list=$5
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainen# debug sent to file if defined in /etc/syslog.conf
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainenlogger -p lpr.debug -t "tsol_netstandard_foomatic: ${request_id}" " "
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainenlogger -p lpr.debug -t "tsol_netstandard_foomatic: ${request_id}" "INPUT"
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainenlogger -p lpr.debug -t "tsol_netstandard_foomatic: ${request_id}" \
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainen " printer : ${printer}"
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainenlogger -p lpr.debug -t "tsol_netstandard_foomatic: ${request_id}" \
9c32eb25e7b90e753e0cd7b30f7a70e8ca9121d9Timo Sirainen " request_id : ${request_id}"
9c32eb25e7b90e753e0cd7b30f7a70e8ca9121d9Timo Sirainenlogger -p lpr.debug -t "tsol_netstandard_foomatic: ${request_id}" \
50c617761ee9653bd44646a95178773a3686d62eTimo Sirainen " user_name : ${user_name}"
50c617761ee9653bd44646a95178773a3686d62eTimo Sirainenlogger -p lpr.debug -t "tsol_netstandard_foomatic: ${request_id}" \
50c617761ee9653bd44646a95178773a3686d62eTimo Sirainen " title : ${title}"
50c617761ee9653bd44646a95178773a3686d62eTimo Sirainenlogger -p lpr.debug -t "tsol_netstandard_foomatic: ${request_id}" \
50c617761ee9653bd44646a95178773a3686d62eTimo Sirainen " copies : ${copies}"
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainenlogger -p lpr.debug -t "tsol_netstandard_foomatic: ${request_id}" \
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainen " option_list : ${option_list}"
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainenlogger -p lpr.debug -t "tsol_netstandard_foomatic: ${request_id}" \
9c32eb25e7b90e753e0cd7b30f7a70e8ca9121d9Timo Sirainen " files : ${files}"
9c32eb25e7b90e753e0cd7b30f7a70e8ca9121d9Timo Sirainenlogger -p lpr.debug -t "tsol_netstandard_foomatic: ${request_id}" \
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainen " spooler_key ${SPOOLER_KEY}"
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainen# default: do print a banner
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainennofilebreak="no"
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainendata_file_flag=
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainenfor i in ${option_list}
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainen case "${inlist}${i}" in
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainen nobanner="yes"
ed157532dafb9dc25f98fda89bc1e324c3926898Timo Sirainen nofilebreak )
ed157532dafb9dc25f98fda89bc1e324c3926898Timo Sirainen nofilebreak="yes"
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainen nolabels="yes"
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainen # If you want to add simple options (e.g. -o simple)
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainen # identify them here.
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainen# simple="yes"
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainen cpi=`parse ${i}`
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainen lpi=`parse ${i}`
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainen length=`parse ${i}`
ed157532dafb9dc25f98fda89bc1e324c3926898Timo Sirainen width=`parse ${i}`
ed157532dafb9dc25f98fda89bc1e324c3926898Timo Sirainen dest="-d `parse ${i}`"
8bad545017a5c2b69cf6fa06a50763b3b68fb161Timo Sirainen protocol="-P `parse ${i}`"
# The IPP/PAPI attributes are handled by the foomatic-rip filter so
# If you want to add simple-value options (e.g. -o value=a)
# take a list (e.g. -o lopt='a b c'), identif
logger -p lpr.debug -t "tsol_netstandard_foomatic: ${request_id}" \
FILTER=/bin/cat
#FILTER="/usr/lib/lp/postscript/postreverse "
FILTER="/usr/lib/lp/postscript/postreverse "
#FILTER=/bin/cat
NETPR="/usr/lib/lp/bin/netpr ${banner_flag} ${data_file_flag} \
PPDFILTER=/usr/lib/lp/bin/foomatic-rip
logger -p lpr.debug -t "tsol_netstandard_foomatic: ${request_id}" \
logger -p lpr.debug -t "tsol_netstandard_foomatic: ${request_id}" \
logger -p lpr.debug -t "tsol_netstandard_foomatic: ${request_id}" \
logger -p lpr.debug -t "tsol_netstandard_foomatic: ${request_id}" \
banner_filter=" | /usr/lib/lp/postscript/postprint "
BANNER_EXIT_CODE=${LPTMPDIR}/banner.exit_code.$$
TSOLSEPARATOR_LOG=${LPTMPDIR}/banner.errmsg.$$
logger -p lpr.debug -t "tsol_netstandard: ${request_id}" \
logger -p lpr.debug -t \
# if lp.tsol_separator had an error,
logger -p lpr.debug -t \
logger -p lpr.debug -t \
logger -p lpr.debug -t \
logger -p lpr.debug -t \
> ${tmpfilefoo} 2> /dev/null
/bin/rm -f ${tmpfilefoo}
logger -p lpr.debug -t \
# /bin/rm "${tmpfile}"
# Skip this for TSOL, since lp.tsol_separator handles the banners
logger -p lpr.debug -t "tsol_netstandard_foomatic: ${request_id}" \
logger -p lpr.debug -t "tsol_netstandard_foomatic: ${request_id}" \