lpadmin revision acecc18a468d31e360585edec30f9f541025c773
1c57c3f79db0bf0358bbe6d7b5ad650c0c852f4bTinderbox User#!/bin/ksh
1c57c3f79db0bf0358bbe6d7b5ad650c0c852f4bTinderbox User#
5347c0fcb04eaea19d9f39795646239f487c6207Tinderbox User# CDDL HEADER START
5347c0fcb04eaea19d9f39795646239f487c6207Tinderbox User#
5347c0fcb04eaea19d9f39795646239f487c6207Tinderbox User# The contents of this file are subject to the terms of the
1c57c3f79db0bf0358bbe6d7b5ad650c0c852f4bTinderbox User# Common Development and Distribution License (the "License").
8c225507766814e78e168b17a24b8a47ca7f8c37Tinderbox User# You may not use this file except in compliance with the License.
1c57c3f79db0bf0358bbe6d7b5ad650c0c852f4bTinderbox User#
1c57c3f79db0bf0358bbe6d7b5ad650c0c852f4bTinderbox User# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
1c57c3f79db0bf0358bbe6d7b5ad650c0c852f4bTinderbox User# or http://www.opensolaris.org/os/licensing.
1c57c3f79db0bf0358bbe6d7b5ad650c0c852f4bTinderbox User# See the License for the specific language governing permissions
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# and limitations under the License.
1c57c3f79db0bf0358bbe6d7b5ad650c0c852f4bTinderbox User#
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User# When distributing Covered Code, include this CDDL HEADER in each
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User# If applicable, add the following below this CDDL HEADER, with the
f9ce6280cec79deb16ff6d9807aa493ff23e10d9Tinderbox User# fields enclosed by brackets "[]" replaced with your own identifying
0b89eee6167201843c9a46b7e7c63cb1e4e09ba3Tinderbox User# information: Portions Copyright [yyyy] [name of copyright owner]
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User#
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User# CDDL HEADER END
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt#
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt#
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
0da02c26a6631c25f075a8e4ac6de9e58f49a0c2Tinderbox User# Use is subject to license terms.
0da02c26a6631c25f075a8e4ac6de9e58f49a0c2Tinderbox User#
0da02c26a6631c25f075a8e4ac6de9e58f49a0c2Tinderbox User#
0da02c26a6631c25f075a8e4ac6de9e58f49a0c2Tinderbox Userset -o noclobber
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox UserPATH=/bin:/usr/bin:/usr/sbin export PATH
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox UserTEXTDOMAIN="SUNW_OST_OSCMD"
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntexport TEXTDOMAIN
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox UserPFEXEC=/usr/bin/pfexec
14a656f94b1fd0ababd84a772228dfa52276ba15Evan HuntLPSET=/usr/bin/lpset
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox UserLPGET=/usr/bin/lpget
14a656f94b1fd0ababd84a772228dfa52276ba15Evan HuntLPSTAT=/usr/bin/lpstat
14a656f94b1fd0ababd84a772228dfa52276ba15Evan HuntLPADMIN=/usr/lib/lp/local/lpadmin
14a656f94b1fd0ababd84a772228dfa52276ba15Evan HuntLPFILTER=/usr/sbin/lpfilter
14a656f94b1fd0ababd84a772228dfa52276ba15Evan HuntCOMM=/usr/bin/comm
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox UserPPDMGR=/usr/sbin/ppdmgr
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox UserHOST=$(/bin/uname -n)
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntexit_code=0
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox User
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox Userusage() {
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox User gettext "Usage:\n" 1>&2
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox User gettext " lpadmin -p (printer) (options)\n" 1>&2
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox User gettext " lpadmin -x (dest)\n" 1>&2
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox User gettext " lpadmin -d (dest)\n" 1>&2
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox User gettext " lpadmin -S print-wheel -A alert-type [ -W minutes ]\n" 1>&2
363b21045b718d06d414784c96193dc9a233e8c5Tinderbox User gettext " [ -Q requests ]\n" 1>&2
363b21045b718d06d414784c96193dc9a233e8c5Tinderbox User gettext " lpadmin -M -f form-name [ -a [ -o filebreak ]\n" 1>&2
363b21045b718d06d414784c96193dc9a233e8c5Tinderbox User gettext " [ -t tray-number ]]\n" 1>&2
363b21045b718d06d414784c96193dc9a233e8c5Tinderbox User exit 1
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox User}
363b21045b718d06d414784c96193dc9a233e8c5Tinderbox User
363b21045b718d06d414784c96193dc9a233e8c5Tinderbox User# create a filter table for LP service
363b21045b718d06d414784c96193dc9a233e8c5Tinderbox Userlp_config_filters() {
363b21045b718d06d414784c96193dc9a233e8c5Tinderbox User if [[ ! -f /etc/lp/filter.table ]] ; then
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox User cd /etc/lp/fd ; for filter in *.fd ; do
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox User ${PFEXEC} ${LPFILTER} \
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox User -f $(/usr/bin/basename $filter .fd) \
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox User -F $filter
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox User done
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox User fi
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox User}
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox User
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox User# enable/disable LP related service(s)
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox Userlp_config_service() { # (enable | disable)
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox User svcadm ${1} -s svc:/application/print/server:default
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox User # svcadm ${1} -s svc:/application/print/rfc1179:default
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox User # svcadm ${1} -s svc:/application/print/ipp-listener:default
a1ff871f78b7d907d6fc3a382beea2a640fe8423Tinderbox User}
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User
0da02c26a6631c25f075a8e4ac6de9e58f49a0c2Tinderbox User# synchronize printers.conf with LP configuration changes
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox Userlp_config_sync_pconf() { # (pre) (post)
0da02c26a6631c25f075a8e4ac6de9e58f49a0c2Tinderbox User ADDED=$(${COMM} -13 ${1} ${2})
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User REMOVED=$(${COMM} -23 ${1} ${2})
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User lp_server=${server:-${HOST}}
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User for DEST in ${ADDED} ; do
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User lp_uri="ipp://${lp_server}/printers/${DEST}"
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User lp_bsdaddr="${lp_server},${DEST},Solaris"
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User ${LPSET} -n system \
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User -a "printer-uri-supported=${lp_uri}" \
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User -a "bsdaddr=${lp_bsdaddr}" \
3ca1a32241189d1e02e59f6b56399eb9b40f2aafTinderbox User ${DEST} 2>/dev/null
3ca1a32241189d1e02e59f6b56399eb9b40f2aafTinderbox User done
3ca1a32241189d1e02e59f6b56399eb9b40f2aafTinderbox User
3ca1a32241189d1e02e59f6b56399eb9b40f2aafTinderbox User for DEST in ${REMOVED} ; do
3ca1a32241189d1e02e59f6b56399eb9b40f2aafTinderbox User ${LPSET} -n system -x ${DEST} 2>/dev/null
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User done
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User}
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User# Delete all destinations in printers.conf
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox Userdelete_all() {
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User for DEST in $(lpget -n system list | egrep -e '.+:$' | sed -e 's/://')
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User do
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User ${LPSET} -n system -x ${DEST}
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User status=$?
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User done
a1ff871f78b7d907d6fc3a382beea2a640fe8423Tinderbox User}
3ca1a32241189d1e02e59f6b56399eb9b40f2aafTinderbox User
363b21045b718d06d414784c96193dc9a233e8c5Tinderbox User# Call the ppdmgr utility to add a new PPD file to the system.
3ca1a32241189d1e02e59f6b56399eb9b40f2aafTinderbox User#
3ca1a32241189d1e02e59f6b56399eb9b40f2aafTinderbox User# $1 - path to PPD file
363b21045b718d06d414784c96193dc9a233e8c5Tinderbox User# $2 - label name (optional)
363b21045b718d06d414784c96193dc9a233e8c5Tinderbox Useradd_new_ppd_file() {
363b21045b718d06d414784c96193dc9a233e8c5Tinderbox User # Add new ppd file and echo full path it was actually saved to
363b21045b718d06d414784c96193dc9a233e8c5Tinderbox User ppdmgrcmd="${PFEXEC} ${PPDMGR} -a ${1} -w"
363b21045b718d06d414784c96193dc9a233e8c5Tinderbox User
363b21045b718d06d414784c96193dc9a233e8c5Tinderbox User ppderrfile=/tmp/lpadminerror.$$
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt ppd_file=$(${ppdmgrcmd} 2>${ppderrfile})
51da15c88648a9e47d0cddff4b2b782665e99401Tinderbox User ppdmgrrc=$?
550d3276d0490c4918f089ccb1528a3eb0951b0aTinderbox User if [[ -s "${ppderrfile}" ]] ; then
550d3276d0490c4918f089ccb1528a3eb0951b0aTinderbox User print -n "lpadmin: " 1>&2
550d3276d0490c4918f089ccb1528a3eb0951b0aTinderbox User cat ${ppderrfile} 1>&2
550d3276d0490c4918f089ccb1528a3eb0951b0aTinderbox User rm -f ${ppderrfile} >/dev/null 2>&1
550d3276d0490c4918f089ccb1528a3eb0951b0aTinderbox User if [[ ${ppdmgrrc} -ne 0 ]] ; then
550d3276d0490c4918f089ccb1528a3eb0951b0aTinderbox User exit 1
550d3276d0490c4918f089ccb1528a3eb0951b0aTinderbox User fi
51da15c88648a9e47d0cddff4b2b782665e99401Tinderbox User fi
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User rm -f ${ppderrfile} >/dev/null 2>&1
51da15c88648a9e47d0cddff4b2b782665e99401Tinderbox User}
51da15c88648a9e47d0cddff4b2b782665e99401Tinderbox User
51da15c88648a9e47d0cddff4b2b782665e99401Tinderbox User#
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User# Execution begins here
51da15c88648a9e47d0cddff4b2b782665e99401Tinderbox User#
51da15c88648a9e47d0cddff4b2b782665e99401Tinderbox User
51da15c88648a9e47d0cddff4b2b782665e99401Tinderbox User# be sure that we can run lpset and lpget
51da15c88648a9e47d0cddff4b2b782665e99401Tinderbox Userif [[ ! -x ${LPSET} || ! -x ${LPGET} ]] ; then
51da15c88648a9e47d0cddff4b2b782665e99401Tinderbox User gettext "lpadmin: System error; cannot set default printer\n" 1>&2
51da15c88648a9e47d0cddff4b2b782665e99401Tinderbox User exit 2
51da15c88648a9e47d0cddff4b2b782665e99401Tinderbox Userfi
51da15c88648a9e47d0cddff4b2b782665e99401Tinderbox User
51da15c88648a9e47d0cddff4b2b782665e99401Tinderbox Userif [[ $# -lt 1 ]] ; then
51da15c88648a9e47d0cddff4b2b782665e99401Tinderbox User usage
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User exit 1
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox Userfi
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt# Deal with the -d option independently since getopts does not handle
d253648fe3331622cebea02d60aaecca3082d78dTinderbox User# options that may or may not have arguments
d253648fe3331622cebea02d60aaecca3082d78dTinderbox User#
d253648fe3331622cebea02d60aaecca3082d78dTinderbox Userif [[ ${1} = "-d" ]] ; then
d253648fe3331622cebea02d60aaecca3082d78dTinderbox User if [[ $# -eq 1 ]] ; then # remove the "default"
d253648fe3331622cebea02d60aaecca3082d78dTinderbox User ${LPGET} -n system _default >/dev/null 2>&1
d253648fe3331622cebea02d60aaecca3082d78dTinderbox User exit_code=$?
d253648fe3331622cebea02d60aaecca3082d78dTinderbox User
d253648fe3331622cebea02d60aaecca3082d78dTinderbox User if [[ ${exit_code} -eq 0 ]] ; then
d253648fe3331622cebea02d60aaecca3082d78dTinderbox User ${LPSET} -n system -x _default
d253648fe3331622cebea02d60aaecca3082d78dTinderbox User exit_code=$?
d253648fe3331622cebea02d60aaecca3082d78dTinderbox User else # no default, nothing to do
d253648fe3331622cebea02d60aaecca3082d78dTinderbox User exit_code=0
d253648fe3331622cebea02d60aaecca3082d78dTinderbox User fi
d253648fe3331622cebea02d60aaecca3082d78dTinderbox User elif [[ $# -eq 2 ]] ; then # add/change the "default"
d253648fe3331622cebea02d60aaecca3082d78dTinderbox User ${LPGET} -k bsdaddr ${2} >/dev/null 2>&1
d253648fe3331622cebea02d60aaecca3082d78dTinderbox User exit_code=$?
d253648fe3331622cebea02d60aaecca3082d78dTinderbox User
d253648fe3331622cebea02d60aaecca3082d78dTinderbox User if [[ $exit_code -eq 0 ]] ; then
bfb7b680bf88c1fdd9949197b71c512c532280a4Tinderbox User ${LPSET} -n system -a "use=${2}" _default
dfae459e8c4f794f8a239e74aa9d5e11cce6ea5bTinderbox User exit_code=$?
dfae459e8c4f794f8a239e74aa9d5e11cce6ea5bTinderbox User else # can't set default to an unconfigured printer
bfb7b680bf88c1fdd9949197b71c512c532280a4Tinderbox User gettext "${2}: undefined printer\n" 1>&1
bfb7b680bf88c1fdd9949197b71c512c532280a4Tinderbox User fi
bfb7b680bf88c1fdd9949197b71c512c532280a4Tinderbox User else # invalid usage
bfb7b680bf88c1fdd9949197b71c512c532280a4Tinderbox User usage
bfb7b680bf88c1fdd9949197b71c512c532280a4Tinderbox User exit 1
bfb7b680bf88c1fdd9949197b71c512c532280a4Tinderbox User fi
3ca1a32241189d1e02e59f6b56399eb9b40f2aafTinderbox User
3ca1a32241189d1e02e59f6b56399eb9b40f2aafTinderbox User exit ${exit_code}
bfb7b680bf88c1fdd9949197b71c512c532280a4Tinderbox Userfi
bfb7b680bf88c1fdd9949197b71c512c532280a4Tinderbox User
dfae459e8c4f794f8a239e74aa9d5e11cce6ea5bTinderbox User# Strip off legal options
dfae459e8c4f794f8a239e74aa9d5e11cce6ea5bTinderbox Userwhile getopts "A:ac:D:e:f:F:H:hi:I:lm:Mn:o:p:Q:r:S:s:T:u:U:v:W:x:t:P:" arg
dfae459e8c4f794f8a239e74aa9d5e11cce6ea5bTinderbox Userdo
3ca1a32241189d1e02e59f6b56399eb9b40f2aafTinderbox User case $arg in
3ca1a32241189d1e02e59f6b56399eb9b40f2aafTinderbox User D)
3ca1a32241189d1e02e59f6b56399eb9b40f2aafTinderbox User description="${OPTARG}"
3ca1a32241189d1e02e59f6b56399eb9b40f2aafTinderbox User ;;
dfae459e8c4f794f8a239e74aa9d5e11cce6ea5bTinderbox User n)
dfae459e8c4f794f8a239e74aa9d5e11cce6ea5bTinderbox User ppd_file="${OPTARG}"
dfae459e8c4f794f8a239e74aa9d5e11cce6ea5bTinderbox User ;;
bfb7b680bf88c1fdd9949197b71c512c532280a4Tinderbox User p)
bfb7b680bf88c1fdd9949197b71c512c532280a4Tinderbox User if [[ -n "${delete}" ]] ; then
bfb7b680bf88c1fdd9949197b71c512c532280a4Tinderbox User usage
bfb7b680bf88c1fdd9949197b71c512c532280a4Tinderbox User fi
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt printer=${OPTARG}
abe69df9a7de5cda07a2b8e19e8b7c981bcd7a9dTinderbox User ;;
f14ce68ee54a5a4587fbde4ffacb117946df2d73Tinderbox User s)
f14ce68ee54a5a4587fbde4ffacb117946df2d73Tinderbox User server=${OPTARG}
f14ce68ee54a5a4587fbde4ffacb117946df2d73Tinderbox User ;;
f14ce68ee54a5a4587fbde4ffacb117946df2d73Tinderbox User v|U)
f14ce68ee54a5a4587fbde4ffacb117946df2d73Tinderbox User device=${OPTARG}
f14ce68ee54a5a4587fbde4ffacb117946df2d73Tinderbox User if [[ ! -n "${server}" ]] ; then
f14ce68ee54a5a4587fbde4ffacb117946df2d73Tinderbox User server=${HOST}
f14ce68ee54a5a4587fbde4ffacb117946df2d73Tinderbox User fi
f14ce68ee54a5a4587fbde4ffacb117946df2d73Tinderbox User local="true"
f14ce68ee54a5a4587fbde4ffacb117946df2d73Tinderbox User ;;
f14ce68ee54a5a4587fbde4ffacb117946df2d73Tinderbox User x)
0d6a6642b2be93cffa651c54a9b8810dd2d31392Tinderbox User if [[ -n "${printer}" || -n "${server}" || \
0d6a6642b2be93cffa651c54a9b8810dd2d31392Tinderbox User -n "${device}" || -n "${description}" ]] ; then
0d6a6642b2be93cffa651c54a9b8810dd2d31392Tinderbox User usage
0d6a6642b2be93cffa651c54a9b8810dd2d31392Tinderbox User fi
0d6a6642b2be93cffa651c54a9b8810dd2d31392Tinderbox User delete=${OPTARG}
0d6a6642b2be93cffa651c54a9b8810dd2d31392Tinderbox User printer=${OPTARG}
0d6a6642b2be93cffa651c54a9b8810dd2d31392Tinderbox User if [[ ${printer} = "all" ]] ; then
0d6a6642b2be93cffa651c54a9b8810dd2d31392Tinderbox User local="true"
0d6a6642b2be93cffa651c54a9b8810dd2d31392Tinderbox User fi
abe69df9a7de5cda07a2b8e19e8b7c981bcd7a9dTinderbox User ;;
abe69df9a7de5cda07a2b8e19e8b7c981bcd7a9dTinderbox User S|M|A)
abe69df9a7de5cda07a2b8e19e8b7c981bcd7a9dTinderbox User local="true"
abe69df9a7de5cda07a2b8e19e8b7c981bcd7a9dTinderbox User ;;
abe69df9a7de5cda07a2b8e19e8b7c981bcd7a9dTinderbox User c)
abe69df9a7de5cda07a2b8e19e8b7c981bcd7a9dTinderbox User class=${OPTARG}
abe69df9a7de5cda07a2b8e19e8b7c981bcd7a9dTinderbox User local="true"
abe69df9a7de5cda07a2b8e19e8b7c981bcd7a9dTinderbox User if [[ ! -f ${LPGET} ]] ; then
abe69df9a7de5cda07a2b8e19e8b7c981bcd7a9dTinderbox User gettext "lpadmin: System error; cannot set class\n " 1>&2
abe69df9a7de5cda07a2b8e19e8b7c981bcd7a9dTinderbox User exit 2
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User fi
164ade1482251e1da962b42e5bf0d3aa02a11e03Tinderbox User
164ade1482251e1da962b42e5bf0d3aa02a11e03Tinderbox User ${LPGET} "${class}" > /dev/null 2>&1
164ade1482251e1da962b42e5bf0d3aa02a11e03Tinderbox User lpget_class=$?
164ade1482251e1da962b42e5bf0d3aa02a11e03Tinderbox User if [[ ${lpget_class} -eq 0 && ! -r /etc/lp/classes/"${class}" ]] ; then
164ade1482251e1da962b42e5bf0d3aa02a11e03Tinderbox User gettext "lpadmin: ERROR: Can't create class ${class}.\n" 1>&2
164ade1482251e1da962b42e5bf0d3aa02a11e03Tinderbox User gettext " TO FIX: This is an existing printer name;\n" 1>&2
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User gettext " choose another name.\n" 1>&2
abe69df9a7de5cda07a2b8e19e8b7c981bcd7a9dTinderbox User exit 1
c48fdfda7a8ae8973aadfeb88cbeaab013024a6cTinderbox User fi
c48fdfda7a8ae8973aadfeb88cbeaab013024a6cTinderbox User ;;
c48fdfda7a8ae8973aadfeb88cbeaab013024a6cTinderbox User r)
c48fdfda7a8ae8973aadfeb88cbeaab013024a6cTinderbox User local="true"
c48fdfda7a8ae8973aadfeb88cbeaab013024a6cTinderbox User ;;
c48fdfda7a8ae8973aadfeb88cbeaab013024a6cTinderbox User esac
abe69df9a7de5cda07a2b8e19e8b7c981bcd7a9dTinderbox Userdone
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User#
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User# We don't have anything to do; let user know and bail
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt#
164ade1482251e1da962b42e5bf0d3aa02a11e03Tinderbox Userif [[ ! -n "${printer}" && ! -n "${delete}" && ! -n "${local}" ]] ; then
9efd8fc7e811d3c0c160adeb5552c2df7e49df67Tinderbox User gettext "lpadmin: ERROR: Nothing to do.\n" 1>&2
a0fb6a0980359165a4459723f52d5d7b5725f9c6Tinderbox User gettext " TO FIX: You must give one of these options:\n" 1>&2
a0fb6a0980359165a4459723f52d5d7b5725f9c6Tinderbox User gettext " -p, -d, -x -S\n" 1>&2
a0fb6a0980359165a4459723f52d5d7b5725f9c6Tinderbox User exit 1
a0fb6a0980359165a4459723f52d5d7b5725f9c6Tinderbox Userfi
a0fb6a0980359165a4459723f52d5d7b5725f9c6Tinderbox User
a0fb6a0980359165a4459723f52d5d7b5725f9c6Tinderbox User#
a0fb6a0980359165a4459723f52d5d7b5725f9c6Tinderbox User# Printer does not exist
a0fb6a0980359165a4459723f52d5d7b5725f9c6Tinderbox User# To be consistent with 2.5, assume adding local printer
a0fb6a0980359165a4459723f52d5d7b5725f9c6Tinderbox User#
8c7245514646663b25d8b186186ebede41903fa3Tinderbox Userif [[ ! -n "${device}" && ! -n "${server}" && ! -n "${delete}" && \
8c7245514646663b25d8b186186ebede41903fa3Tinderbox User ! -n "${local}" ]] ; then
8c7245514646663b25d8b186186ebede41903fa3Tinderbox User ${LPGET} "${printer}" > /dev/null 2>&1
8c7245514646663b25d8b186186ebede41903fa3Tinderbox User lpget_stat=$?
8c7245514646663b25d8b186186ebede41903fa3Tinderbox User if [[ ${lpget_stat} -ne 0 ]] ; then
8c7245514646663b25d8b186186ebede41903fa3Tinderbox User gettext "lpadmin: ERROR: Missing -U or -v option.\n" 1>&2
8c7245514646663b25d8b186186ebede41903fa3Tinderbox User gettext " TO FIX: Local printers must have\n" 1>&2
8c7245514646663b25d8b186186ebede41903fa3Tinderbox User gettext " a port defined (-v option) or\n" 1>&2
8c7245514646663b25d8b186186ebede41903fa3Tinderbox User gettext " have dial-out instructions (-U option).\n" 1>&2
421ba11f3f07cbcb12c288ef7f4e7bad13fcc28fTinderbox User exit 1
421ba11f3f07cbcb12c288ef7f4e7bad13fcc28fTinderbox User fi
421ba11f3f07cbcb12c288ef7f4e7bad13fcc28fTinderbox Userfi
421ba11f3f07cbcb12c288ef7f4e7bad13fcc28fTinderbox User
421ba11f3f07cbcb12c288ef7f4e7bad13fcc28fTinderbox User# process the "server" value
421ba11f3f07cbcb12c288ef7f4e7bad13fcc28fTinderbox User# It can be a hostname, UUCP form (server!queue), RCMD form(queue@server),
99b30e26a6beb9092557cc9e5370b517309bff6eTinderbox User# or in URI form ({scheme}://{endpoint})
ffe29868b4bbc64953fc5d0de51f988c20158967Tinderbox User#
3b15473cedf41d48904f5b07bdc5e87afff6b58cTinderbox Usercase "${server}" in
3b15473cedf41d48904f5b07bdc5e87afff6b58cTinderbox User *://*) # URI form
3b15473cedf41d48904f5b07bdc5e87afff6b58cTinderbox User uri=${server}
3b15473cedf41d48904f5b07bdc5e87afff6b58cTinderbox User rem_printer=$(expr "${server}" : ".*://.*/\([^/]*\)")
3b15473cedf41d48904f5b07bdc5e87afff6b58cTinderbox User server=$(expr "${server}" : ".*://\([^/]*\)/.*")
3b15473cedf41d48904f5b07bdc5e87afff6b58cTinderbox User ;;
ffe29868b4bbc64953fc5d0de51f988c20158967Tinderbox User *@*) # RCMD form
99b30e26a6beb9092557cc9e5370b517309bff6eTinderbox User rem_printer=$(expr "${server}" : "\(.*\)@.*")
99b30e26a6beb9092557cc9e5370b517309bff6eTinderbox User server=$(expr "${server}" : ".*@\(.*\)")
99b30e26a6beb9092557cc9e5370b517309bff6eTinderbox User ;;
99b30e26a6beb9092557cc9e5370b517309bff6eTinderbox User *!*) # UUCP form
99b30e26a6beb9092557cc9e5370b517309bff6eTinderbox User rem_printer=$(expr "${server}" : ".*!\(.*\)")
99b30e26a6beb9092557cc9e5370b517309bff6eTinderbox User server=$(expr "${server}" : "\(.*\)!.*")
99b30e26a6beb9092557cc9e5370b517309bff6eTinderbox User ;;
99b30e26a6beb9092557cc9e5370b517309bff6eTinderbox User *) # hostname
c48fdfda7a8ae8973aadfeb88cbeaab013024a6cTinderbox User rem_printer=${printer}
c48fdfda7a8ae8973aadfeb88cbeaab013024a6cTinderbox User ;;
c48fdfda7a8ae8973aadfeb88cbeaab013024a6cTinderbox Useresac
c48fdfda7a8ae8973aadfeb88cbeaab013024a6cTinderbox User
c48fdfda7a8ae8973aadfeb88cbeaab013024a6cTinderbox User# if there is a "device" or LP configuration, it's local
c48fdfda7a8ae8973aadfeb88cbeaab013024a6cTinderbox Userif [[ -n "${device}" || -f /etc/lp/printers/${printer}/configuration || \
9efd8fc7e811d3c0c160adeb5552c2df7e49df67Tinderbox User -f /etc/lp/classes/${printer} ]] ; then
9efd8fc7e811d3c0c160adeb5552c2df7e49df67Tinderbox User local="true"
9efd8fc7e811d3c0c160adeb5552c2df7e49df67Tinderbox Userfi
9efd8fc7e811d3c0c160adeb5552c2df7e49df67Tinderbox User
9efd8fc7e811d3c0c160adeb5552c2df7e49df67Tinderbox User# Do the LP configuration for a local printer served by lpsched
9efd8fc7e811d3c0c160adeb5552c2df7e49df67Tinderbox Userif [[ -x ${LPADMIN} && -n "${local}" ]] ; then
9efd8fc7e811d3c0c160adeb5552c2df7e49df67Tinderbox User # enumerate LP configured printers before modification
9efd8fc7e811d3c0c160adeb5552c2df7e49df67Tinderbox User PRE=/tmp/lpadmin-pre.$$
9efd8fc7e811d3c0c160adeb5552c2df7e49df67Tinderbox User (/bin/ls /etc/lp/printers 2>/dev/null ; /bin/ls /etc/lp/classes \
9efd8fc7e811d3c0c160adeb5552c2df7e49df67Tinderbox User 2>/dev/null) >${PRE}
666b453b37f9ccfe3c7984fb0b31b70a3ceb918fTinderbox User
666b453b37f9ccfe3c7984fb0b31b70a3ceb918fTinderbox User # if there are no printers configured, enable LP service(s)
666b453b37f9ccfe3c7984fb0b31b70a3ceb918fTinderbox User [[ ! -s "${PRE}" ]] && lp_config_service enable
666b453b37f9ccfe3c7984fb0b31b70a3ceb918fTinderbox User
666b453b37f9ccfe3c7984fb0b31b70a3ceb918fTinderbox User # add filters to LP service
666b453b37f9ccfe3c7984fb0b31b70a3ceb918fTinderbox User lp_config_filters
666b453b37f9ccfe3c7984fb0b31b70a3ceb918fTinderbox User
666b453b37f9ccfe3c7984fb0b31b70a3ceb918fTinderbox User # add new ppd file to PPD file repositories
bea02a4cc08d57b9f36979906f291ac78a99060aTinderbox User if [[ -n "${ppd_file}" && -x ${PPDMGR} ]] ; then
bea02a4cc08d57b9f36979906f291ac78a99060aTinderbox User add_new_ppd_file "${ppd_file}"
bea02a4cc08d57b9f36979906f291ac78a99060aTinderbox User fi
bea02a4cc08d57b9f36979906f291ac78a99060aTinderbox User
bea02a4cc08d57b9f36979906f291ac78a99060aTinderbox User # modify LP destination(s)
bea02a4cc08d57b9f36979906f291ac78a99060aTinderbox User CMD="${PFEXEC} ${LPADMIN}"
bea02a4cc08d57b9f36979906f291ac78a99060aTinderbox User while [[ -n "$*" ]] ; do # to deal with multi-word arguments
bea02a4cc08d57b9f36979906f291ac78a99060aTinderbox User CMD="$CMD \"$1\""
bea02a4cc08d57b9f36979906f291ac78a99060aTinderbox User # replace the ppd_file originally specified with the -n option
9efd8fc7e811d3c0c160adeb5552c2df7e49df67Tinderbox User # with the one returned from call to ppdmgr
ffe29868b4bbc64953fc5d0de51f988c20158967Tinderbox User if [[ "${1}" = "-n" ]] ; then
ffe29868b4bbc64953fc5d0de51f988c20158967Tinderbox User CMD="$CMD \"${ppd_file}\""
ffe29868b4bbc64953fc5d0de51f988c20158967Tinderbox User shift
ffe29868b4bbc64953fc5d0de51f988c20158967Tinderbox User fi
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt shift
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User done
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt case "$CMD" in
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt *\"-D\")
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User CMD="$CMD \"\""
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt ;;
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User esac
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt # execute the LP lpadmin command
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt eval $CMD
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User exit_code=$?
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt # enumerate LP configured printers after modification
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt POST=/tmp/lpadmin-post.$$
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt (/bin/ls /etc/lp/printers 2>/dev/null ; /bin/ls /etc/lp/classes \
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User 2>/dev/null) >${POST}
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User # if there are no destinations, disable the service(s)
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt [[ ! -s "${POST}" ]] && lp_config_service disable
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User
1c57c3f79db0bf0358bbe6d7b5ad650c0c852f4bTinderbox User # sync printers.conf with LP configuration
lp_config_sync_pconf "${PRE}" "${POST}"
/bin/rm -f ${PRE} ${POST}
fi
# Do any printers.conf configuration that is required
if [[ -n "${delete}" ]] ; then
if [[ "${delete}" = "all" ]] ; then
[[ $exit_code -eq 0 ]] && delete_all
elif [[ -z "${local}" ]] ; then
${LPSET} -n system -x ${delete}
exit_code=$?
fi
else
if [[ -z "${local}" ]] ; then
# if we need a uri, find the "best" one.
if [[ -z "${uri}" ]] ; then
uri="ipp://${server}/printers/${rem_printer}"
${LPSTAT} -p ${uri} >/dev/null 2>&1
if [[ $? -ne 0 ]] ; then
uri="lpd://${server}/printers/${rem_printer}#Solaris"
fi
fi
# set the bsdaddr
bsdaddr="${server},${rem_printer},Solaris"
if [[ -n "${printer}" && -n "${server}" ]] ; then
${LPSET} -n system \
-a "printer-uri-supported=${uri}" \
-a "bsdaddr=${bsdaddr}" ${printer}
exit_code=$?
fi
fi
if [[ -n "${printer}" && -n "${description}" ]] ; then
${LPSET} -n system \
-a "description=${description}" ${printer}
exit_code=$?
fi
fi
# if the "default" doesn't resolve a "bsdaddr", the printer is gone, remove it
${LPGET} -n system -k bsdaddr _default >/dev/null 2>&1 ||
${LPSET} -n system -x _default >/dev/null 2>&1
exit $exit_code