lpadmin revision bcdabfc47e027d458c65d1c456642dd12908e197
842ae4bd224140319ae7feec1872b93dfd491143fielding# CDDL HEADER START
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.
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd# See the License for the specific language governing permissions
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd# and limitations under the License.
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# CDDL HEADER END
2d71630471d1c23f0137309e3c3957c633ecbfd6rbb# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet# Use is subject to license terms.
95d00ea81131488769296fa5765ed745cbf45207trawick gettext " lpadmin -S print-wheel -A alert-type [ -W minutes ]\n" 1>&2
95d00ea81131488769296fa5765ed745cbf45207trawick gettext " lpadmin -M -f form-name [ -a [ -o filebreak ]\n" 1>&2
ebf4099fd4921bbbcef21dc872b9cd4fc73e9f55trawick# create a filter table for LP service
9179fa90e821c964d10f28b97fc6acee776af7cfwrowe if [[ ! -f /etc/lp/filter.table ]] ; then
185aa71728867671e105178b4c66fbc22b65ae26sf# enable/disable LP related service(s)
cf24c48249f38c34c04617f5b78b240f1cee380ajerenkrantz # svcadm ${1} -s svc:/application/print/rfc1179:default
cf24c48249f38c34c04617f5b78b240f1cee380ajerenkrantz # svcadm ${1} -s svc:/application/print/ipp-listener:default
95d00ea81131488769296fa5765ed745cbf45207trawick# synchronize printers.conf with LP configuration changes
6bdf767f10f67548501103ae10cc159dcfb2c19ftrawick for DEST in ${ADDED} ; do
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet for DEST in ${REMOVED} ; do
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet# Delete all destinations in printers.conf
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet for DEST in $(lpget -n system list | egrep -e '.+:$' | sed -e 's/://')
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet# Call the ppdmgr utility to add a new PPD file to the system.
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet# $1 - path to PPD file
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet# $2 - label name (optional)
9179fa90e821c964d10f28b97fc6acee776af7cfwrowe # Add new ppd file and echo full path it was actually saved to
275419d6395e6f072962fb701b89accaff1f3690jerenkrantz if [[ ${ppdmgrrc} -ne 0 ]] ; then
275419d6395e6f072962fb701b89accaff1f3690jerenkrantz# Execution begins here
b501b72e4bfed12a431278217ba66ae531d9a293rbb# be sure that we can run lpset and lpget
b501b72e4bfed12a431278217ba66ae531d9a293rbb gettext "lpadmin: System error; cannot set default printer\n" 1>&2
1fbf6ba0f5207e6637b49f9a9dfcc779bbe952a9trawick# Deal with the -d option independently since getopts does not handle
185aa71728867671e105178b4c66fbc22b65ae26sf# options that may or may not have arguments
85e4da1cf0dee899551b583b1f06314b2835100awrowe else # no default, nothing to do
85e4da1cf0dee899551b583b1f06314b2835100awrowe else # can't set default to an unconfigured printer
85e4da1cf0dee899551b583b1f06314b2835100awrowe else # invalid usage
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
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna if [[ -n "${delete}" ]] ; then
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna if [[ ! -n "${server}" ]] ; then
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna local="true"
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna local="true"
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna local="true"
e8f95a682820a599fe41b22977010636be5c2717jim local="true"
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna if [[ ! -f ${LPGET} ]] ; then
89211a3153be8b03353c3bfbca45fed67cb80f0bpquerna gettext "lpadmin: System error; cannot set class\n " 1>&2
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 local="true"
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet# We don't have anything to do; let user know and bail
029cfcadd33649e610c939d106dec96ca7f27bacniqif [[ ! -n "${printer}" && ! -n "${delete}" && ! -n "${local}" ]] ; then
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet gettext " TO FIX: You must give one of these options:\n" 1>&2
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet# Printer does not exist
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz# To be consistent with 2.5, assume adding local printer
705c8ed3ef608706c91ca12483d7b54ff9007cc9jerenkrantzif [[ ! -n "${device}" && ! -n "${server}" && ! -n "${delete}" && \
705c8ed3ef608706c91ca12483d7b54ff9007cc9jerenkrantz ! -n "${local}" ]] ; 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 " have dial-out instructions (-U option).\n" 1>&2
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})
705c8ed3ef608706c91ca12483d7b54ff9007cc9jerenkrantz *://*) # URI form
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz rem_printer=$(expr "${server}" : ".*://.*/\([^/]*\)")
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz server=$(expr "${server}" : ".*://\([^/]*\)/.*")
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz *@*) # RCMD form
029cfcadd33649e610c939d106dec96ca7f27bacniq *!*) # UUCP form
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz *) # hostname
2261031aa94be82d7e6b1b8c367afc1b282317f5ianh# if there is a "device" or LP configuration, it's local
e93624301705e3dc68992e3b488a764389eb8b98trawickif [[ -n "${device}" || -f /etc/lp/printers/${printer}/configuration || \
97fffcccc452cdb4f4f6b81c9d2dda74c6d54b52jerenkrantz local="true"
bf56fcc9e4c60c858523147ac34801848a361bdajerenkrantz# Do the LP configuration for a local printer served by lpsched
bf56fcc9e4c60c858523147ac34801848a361bdajerenkrantz # enumerate LP configured printers before modification
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz (/bin/ls /etc/lp/printers 2>/dev/null ; /bin/ls /etc/lp/classes \
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz # if there are no printers configured, enable LP service(s)
bf56fcc9e4c60c858523147ac34801848a361bdajerenkrantz # add filters to LP service
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz # add new ppd file to PPD file repositories
3caed8f01e7d67f3ad5d47cb28bb4e43131652fdjerenkrantz if [[ -n "${ppd_file}" && -x ${PPDMGR} ]] ; then
1fbf6ba0f5207e6637b49f9a9dfcc779bbe952a9trawick # modify LP destination(s)
97fffcccc452cdb4f4f6b81c9d2dda74c6d54b52jerenkrantz while [[ -n "$*" ]] ; do # to deal with multi-word arguments
97fffcccc452cdb4f4f6b81c9d2dda74c6d54b52jerenkrantz # replace the ppd_file originally specified with the -n option
97fffcccc452cdb4f4f6b81c9d2dda74c6d54b52jerenkrantz # with the one returned from call to ppdmgr
bf56fcc9e4c60c858523147ac34801848a361bdajerenkrantz # execute the LP lpadmin command
bf56fcc9e4c60c858523147ac34801848a361bdajerenkrantz # enumerate LP configured printers after modification
bf56fcc9e4c60c858523147ac34801848a361bdajerenkrantz (/bin/ls /etc/lp/printers 2>/dev/null ; /bin/ls /etc/lp/classes \
2261031aa94be82d7e6b1b8c367afc1b282317f5ianh # if there are no destinations, disable the service(s)
228ff31074b0b763ead96ce28e9e98b4ecc510a8jorton # sync printers.conf with LP configuration
228ff31074b0b763ead96ce28e9e98b4ecc510a8jorton# Do any printers.conf configuration that is required
228ff31074b0b763ead96ce28e9e98b4ecc510a8jortonif [[ -n "${delete}" ]] ; then
df38daceaa0d8d19bb7e23f6e9bcec258466441djorton elif [[ -z "${local}" ]] ; then
be22e9735c88e468a7fbdc886d29748fa82a58c5pquerna if [[ -z "${local}" ]] ; then
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet # if we need a uri, find the "best" one.
dc9d4f49d36e64c0157d930cb22ca82a6291c0cbdgaudet if [[ -z "${uri}" ]] ; then
df38daceaa0d8d19bb7e23f6e9bcec258466441djorton uri="lpd://${server}/printers/${rem_printer}#Solaris"
b62c24d5cc5bec29cec95aae8e236016cd78fe3cniq # set the bsdaddr
e36ef0d081aa59867688bcbb3da65952ec16fae3rbb if [[ -n "${printer}" ]] ; then
e36ef0d081aa59867688bcbb3da65952ec16fae3rbb -a "printer-uri-supported=${uri}" \
cf24c48249f38c34c04617f5b78b240f1cee380ajerenkrantz if [[ -n "${printer}" && -n "${description}" ]] ; then
0d5c04826299cc26fb8842416a40ffb71387a9c5jorton# if the "default" doesn't resolve a "bsdaddr", the printer is gone, remove it