lpadmin revision bcdabfc47e027d458c65d1c456642dd12908e197
842ae4bd224140319ae7feec1872b93dfd491143fielding#!/bin/ksh
842ae4bd224140319ae7feec1872b93dfd491143fielding#
842ae4bd224140319ae7feec1872b93dfd491143fielding# CDDL HEADER START
842ae4bd224140319ae7feec1872b93dfd491143fielding#
842ae4bd224140319ae7feec1872b93dfd491143fielding# The contents of this file are subject to the terms of the
842ae4bd224140319ae7feec1872b93dfd491143fielding# Common Development and Distribution License (the "License").
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet# You may not use this file except in compliance with the License.
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd#
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd# or http://www.opensolaris.org/os/licensing.
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd# See the License for the specific language governing permissions
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd# and limitations under the License.
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd#
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd# When distributing Covered Code, include this CDDL HEADER in each
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet# If applicable, add the following below this CDDL HEADER, with the
ab5581cc78e9d865b0a6ab1404c53347b3276968rbb# fields enclosed by brackets "[]" replaced with your own identifying
024cd9589e52cf11ce765dfddb5b5f0c6e421a48gstein# information: Portions Copyright [yyyy] [name of copyright owner]
024cd9589e52cf11ce765dfddb5b5f0c6e421a48gstein#
024cd9589e52cf11ce765dfddb5b5f0c6e421a48gstein# CDDL HEADER END
024cd9589e52cf11ce765dfddb5b5f0c6e421a48gstein#
b0f20a4a26bcfa85724b1c2e5ec6a077f12ef44crbb#
2d71630471d1c23f0137309e3c3957c633ecbfd6rbb# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet# Use is subject to license terms.
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet#
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna#
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudetset -o noclobber
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet
b501b72e4bfed12a431278217ba66ae531d9a293rbbPATH=/bin:/usr/bin:/usr/sbin export PATH
024cd9589e52cf11ce765dfddb5b5f0c6e421a48gstein
7184de27ec1d62a83c41cdeac0953ca9fd661e8csfTEXTDOMAIN="SUNW_OST_OSCMD"
7184de27ec1d62a83c41cdeac0953ca9fd661e8csfexport TEXTDOMAIN
7184de27ec1d62a83c41cdeac0953ca9fd661e8csf
36ef8f77bffe75d1aa327882be1b5bdbe2ff567asfPFEXEC=/usr/bin/pfexec
e8fcc872d5caeea36adb6511f9d1ab6ce3fbb5c0jerenkrantzLPSET=/usr/bin/lpset
2261031aa94be82d7e6b1b8c367afc1b282317f5ianhLPGET=/usr/bin/lpget
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudetLPSTAT=/usr/bin/lpstat
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudetLPADMIN=/usr/lib/lp/local/lpadmin
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudetLPFILTER=/usr/sbin/lpfilter
275419d6395e6f072962fb701b89accaff1f3690jerenkrantzCOMM=/usr/bin/comm
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudetPPDMGR=/usr/sbin/ppdmgr
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet
1ccd992d37d62c8cb2056126f2234f64ec189bfddougmHOST=$(/bin/uname -n)
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudetexit_code=0
1ccd992d37d62c8cb2056126f2234f64ec189bfddougm
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudetusage() {
95d00ea81131488769296fa5765ed745cbf45207trawick gettext "Usage:\n" 1>&2
95d00ea81131488769296fa5765ed745cbf45207trawick gettext " lpadmin -p (printer) (options)\n" 1>&2
95d00ea81131488769296fa5765ed745cbf45207trawick gettext " lpadmin -x (dest)\n" 1>&2
95d00ea81131488769296fa5765ed745cbf45207trawick gettext " lpadmin -d (dest)\n" 1>&2
95d00ea81131488769296fa5765ed745cbf45207trawick gettext " lpadmin -S print-wheel -A alert-type [ -W minutes ]\n" 1>&2
95d00ea81131488769296fa5765ed745cbf45207trawick gettext " [ -Q requests ]\n" 1>&2
95d00ea81131488769296fa5765ed745cbf45207trawick gettext " lpadmin -M -f form-name [ -a [ -o filebreak ]\n" 1>&2
1ccd992d37d62c8cb2056126f2234f64ec189bfddougm gettext " [ -t tray-number ]]\n" 1>&2
db6d6970c955ef03a17d96a388b10ca2eb81e924trawick exit 1
85e4da1cf0dee899551b583b1f06314b2835100awrowe}
9179fa90e821c964d10f28b97fc6acee776af7cfwrowe
ebf4099fd4921bbbcef21dc872b9cd4fc73e9f55trawick# create a filter table for LP service
185aa71728867671e105178b4c66fbc22b65ae26sflp_config_filters() {
9179fa90e821c964d10f28b97fc6acee776af7cfwrowe if [[ ! -f /etc/lp/filter.table ]] ; then
2261031aa94be82d7e6b1b8c367afc1b282317f5ianh cd /etc/lp/fd ; for filter in *.fd ; do
ebf4099fd4921bbbcef21dc872b9cd4fc73e9f55trawick ${PFEXEC} ${LPFILTER} \
ebf4099fd4921bbbcef21dc872b9cd4fc73e9f55trawick -f $(/usr/bin/basename $filter .fd) \
ebf4099fd4921bbbcef21dc872b9cd4fc73e9f55trawick -F $filter
85e4da1cf0dee899551b583b1f06314b2835100awrowe done
2261031aa94be82d7e6b1b8c367afc1b282317f5ianh fi
9179fa90e821c964d10f28b97fc6acee776af7cfwrowe}
ab5581cc78e9d865b0a6ab1404c53347b3276968rbb
185aa71728867671e105178b4c66fbc22b65ae26sf# enable/disable LP related service(s)
9179fa90e821c964d10f28b97fc6acee776af7cfwrowelp_config_service() { # (enable | disable)
2261031aa94be82d7e6b1b8c367afc1b282317f5ianh svcadm ${1} -s svc:/application/print/server:default
cf24c48249f38c34c04617f5b78b240f1cee380ajerenkrantz # svcadm ${1} -s svc:/application/print/rfc1179:default
cf24c48249f38c34c04617f5b78b240f1cee380ajerenkrantz # svcadm ${1} -s svc:/application/print/ipp-listener:default
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet}
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet
95d00ea81131488769296fa5765ed745cbf45207trawick# synchronize printers.conf with LP configuration changes
6bdf767f10f67548501103ae10cc159dcfb2c19ftrawicklp_config_sync_pconf() { # (pre) (post)
6bdf767f10f67548501103ae10cc159dcfb2c19ftrawick ADDED=$(${COMM} -13 ${1} ${2})
6bdf767f10f67548501103ae10cc159dcfb2c19ftrawick REMOVED=$(${COMM} -23 ${1} ${2})
185aa71728867671e105178b4c66fbc22b65ae26sf
6bdf767f10f67548501103ae10cc159dcfb2c19ftrawick lp_server=${server:-${HOST}}
6bdf767f10f67548501103ae10cc159dcfb2c19ftrawick for DEST in ${ADDED} ; do
6bdf767f10f67548501103ae10cc159dcfb2c19ftrawick lp_uri="ipp://${lp_server}/printers/${DEST}"
6bdf767f10f67548501103ae10cc159dcfb2c19ftrawick lp_bsdaddr="${lp_server},${DEST},Solaris"
6bdf767f10f67548501103ae10cc159dcfb2c19ftrawick ${LPSET} -n system \
6bdf767f10f67548501103ae10cc159dcfb2c19ftrawick -a "printer-uri-supported=${lp_uri}" \
95d00ea81131488769296fa5765ed745cbf45207trawick -a "bsdaddr=${lp_bsdaddr}" \
95d00ea81131488769296fa5765ed745cbf45207trawick ${DEST} 2>/dev/null
95d00ea81131488769296fa5765ed745cbf45207trawick done
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet for DEST in ${REMOVED} ; do
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet ${LPSET} -n system -x ${DEST} 2>/dev/null
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet done
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet}
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet# Delete all destinations in printers.conf
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudetdelete_all() {
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet for DEST in $(lpget -n system list | egrep -e '.+:$' | sed -e 's/://')
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet do
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet ${LPSET} -n system -x ${DEST}
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet status=$?
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet done
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet}
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet# Call the ppdmgr utility to add a new PPD file to the system.
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet#
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet# $1 - path to PPD file
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet# $2 - label name (optional)
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudetadd_new_ppd_file() {
9179fa90e821c964d10f28b97fc6acee776af7cfwrowe # Add new ppd file and echo full path it was actually saved to
ab5581cc78e9d865b0a6ab1404c53347b3276968rbb ppdmgrcmd="${PFEXEC} ${PPDMGR} -a ${1} -w"
185aa71728867671e105178b4c66fbc22b65ae26sf
2261031aa94be82d7e6b1b8c367afc1b282317f5ianh ppderrfile=/tmp/lpadminerror.$$
2261031aa94be82d7e6b1b8c367afc1b282317f5ianh ppd_file=$(${ppdmgrcmd} 2>${ppderrfile})
2261031aa94be82d7e6b1b8c367afc1b282317f5ianh ppdmgrrc=$?
cf24c48249f38c34c04617f5b78b240f1cee380ajerenkrantz if [[ -s "${ppderrfile}" ]] ; then
cf24c48249f38c34c04617f5b78b240f1cee380ajerenkrantz print -n "lpadmin: " 1>&2
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet cat ${ppderrfile} 1>&2
275419d6395e6f072962fb701b89accaff1f3690jerenkrantz rm -f ${ppderrfile} >/dev/null 2>&1
275419d6395e6f072962fb701b89accaff1f3690jerenkrantz if [[ ${ppdmgrrc} -ne 0 ]] ; then
275419d6395e6f072962fb701b89accaff1f3690jerenkrantz exit 1
185aa71728867671e105178b4c66fbc22b65ae26sf fi
275419d6395e6f072962fb701b89accaff1f3690jerenkrantz fi
275419d6395e6f072962fb701b89accaff1f3690jerenkrantz rm -f ${ppderrfile} >/dev/null 2>&1
275419d6395e6f072962fb701b89accaff1f3690jerenkrantz}
275419d6395e6f072962fb701b89accaff1f3690jerenkrantz
275419d6395e6f072962fb701b89accaff1f3690jerenkrantz#
275419d6395e6f072962fb701b89accaff1f3690jerenkrantz# Execution begins here
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet#
ca70ded17026ceeee35b52df57378476b8c1293btrawick
b501b72e4bfed12a431278217ba66ae531d9a293rbb# be sure that we can run lpset and lpget
b501b72e4bfed12a431278217ba66ae531d9a293rbbif [[ ! -x ${LPSET} || ! -x ${LPGET} ]] ; then
b501b72e4bfed12a431278217ba66ae531d9a293rbb gettext "lpadmin: System error; cannot set default printer\n" 1>&2
1fbf6ba0f5207e6637b49f9a9dfcc779bbe952a9trawick exit 2
185aa71728867671e105178b4c66fbc22b65ae26sffi
2261031aa94be82d7e6b1b8c367afc1b282317f5ianh
2261031aa94be82d7e6b1b8c367afc1b282317f5ianhif [[ $# -lt 1 ]] ; then
cf24c48249f38c34c04617f5b78b240f1cee380ajerenkrantz usage
cf24c48249f38c34c04617f5b78b240f1cee380ajerenkrantz exit 1
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudetfi
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet
1fbf6ba0f5207e6637b49f9a9dfcc779bbe952a9trawick# Deal with the -d option independently since getopts does not handle
185aa71728867671e105178b4c66fbc22b65ae26sf# options that may or may not have arguments
2261031aa94be82d7e6b1b8c367afc1b282317f5ianh#
2261031aa94be82d7e6b1b8c367afc1b282317f5ianhif [[ ${1} = "-d" ]] ; then
2261031aa94be82d7e6b1b8c367afc1b282317f5ianh if [[ $# -eq 1 ]] ; then # remove the "default"
cf24c48249f38c34c04617f5b78b240f1cee380ajerenkrantz ${LPGET} -n system _default >/dev/null 2>&1
cf24c48249f38c34c04617f5b78b240f1cee380ajerenkrantz exit_code=$?
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet if [[ ${exit_code} -eq 0 ]] ; then
85e4da1cf0dee899551b583b1f06314b2835100awrowe ${LPSET} -n system -x _default
85e4da1cf0dee899551b583b1f06314b2835100awrowe exit_code=$?
85e4da1cf0dee899551b583b1f06314b2835100awrowe else # no default, nothing to do
85e4da1cf0dee899551b583b1f06314b2835100awrowe exit_code=0
85e4da1cf0dee899551b583b1f06314b2835100awrowe fi
85e4da1cf0dee899551b583b1f06314b2835100awrowe elif [[ $# -eq 2 ]] ; then # add/change the "default"
85e4da1cf0dee899551b583b1f06314b2835100awrowe ${LPGET} -k bsdaddr ${2} >/dev/null 2>&1
85e4da1cf0dee899551b583b1f06314b2835100awrowe exit_code=$?
85e4da1cf0dee899551b583b1f06314b2835100awrowe
85e4da1cf0dee899551b583b1f06314b2835100awrowe if [[ $exit_code -eq 0 ]] ; then
85e4da1cf0dee899551b583b1f06314b2835100awrowe ${LPSET} -n system -a "use=${2}" _default
9179fa90e821c964d10f28b97fc6acee776af7cfwrowe exit_code=$?
85e4da1cf0dee899551b583b1f06314b2835100awrowe else # can't set default to an unconfigured printer
185aa71728867671e105178b4c66fbc22b65ae26sf gettext "${2}: undefined printer\n" 1>&1
e8f95a682820a599fe41b22977010636be5c2717jim fi
85e4da1cf0dee899551b583b1f06314b2835100awrowe else # invalid usage
85e4da1cf0dee899551b583b1f06314b2835100awrowe usage
85e4da1cf0dee899551b583b1f06314b2835100awrowe exit 1
85e4da1cf0dee899551b583b1f06314b2835100awrowe fi
85e4da1cf0dee899551b583b1f06314b2835100awrowe
85e4da1cf0dee899551b583b1f06314b2835100awrowe exit ${exit_code}
ab5581cc78e9d865b0a6ab1404c53347b3276968rbbfi
283cab4ec4c440fe33ce47778d85b1208e169a87manoj
2261031aa94be82d7e6b1b8c367afc1b282317f5ianh# Strip off legal options
6e954603b02f2b7d4ad80af17d9b3cc6f0bacf69rbbwhile 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
2261031aa94be82d7e6b1b8c367afc1b282317f5ianhdo
ab5581cc78e9d865b0a6ab1404c53347b3276968rbb case $arg in
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet D)
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet description="${OPTARG}"
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna ;;
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna n)
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna ppd_file="${OPTARG}"
7184de27ec1d62a83c41cdeac0953ca9fd661e8csf ;;
316f1b18d8a0c7ca10a1718cf11934623593156fwrowe p)
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna if [[ -n "${delete}" ]] ; then
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna usage
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna fi
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna printer=${OPTARG}
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna ;;
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna s)
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna server=${OPTARG}
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna ;;
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna v|U)
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna device=${OPTARG}
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna if [[ ! -n "${server}" ]] ; then
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna server=${HOST}
e8f95a682820a599fe41b22977010636be5c2717jim fi
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna local="true"
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna ;;
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna x)
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna if [[ -n "${printer}" || -n "${server}" || \
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna -n "${device}" || -n "${description}" ]] ; then
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna usage
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna fi
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna delete=${OPTARG}
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna printer=${OPTARG}
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna if [[ ${printer} = "all" ]] ; then
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna local="true"
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna fi
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna ;;
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna S|M|A)
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna local="true"
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna ;;
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna c)
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna class=${OPTARG}
e8f95a682820a599fe41b22977010636be5c2717jim local="true"
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna if [[ ! -f ${LPGET} ]] ; then
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna gettext "lpadmin: System error; cannot set class\n " 1>&2
185aa71728867671e105178b4c66fbc22b65ae26sf exit 2
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna fi
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna ${LPGET} "${class}" > /dev/null 2>&1
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna lpget_class=$?
23fff010a9565d40c6b8f852f6662c5151d105bfjorton if [[ ${lpget_class} -eq 0 && ! -r /etc/lp/classes/"${class}" ]] ; then
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna gettext "lpadmin: ERROR: Can't create class ${class}.\n" 1>&2
185aa71728867671e105178b4c66fbc22b65ae26sf gettext " TO FIX: This is an existing printer name;\n" 1>&2
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna gettext " choose another name.\n" 1>&2
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna exit 1
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna fi
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna ;;
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna r)
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna local="true"
1ccd992d37d62c8cb2056126f2234f64ec189bfddougm ;;
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet esac
3366b8d8fbf36b5c1b091d707ed2e3f17f57ba1ccolmdone
b4c8a80f7dbfc9b56dbe03bdc28f0b5eb5f23697rbb
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet#
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet# We don't have anything to do; let user know and bail
e8f95a682820a599fe41b22977010636be5c2717jim#
029cfcadd33649e610c939d106dec96ca7f27bacniqif [[ ! -n "${printer}" && ! -n "${delete}" && ! -n "${local}" ]] ; then
029cfcadd33649e610c939d106dec96ca7f27bacniq gettext "lpadmin: ERROR: Nothing to do.\n" 1>&2
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet gettext " TO FIX: You must give one of these options:\n" 1>&2
bf56fcc9e4c60c858523147ac34801848a361bdajerenkrantz gettext " -p, -d, -x -S\n" 1>&2
1ccd992d37d62c8cb2056126f2234f64ec189bfddougm exit 1
382fa07a63096c4a1aabfed36433ea5ac9c40ad0trawickfi
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet#
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet# Printer does not exist
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz# To be consistent with 2.5, assume adding local printer
e4fe0877330b0131875939fbb9032e93505725a4stoddard#
705c8ed3ef608706c91ca12483d7b54ff9007cc9jerenkrantzif [[ ! -n "${device}" && ! -n "${server}" && ! -n "${delete}" && \
705c8ed3ef608706c91ca12483d7b54ff9007cc9jerenkrantz ! -n "${local}" ]] ; then
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz ${LPGET} "${printer}" > /dev/null 2>&1
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz lpget_stat=$?
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz if [[ ${lpget_stat} -ne 0 ]] ; then
c1b808d160bfb5c849263be8d4acff600853a328trawick gettext "lpadmin: ERROR: Missing -U or -v option.\n" 1>&2
97fffcccc452cdb4f4f6b81c9d2dda74c6d54b52jerenkrantz gettext " TO FIX: Local printers must have\n" 1>&2
97fffcccc452cdb4f4f6b81c9d2dda74c6d54b52jerenkrantz gettext " a port defined (-v option) or\n" 1>&2
97fffcccc452cdb4f4f6b81c9d2dda74c6d54b52jerenkrantz gettext " have dial-out instructions (-U option).\n" 1>&2
97fffcccc452cdb4f4f6b81c9d2dda74c6d54b52jerenkrantz exit 1
97fffcccc452cdb4f4f6b81c9d2dda74c6d54b52jerenkrantz fi
97fffcccc452cdb4f4f6b81c9d2dda74c6d54b52jerenkrantzfi
705c8ed3ef608706c91ca12483d7b54ff9007cc9jerenkrantz
705c8ed3ef608706c91ca12483d7b54ff9007cc9jerenkrantz# process the "server" value
705c8ed3ef608706c91ca12483d7b54ff9007cc9jerenkrantz# It can be a hostname, UUCP form (server!queue), RCMD form(queue@server),
705c8ed3ef608706c91ca12483d7b54ff9007cc9jerenkrantz# or in URI form ({scheme}://{endpoint})
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz#
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantzcase "${server}" in
705c8ed3ef608706c91ca12483d7b54ff9007cc9jerenkrantz *://*) # URI form
cf24c48249f38c34c04617f5b78b240f1cee380ajerenkrantz uri=${server}
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz rem_printer=$(expr "${server}" : ".*://.*/\([^/]*\)")
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz server=$(expr "${server}" : ".*://\([^/]*\)/.*")
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz ;;
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz *@*) # RCMD form
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz rem_printer=$(expr "${server}" : "\(.*\)@.*")
029cfcadd33649e610c939d106dec96ca7f27bacniq server=$(expr "${server}" : ".*@\(.*\)")
029cfcadd33649e610c939d106dec96ca7f27bacniq ;;
029cfcadd33649e610c939d106dec96ca7f27bacniq *!*) # UUCP form
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz rem_printer=$(expr "${server}" : ".*!\(.*\)")
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet server=$(expr "${server}" : "\(.*\)!.*")
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet ;;
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz *) # hostname
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz rem_printer=${printer}
2261031aa94be82d7e6b1b8c367afc1b282317f5ianh ;;
185aa71728867671e105178b4c66fbc22b65ae26sfesac
2261031aa94be82d7e6b1b8c367afc1b282317f5ianh
2261031aa94be82d7e6b1b8c367afc1b282317f5ianh# if there is a "device" or LP configuration, it's local
e93624301705e3dc68992e3b488a764389eb8b98trawickif [[ -n "${device}" || -f /etc/lp/printers/${printer}/configuration || \
28ce4a9baa76e678af814ec56aecaeeff7665f35trawick -f /etc/lp/classes/${printer} ]] ; then
97fffcccc452cdb4f4f6b81c9d2dda74c6d54b52jerenkrantz local="true"
bf56fcc9e4c60c858523147ac34801848a361bdajerenkrantzfi
bf56fcc9e4c60c858523147ac34801848a361bdajerenkrantz
bf56fcc9e4c60c858523147ac34801848a361bdajerenkrantz# Do the LP configuration for a local printer served by lpsched
bf56fcc9e4c60c858523147ac34801848a361bdajerenkrantzif [[ -x ${LPADMIN} && -n "${local}" ]] ; then
bf56fcc9e4c60c858523147ac34801848a361bdajerenkrantz # enumerate LP configured printers before modification
bf56fcc9e4c60c858523147ac34801848a361bdajerenkrantz PRE=/tmp/lpadmin-pre.$$
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz (/bin/ls /etc/lp/printers 2>/dev/null ; /bin/ls /etc/lp/classes \
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz 2>/dev/null) >${PRE}
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz # if there are no printers configured, enable LP service(s)
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz [[ ! -s "${PRE}" ]] && lp_config_service enable
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz
bf56fcc9e4c60c858523147ac34801848a361bdajerenkrantz # add filters to LP service
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz lp_config_filters
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz # add new ppd file to PPD file repositories
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz if [[ -n "${ppd_file}" && -x ${PPDMGR} ]] ; then
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz add_new_ppd_file "${ppd_file}"
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz fi
97fffcccc452cdb4f4f6b81c9d2dda74c6d54b52jerenkrantz
1fbf6ba0f5207e6637b49f9a9dfcc779bbe952a9trawick # modify LP destination(s)
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz CMD="${PFEXEC} ${LPADMIN}"
97fffcccc452cdb4f4f6b81c9d2dda74c6d54b52jerenkrantz while [[ -n "$*" ]] ; do # to deal with multi-word arguments
97fffcccc452cdb4f4f6b81c9d2dda74c6d54b52jerenkrantz CMD="$CMD \"$1\""
97fffcccc452cdb4f4f6b81c9d2dda74c6d54b52jerenkrantz # replace the ppd_file originally specified with the -n option
97fffcccc452cdb4f4f6b81c9d2dda74c6d54b52jerenkrantz # with the one returned from call to ppdmgr
97fffcccc452cdb4f4f6b81c9d2dda74c6d54b52jerenkrantz if [[ "${1}" = "-n" ]] ; then
97fffcccc452cdb4f4f6b81c9d2dda74c6d54b52jerenkrantz CMD="$CMD \"${ppd_file}\""
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz shift
97fffcccc452cdb4f4f6b81c9d2dda74c6d54b52jerenkrantz fi
97fffcccc452cdb4f4f6b81c9d2dda74c6d54b52jerenkrantz shift
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz done
185aa71728867671e105178b4c66fbc22b65ae26sf case "$CMD" in
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz *\"-D\")
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz CMD="$CMD \"\""
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz ;;
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz esac
97fffcccc452cdb4f4f6b81c9d2dda74c6d54b52jerenkrantz
bf56fcc9e4c60c858523147ac34801848a361bdajerenkrantz # execute the LP lpadmin command
bf56fcc9e4c60c858523147ac34801848a361bdajerenkrantz eval $CMD
bf56fcc9e4c60c858523147ac34801848a361bdajerenkrantz exit_code=$?
bf56fcc9e4c60c858523147ac34801848a361bdajerenkrantz
bf56fcc9e4c60c858523147ac34801848a361bdajerenkrantz # enumerate LP configured printers after modification
bf56fcc9e4c60c858523147ac34801848a361bdajerenkrantz POST=/tmp/lpadmin-post.$$
bf56fcc9e4c60c858523147ac34801848a361bdajerenkrantz (/bin/ls /etc/lp/printers 2>/dev/null ; /bin/ls /etc/lp/classes \
029cfcadd33649e610c939d106dec96ca7f27bacniq 2>/dev/null) >${POST}
ab5581cc78e9d865b0a6ab1404c53347b3276968rbb
2261031aa94be82d7e6b1b8c367afc1b282317f5ianh # if there are no destinations, disable the service(s)
e93624301705e3dc68992e3b488a764389eb8b98trawick [[ ! -s "${POST}" ]] && lp_config_service disable
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet
228ff31074b0b763ead96ce28e9e98b4ecc510a8jorton # sync printers.conf with LP configuration
228ff31074b0b763ead96ce28e9e98b4ecc510a8jorton lp_config_sync_pconf "${PRE}" "${POST}"
228ff31074b0b763ead96ce28e9e98b4ecc510a8jorton
228ff31074b0b763ead96ce28e9e98b4ecc510a8jorton /bin/rm -f ${PRE} ${POST}
228ff31074b0b763ead96ce28e9e98b4ecc510a8jortonfi
228ff31074b0b763ead96ce28e9e98b4ecc510a8jorton
228ff31074b0b763ead96ce28e9e98b4ecc510a8jorton# Do any printers.conf configuration that is required
228ff31074b0b763ead96ce28e9e98b4ecc510a8jortonif [[ -n "${delete}" ]] ; then
228ff31074b0b763ead96ce28e9e98b4ecc510a8jorton if [[ "${delete}" = "all" ]] ; then
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet [[ $exit_code -eq 0 ]] && delete_all
df38daceaa0d8d19bb7e23f6e9bcec258466441djorton elif [[ -z "${local}" ]] ; then
be22e9735c88e468a7fbdc886d29748fa82a58c5pquerna ${LPSET} -n system -x ${delete}
df38daceaa0d8d19bb7e23f6e9bcec258466441djorton exit_code=$?
df38daceaa0d8d19bb7e23f6e9bcec258466441djorton fi
df38daceaa0d8d19bb7e23f6e9bcec258466441djortonelse
be22e9735c88e468a7fbdc886d29748fa82a58c5pquerna if [[ -z "${local}" ]] ; then
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet # if we need a uri, find the "best" one.
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet if [[ -z "${uri}" ]] ; then
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet uri="ipp://${server}/printers/${rem_printer}"
bf56fcc9e4c60c858523147ac34801848a361bdajerenkrantz ${LPSTAT} -p ${uri} >/dev/null 2>&1
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet if [[ $? -ne 0 ]] ; then
df38daceaa0d8d19bb7e23f6e9bcec258466441djorton uri="lpd://${server}/printers/${rem_printer}#Solaris"
b2421ca2e60283026146dbd9596a958c7b214a60wrowe fi
b62c24d5cc5bec29cec95aae8e236016cd78fe3cniq fi
b62c24d5cc5bec29cec95aae8e236016cd78fe3cniq # set the bsdaddr
b62c24d5cc5bec29cec95aae8e236016cd78fe3cniq bsdaddr="${server},${rem_printer},Solaris"
283cab4ec4c440fe33ce47778d85b1208e169a87manoj
e36ef0d081aa59867688bcbb3da65952ec16fae3rbb if [[ -n "${printer}" ]] ; then
e36ef0d081aa59867688bcbb3da65952ec16fae3rbb ${LPSET} -n system \
e36ef0d081aa59867688bcbb3da65952ec16fae3rbb -a "printer-uri-supported=${uri}" \
e36ef0d081aa59867688bcbb3da65952ec16fae3rbb -a "bsdaddr=${bsdaddr}" ${printer}
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet exit_code=$?
bf56fcc9e4c60c858523147ac34801848a361bdajerenkrantz fi
bf56fcc9e4c60c858523147ac34801848a361bdajerenkrantz
cf24c48249f38c34c04617f5b78b240f1cee380ajerenkrantz fi
cf24c48249f38c34c04617f5b78b240f1cee380ajerenkrantz
cf24c48249f38c34c04617f5b78b240f1cee380ajerenkrantz if [[ -n "${printer}" && -n "${description}" ]] ; then
cf24c48249f38c34c04617f5b78b240f1cee380ajerenkrantz ${LPSET} -n system \
bf56fcc9e4c60c858523147ac34801848a361bdajerenkrantz -a "description=${description}" ${printer}
32b0f71b11ab1962084982d9594153321de56166trawick exit_code=$?
bf56fcc9e4c60c858523147ac34801848a361bdajerenkrantz fi
32b0f71b11ab1962084982d9594153321de56166trawickfi
0d5c04826299cc26fb8842416a40ffb71387a9c5jorton
0d5c04826299cc26fb8842416a40ffb71387a9c5jorton# if the "default" doesn't resolve a "bsdaddr", the printer is gone, remove it
0d5c04826299cc26fb8842416a40ffb71387a9c5jorton${LPGET} -n system -k bsdaddr _default >/dev/null 2>&1 ||
0d5c04826299cc26fb8842416a40ffb71387a9c5jorton ${LPSET} -n system -x _default >/dev/null 2>&1
0d5c04826299cc26fb8842416a40ffb71387a9c5jorton
0d5c04826299cc26fb8842416a40ffb71387a9c5jortonexit $exit_code
32b0f71b11ab1962084982d9594153321de56166trawick