lpadmin revision acecc18a468d31e360585edec30f9f541025c773
5347c0fcb04eaea19d9f39795646239f487c6207Tinderbox User# CDDL HEADER START
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# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
1c57c3f79db0bf0358bbe6d7b5ad650c0c852f4bTinderbox User# See the License for the specific language governing permissions
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# and limitations under the License.
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# CDDL HEADER END
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
0da02c26a6631c25f075a8e4ac6de9e58f49a0c2Tinderbox User# Use is subject to license terms.
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox User gettext " lpadmin -p (printer) (options)\n" 1>&2
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox User gettext " lpadmin -S print-wheel -A alert-type [ -W minutes ]\n" 1>&2
363b21045b718d06d414784c96193dc9a233e8c5Tinderbox User gettext " lpadmin -M -f form-name [ -a [ -o filebreak ]\n" 1>&2
363b21045b718d06d414784c96193dc9a233e8c5Tinderbox User# create a filter table for LP service
363b21045b718d06d414784c96193dc9a233e8c5Tinderbox User if [[ ! -f /etc/lp/filter.table ]] ; then
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox User cd /etc/lp/fd ; for filter in *.fd ; do
33c9436ef1a43d3c0fc3d9be9b4b0509daa83223Tinderbox User# enable/disable LP related service(s)
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
0da02c26a6631c25f075a8e4ac6de9e58f49a0c2Tinderbox User# synchronize printers.conf with LP configuration changes
3ca1a32241189d1e02e59f6b56399eb9b40f2aafTinderbox User ${LPSET} -n system -x ${DEST} 2>/dev/null
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User# Delete all destinations in printers.conf
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User for DEST in $(lpget -n system list | egrep -e '.+:$' | sed -e 's/://')
363b21045b718d06d414784c96193dc9a233e8c5Tinderbox User# Call the ppdmgr utility to add a new PPD file to the system.
3ca1a32241189d1e02e59f6b56399eb9b40f2aafTinderbox User# $1 - path to PPD file
363b21045b718d06d414784c96193dc9a233e8c5Tinderbox User# $2 - label name (optional)
363b21045b718d06d414784c96193dc9a233e8c5Tinderbox User # Add new ppd file and echo full path it was actually saved to
550d3276d0490c4918f089ccb1528a3eb0951b0aTinderbox User if [[ ${ppdmgrrc} -ne 0 ]] ; then
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User# Execution begins here
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
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 if [[ $# -eq 1 ]] ; then # remove the "default"
d253648fe3331622cebea02d60aaecca3082d78dTinderbox User else # no default, nothing to do
d253648fe3331622cebea02d60aaecca3082d78dTinderbox User elif [[ $# -eq 2 ]] ; then # add/change the "default"
dfae459e8c4f794f8a239e74aa9d5e11cce6ea5bTinderbox User else # can't set default to an unconfigured printer
bfb7b680bf88c1fdd9949197b71c512c532280a4Tinderbox User else # invalid usage
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
bfb7b680bf88c1fdd9949197b71c512c532280a4Tinderbox User if [[ -n "${delete}" ]] ; then
f14ce68ee54a5a4587fbde4ffacb117946df2d73Tinderbox User if [[ ! -n "${server}" ]] ; then
0d6a6642b2be93cffa651c54a9b8810dd2d31392Tinderbox User -n "${device}" || -n "${description}" ]] ; then
abe69df9a7de5cda07a2b8e19e8b7c981bcd7a9dTinderbox User if [[ ! -f ${LPGET} ]] ; then
abe69df9a7de5cda07a2b8e19e8b7c981bcd7a9dTinderbox User gettext "lpadmin: System error; cannot set class\n " 1>&2
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# We don't have anything to do; let user know and bail
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# Printer does not exist
a0fb6a0980359165a4459723f52d5d7b5725f9c6Tinderbox User# To be consistent with 2.5, assume adding local printer
8c7245514646663b25d8b186186ebede41903fa3Tinderbox Userif [[ ! -n "${device}" && ! -n "${server}" && ! -n "${delete}" && \
8c7245514646663b25d8b186186ebede41903fa3Tinderbox User ! -n "${local}" ]] ; 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# 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})
3b15473cedf41d48904f5b07bdc5e87afff6b58cTinderbox User *://*) # URI form
3b15473cedf41d48904f5b07bdc5e87afff6b58cTinderbox User rem_printer=$(expr "${server}" : ".*://.*/\([^/]*\)")
3b15473cedf41d48904f5b07bdc5e87afff6b58cTinderbox User server=$(expr "${server}" : ".*://\([^/]*\)/.*")
ffe29868b4bbc64953fc5d0de51f988c20158967Tinderbox User *@*) # RCMD form
99b30e26a6beb9092557cc9e5370b517309bff6eTinderbox User rem_printer=$(expr "${server}" : "\(.*\)@.*")
99b30e26a6beb9092557cc9e5370b517309bff6eTinderbox User *!*) # UUCP form
99b30e26a6beb9092557cc9e5370b517309bff6eTinderbox User rem_printer=$(expr "${server}" : ".*!\(.*\)")
99b30e26a6beb9092557cc9e5370b517309bff6eTinderbox User *) # hostname
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# 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 (/bin/ls /etc/lp/printers 2>/dev/null ; /bin/ls /etc/lp/classes \
666b453b37f9ccfe3c7984fb0b31b70a3ceb918fTinderbox User # if there are no printers configured, enable LP service(s)
666b453b37f9ccfe3c7984fb0b31b70a3ceb918fTinderbox User [[ ! -s "${PRE}" ]] && lp_config_service enable
666b453b37f9ccfe3c7984fb0b31b70a3ceb918fTinderbox User # add filters to LP service
666b453b37f9ccfe3c7984fb0b31b70a3ceb918fTinderbox User # add new ppd file to PPD file repositories
bea02a4cc08d57b9f36979906f291ac78a99060aTinderbox User if [[ -n "${ppd_file}" && -x ${PPDMGR} ]] ; then
bea02a4cc08d57b9f36979906f291ac78a99060aTinderbox User # modify LP destination(s)
bea02a4cc08d57b9f36979906f291ac78a99060aTinderbox User while [[ -n "$*" ]] ; do # to deal with multi-word arguments
bea02a4cc08d57b9f36979906f291ac78a99060aTinderbox User # replace the ppd_file originally specified with the -n option
9efd8fc7e811d3c0c160adeb5552c2df7e49df67Tinderbox User # with the one returned from call to ppdmgr
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt # execute the LP lpadmin command
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt # enumerate LP configured printers after modification
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt (/bin/ls /etc/lp/printers 2>/dev/null ; /bin/ls /etc/lp/classes \
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User # if there are no destinations, disable the service(s)
1c57c3f79db0bf0358bbe6d7b5ad650c0c852f4bTinderbox User # sync printers.conf with LP configuration
# Do any printers.conf configuration that is required
exit_code=$?
exit_code=$?
exit_code=$?
exit $exit_code