c81d47afd05baeb768e2f032636019b717899efdceastha#!/bin/ksh
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# CDDL HEADER START
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# The contents of this file are subject to the terms of the
c81d47afd05baeb768e2f032636019b717899efdceastha# Common Development and Distribution License (the "License").
c81d47afd05baeb768e2f032636019b717899efdceastha# You may not use this file except in compliance with the License.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
c81d47afd05baeb768e2f032636019b717899efdceastha# or http://www.opensolaris.org/os/licensing.
c81d47afd05baeb768e2f032636019b717899efdceastha# See the License for the specific language governing permissions
c81d47afd05baeb768e2f032636019b717899efdceastha# and limitations under the License.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# When distributing Covered Code, include this CDDL HEADER in each
c81d47afd05baeb768e2f032636019b717899efdceastha# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
c81d47afd05baeb768e2f032636019b717899efdceastha# If applicable, add the following below this CDDL HEADER, with the
c81d47afd05baeb768e2f032636019b717899efdceastha# fields enclosed by brackets "[]" replaced with your own identifying
c81d47afd05baeb768e2f032636019b717899efdceastha# information: Portions Copyright [yyyy] [name of copyright owner]
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# CDDL HEADER END
c81d47afd05baeb768e2f032636019b717899efdceastha#
4fb0018bf832424363cfcc05b23323c48ab7a076Sumanth Naropanth# Copyright 2009 Sun Microsystems, Inc. All rights reserved.
c81d47afd05baeb768e2f032636019b717899efdceastha# Use is subject to license terms.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Description: Script to generate the Solaris printmgr 'ppdcache' file from the
c81d47afd05baeb768e2f032636019b717899efdceastha# ppd files installed in the given ppd database directory
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# ppdmgr -a <ppd_filename_path> [ -L <label> ] [-w]
c81d47afd05baeb768e2f032636019b717899efdceastha# ppdmgr -g <ppd_filename_path> [ -L <label> ] [ -R <ppd_repository> ]
c81d47afd05baeb768e2f032636019b717899efdceastha# ppdmgr -r [ -L <label> ] [ -R <ppd_repository> ]
c81d47afd05baeb768e2f032636019b717899efdceastha# ppdmgr -u [ -L <label> ] [ -R <ppd_repository> ]
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Options:
c81d47afd05baeb768e2f032636019b717899efdceastha# -a <ppd_filename_path> - Add a new PPD file to the specified
c81d47afd05baeb768e2f032636019b717899efdceastha# label in the "user" repository, and
c81d47afd05baeb768e2f032636019b717899efdceastha# updates to the "user" repository
c81d47afd05baeb768e2f032636019b717899efdceastha# in the ppdcache.
c81d47afd05baeb768e2f032636019b717899efdceastha# -g <ppd_filename_path> - Generate a cache file entry
c81d47afd05baeb768e2f032636019b717899efdceastha# for the specified PPD file
c81d47afd05baeb768e2f032636019b717899efdceastha# on standard out.
c81d47afd05baeb768e2f032636019b717899efdceastha# -L <label> - Label name. <label>
c81d47afd05baeb768e2f032636019b717899efdceastha# can be any characters from the
c81d47afd05baeb768e2f032636019b717899efdceastha# portable character set, however
c81d47afd05baeb768e2f032636019b717899efdceastha# may not contain a semi-colon (':').
c81d47afd05baeb768e2f032636019b717899efdceastha# The following are the defaults
c81d47afd05baeb768e2f032636019b717899efdceastha# for <label> for each option:
c81d47afd05baeb768e2f032636019b717899efdceastha# OPTION DEFAULT LABEL
c81d47afd05baeb768e2f032636019b717899efdceastha# ------ -------------
c81d47afd05baeb768e2f032636019b717899efdceastha# -a <label> from <ppd_filename_path>
c81d47afd05baeb768e2f032636019b717899efdceastha# if <ppd_filename_path>
c81d47afd05baeb768e2f032636019b717899efdceastha# is from a known repository,
c81d47afd05baeb768e2f032636019b717899efdceastha# otherwise defaults to "user".
c81d47afd05baeb768e2f032636019b717899efdceastha# -g <label> from <ppd_filename_path>
c81d47afd05baeb768e2f032636019b717899efdceastha# if <ppd_filename_path>
c81d47afd05baeb768e2f032636019b717899efdceastha# is from a known repository,
c81d47afd05baeb768e2f032636019b717899efdceastha# otherwise defaults to "user".
c81d47afd05baeb768e2f032636019b717899efdceastha# -r all
c81d47afd05baeb768e2f032636019b717899efdceastha# -u all
c81d47afd05baeb768e2f032636019b717899efdceastha# The following are reserved labels:
c81d47afd05baeb768e2f032636019b717899efdceastha# caches - may never be specified
c81d47afd05baeb768e2f032636019b717899efdceastha# ppdcache - may never be specified
c81d47afd05baeb768e2f032636019b717899efdceastha# manufaliases - may never be specified
c81d47afd05baeb768e2f032636019b717899efdceastha# all - applies specified
c81d47afd05baeb768e2f032636019b717899efdceastha# action to all labels
c81d47afd05baeb768e2f032636019b717899efdceastha# in a repository.
c81d47afd05baeb768e2f032636019b717899efdceastha# Can only be specified
c81d47afd05baeb768e2f032636019b717899efdceastha# with -r or -u.
c81d47afd05baeb768e2f032636019b717899efdceastha# SUNW* - anything starting with
c81d47afd05baeb768e2f032636019b717899efdceastha# SUNW is reserved for
c81d47afd05baeb768e2f032636019b717899efdceastha# use by Sun, but not
c81d47afd05baeb768e2f032636019b717899efdceastha# prohibited.
c81d47afd05baeb768e2f032636019b717899efdceastha# -r - Rebuild the cache information for the
c81d47afd05baeb768e2f032636019b717899efdceastha# specified label in the specified
c81d47afd05baeb768e2f032636019b717899efdceastha# repository. Similar to -u, however,
c81d47afd05baeb768e2f032636019b717899efdceastha# the cache file is removed to force an
c81d47afd05baeb768e2f032636019b717899efdceastha# update to the ppdcache.
c81d47afd05baeb768e2f032636019b717899efdceastha# -R <ppd_repository> - PPD repository name.
c81d47afd05baeb768e2f032636019b717899efdceastha# Defaults to "user".
c81d47afd05baeb768e2f032636019b717899efdceastha# The following are the possible
c81d47afd05baeb768e2f032636019b717899efdceastha# values for <ppd_repository> and
c81d47afd05baeb768e2f032636019b717899efdceastha# location in the system:
c81d47afd05baeb768e2f032636019b717899efdceastha# REP LOCATION
c81d47afd05baeb768e2f032636019b717899efdceastha# --- --------
c81d47afd05baeb768e2f032636019b717899efdceastha# user /var/lp/ppd
c81d47afd05baeb768e2f032636019b717899efdceastha# admin /usr/local/share/ppd
c81d47afd05baeb768e2f032636019b717899efdceastha# vendor /opt/share/ppd
c81d47afd05baeb768e2f032636019b717899efdceastha# system /usr/share/ppd
c81d47afd05baeb768e2f032636019b717899efdceastha# all all repositories
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Note: When specified with the -a option
c81d47afd05baeb768e2f032636019b717899efdceastha# only "user" and "admin" are valid.
c81d47afd05baeb768e2f032636019b717899efdceastha# "vendor", "system", and "all" will be
c81d47afd05baeb768e2f032636019b717899efdceastha# considered reserved.
c81d47afd05baeb768e2f032636019b717899efdceastha# -u - Update the PPD cache information
c81d47afd05baeb768e2f032636019b717899efdceastha# for the specified label in the specified
c81d47afd05baeb768e2f032636019b717899efdceastha# repository if needed. If the cache
c81d47afd05baeb768e2f032636019b717899efdceastha# update was required, then the updated
c81d47afd05baeb768e2f032636019b717899efdceastha# cache information is reflected in
c81d47afd05baeb768e2f032636019b717899efdceastha# the ppdcache.
c81d47afd05baeb768e2f032636019b717899efdceastha# -w - Display full path of where the
c81d47afd05baeb768e2f032636019b717899efdceastha# ppd file is located on the system.
c81d47afd05baeb768e2f032636019b717899efdceastha# Only valid with -a, otherwise the
c81d47afd05baeb768e2f032636019b717899efdceastha# option is ignored.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# If -a, -g, -r, or -u are specified on the command line, only the last action
c81d47afd05baeb768e2f032636019b717899efdceastha# specified will be performed.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Cache file entry format:
c81d47afd05baeb768e2f032636019b717899efdceastha# <ModifiedManufacturerName>:<Model>:<NickName>:<1284DeviceIDManufacturer>:<1284DeviceIDModel>:<FullPPDFilePath>
c81d47afd05baeb768e2f032636019b717899efdceastha# HP:HP DeskJet 450:Foomatic/hpijs (recommended):dj450:hp:/usr/share/ppd/HP/HP-DeskJet_450-hpijs.ppd.gz
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceasthaPATH=/bin:/usr/bin:/usr/sbin export PATH
c81d47afd05baeb768e2f032636019b717899efdceasthaset -o noclobber
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceasthaTEXTDOMAIN="SUNW_OST_OSCMD"
c81d47afd05baeb768e2f032636019b717899efdceasthaexport TEXTDOMAIN
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Generates debug output for calling routine.
c81d47afd05baeb768e2f032636019b717899efdceastha# If calling routine's name is passed in, then
c81d47afd05baeb768e2f032636019b717899efdceastha# will also generate the name of the calling routine.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# $1 - Name of calling routine
c81d47afd05baeb768e2f032636019b717899efdceasthadebugger()
c81d47afd05baeb768e2f032636019b717899efdceastha{
c81d47afd05baeb768e2f032636019b717899efdceastha [[ ${debug} -eq 1 ]] || return 1
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ -n "${1}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha echo "In ${1}..." 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha return 0
c81d47afd05baeb768e2f032636019b717899efdceastha}
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Set the ownership and permissions on a file.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# $1 - Mode
c81d47afd05baeb768e2f032636019b717899efdceastha# $2 - Owner:Group
c81d47afd05baeb768e2f032636019b717899efdceastha# $3 - Full path to file
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceasthaset_perms()
c81d47afd05baeb768e2f032636019b717899efdceastha{
c81d47afd05baeb768e2f032636019b717899efdceastha /bin/chmod -f ${1} "${3}" >/dev/null 2>&1
c81d47afd05baeb768e2f032636019b717899efdceastha /bin/chown -f ${2} "${3}" >/dev/null 2>&1
c81d47afd05baeb768e2f032636019b717899efdceastha}
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Create administrator repository directories, /usr/local/share/ppd,
c81d47afd05baeb768e2f032636019b717899efdceastha# if needed. This is a special case a Solaris doesn't deliver
c81d47afd05baeb768e2f032636019b717899efdceastha# /usr/local/share and it has different permissions than the
c81d47afd05baeb768e2f032636019b717899efdceastha# user repository.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# $1 - destination repository name
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceasthacreate_adminrep_dirs()
c81d47afd05baeb768e2f032636019b717899efdceastha{
c81d47afd05baeb768e2f032636019b717899efdceastha if debugger "check_adminrep_dirs" ; then
c81d47afd05baeb768e2f032636019b717899efdceastha set -x
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha # Only create administrator repository directories, if needed.
c81d47afd05baeb768e2f032636019b717899efdceastha [[ "${1}" = "${ADMIN}" ]] || return 0
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha # Check /usr/local/share/ppd
c81d47afd05baeb768e2f032636019b717899efdceastha [[ ! -d "${ADMINREP}" ]] || return 0
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha # Check /usr/local/share
c81d47afd05baeb768e2f032636019b717899efdceastha admpar=$(/bin/dirname "${ADMINREP}")
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ ! -d "${admpar}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha # Check /usr/local
c81d47afd05baeb768e2f032636019b717899efdceastha admppar=$(/bin/dirname "${admpar}")
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ ! -d "${admppar}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha make_dir ${DIRMODE} ${ADMINOWNER} "${admppar}" || \
c81d47afd05baeb768e2f032636019b717899efdceastha return 1
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha make_dir ${DIRMODE} ${ADMINOWNER} "${admpar}" || return 1
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha make_dir ${DIRMODE} ${ADMINOWNER} ${ADMINREP} || return 1
c81d47afd05baeb768e2f032636019b717899efdceastha return 0
c81d47afd05baeb768e2f032636019b717899efdceastha}
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Returns full path to PPD file that was added to the system.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# $1 - Full path to source PPD file
c81d47afd05baeb768e2f032636019b717899efdceastha# $2 - PPD file name
c81d47afd05baeb768e2f032636019b717899efdceastha# $3 - Full path to repository
c81d47afd05baeb768e2f032636019b717899efdceastha# $4 - Repository name
c81d47afd05baeb768e2f032636019b717899efdceastha# $5 - Label name
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Return codes:
c81d47afd05baeb768e2f032636019b717899efdceastha# 0 - File successfully added
c81d47afd05baeb768e2f032636019b717899efdceastha# 1 - Error
c81d47afd05baeb768e2f032636019b717899efdceastha# 2 - Duplicate file already exists
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceasthaadd_ppd()
c81d47afd05baeb768e2f032636019b717899efdceastha{
c81d47afd05baeb768e2f032636019b717899efdceastha if debugger ; then
c81d47afd05baeb768e2f032636019b717899efdceastha set -x
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha verify_ppd_file "${1}"
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ $? -ne 0 ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha gettext "invalid PPD file: ${1}" 2>/dev/null
c81d47afd05baeb768e2f032636019b717899efdceastha return 3
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha # The destination path can now be set
c81d47afd05baeb768e2f032636019b717899efdceastha dstlabelpath="${3}/${5}"
c81d47afd05baeb768e2f032636019b717899efdceastha dstmanufpath="${dstlabelpath}/${modmanuf}"
c81d47afd05baeb768e2f032636019b717899efdceastha dstpath="${dstmanufpath}/${2}"
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha # If a version (either compressed or not compressed) of the PPD
c81d47afd05baeb768e2f032636019b717899efdceastha # file exists in the destination in the label/repository,
c81d47afd05baeb768e2f032636019b717899efdceastha # then just return as there no work to be done.
c81d47afd05baeb768e2f032636019b717899efdceastha dst_copy_path=$(variant_copy "${1}" "${dstpath}" "${6}" "${ppdfname}")
c81d47afd05baeb768e2f032636019b717899efdceastha ap_rc=$?
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ ${ap_rc} -ne 0 ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha echo "${dst_copy_path}"
c81d47afd05baeb768e2f032636019b717899efdceastha return ${ap_rc}
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha # Can only add a PPD file to the "user" or "admin" repository.
c81d47afd05baeb768e2f032636019b717899efdceastha # Note: this check is here instead of at the top of this
c81d47afd05baeb768e2f032636019b717899efdceastha # function as we don't want to cause an error if a user
c81d47afd05baeb768e2f032636019b717899efdceastha # specifies the same repository and label as a the specified
c81d47afd05baeb768e2f032636019b717899efdceastha # ppd file and the repository of the specified ppd file
c81d47afd05baeb768e2f032636019b717899efdceastha # exists in a known repository.
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ "${4}" != "${USER}" && "${4}" != "${ADMIN}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha gettext "invalid PPD file repository name: ${4}" 2>/dev/null
c81d47afd05baeb768e2f032636019b717899efdceastha return 3
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha # Ensure destination directories exist
c81d47afd05baeb768e2f032636019b717899efdceastha if ! create_adminrep_dirs ${4} ${DIRMODE} ${ADMINOWNER} || \
c81d47afd05baeb768e2f032636019b717899efdceastha ! make_dir ${DIRMODE} ${DIROWNER} "${3}" || \
c81d47afd05baeb768e2f032636019b717899efdceastha ! make_dir ${DIRMODE} ${DIROWNER} "${dstlabelpath}" || \
c81d47afd05baeb768e2f032636019b717899efdceastha ! make_dir ${DIRMODE} ${DIROWNER} "${dstmanufpath}" ; then
c81d47afd05baeb768e2f032636019b717899efdceastha gettext "unable to create destination directories" 2>/dev/null
c81d47afd05baeb768e2f032636019b717899efdceastha return 3
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha # Copy source PPD file, and compress if needed, to destination
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ "${ppdfileext}" = "${PEXT}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha ${GZIP} "${1}" >"${dst_copy_path}" 2>/dev/null
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ $? -eq 1 ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha gettext "unable to copy PPD file " 2>/dev/null
c81d47afd05baeb768e2f032636019b717899efdceastha gettext "to destination" 2>/dev/null
c81d47afd05baeb768e2f032636019b717899efdceastha return 3
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha else
c81d47afd05baeb768e2f032636019b717899efdceastha /bin/cp -f "${1}" "${dst_copy_path}" >/dev/null 2>&1
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ $? -ne 0 ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha gettext "unable to copy PPD file " 2>/dev/null
c81d47afd05baeb768e2f032636019b717899efdceastha gettext "to destination" 2>/dev/null
c81d47afd05baeb768e2f032636019b717899efdceastha return 3
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha set_perms ${FILEMODE} ${FILEOWNER} "${dst_copy_path}"
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha echo "${dst_copy_path}"
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha return 0
c81d47afd05baeb768e2f032636019b717899efdceastha}
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Returns 0 if the cache needs to be modified, otherwise
c81d47afd05baeb768e2f032636019b717899efdceastha# returns 1.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# $1 - Full path to cache
c81d47afd05baeb768e2f032636019b717899efdceastha# $2 - Full path to cache replacement candidate
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceasthachanges_in_cache()
c81d47afd05baeb768e2f032636019b717899efdceastha{
c81d47afd05baeb768e2f032636019b717899efdceastha if debugger "changes_in_cache" ; then
c81d47afd05baeb768e2f032636019b717899efdceastha set -x
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ "${action}" = "${REBUILD}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha return 0
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha [[ "${2}" -nt "${1}" ]] || return 1
c81d47afd05baeb768e2f032636019b717899efdceastha if $(${CMP} "${1}" "${2}" >/dev/null 2>&1) ; then
c81d47afd05baeb768e2f032636019b717899efdceastha # No differences. Just update timestamp
c81d47afd05baeb768e2f032636019b717899efdceastha /bin/touch -r "${2}" "${1}" >/dev/null 2>&1
c81d47afd05baeb768e2f032636019b717899efdceastha return 1
c81d47afd05baeb768e2f032636019b717899efdceastha else
c81d47afd05baeb768e2f032636019b717899efdceastha return 0
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha}
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Generate a new golden cache file (/var/lp/ppd/ppdcache), by
c81d47afd05baeb768e2f032636019b717899efdceastha# concatenating and sorting all existing cache files in /var/lp/ppd/caches.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# If there are difference between the newly generated golden cache file and
c81d47afd05baeb768e2f032636019b717899efdceastha# the existing one (if it exists) then the newly generated one replaces the
c81d47afd05baeb768e2f032636019b717899efdceastha# existing one at /var/lp/ppd/ppdcache.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceasthaupdate_golden_cache()
c81d47afd05baeb768e2f032636019b717899efdceastha{
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha if debugger "update_golden_cache" ; then
c81d47afd05baeb768e2f032636019b717899efdceastha set -x
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha # Remove any cache files that don't have an associated
c81d47afd05baeb768e2f032636019b717899efdceastha # label.
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha for cname in $(/bin/ls ${VARCACHES} 2>/dev/null) ; do
c81d47afd05baeb768e2f032636019b717899efdceastha repname="${cname%%:*}"
c81d47afd05baeb768e2f032636019b717899efdceastha cfile="${cname#*:}"
c81d47afd05baeb768e2f032636019b717899efdceastha checkdir="$(get_rep_path ${repname})/${cfile}"
c81d47afd05baeb768e2f032636019b717899efdceastha remove_unassociated_cache "${checkdir}" "${cname}"
c81d47afd05baeb768e2f032636019b717899efdceastha done
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha # Combine the contents of all cache files into a
c81d47afd05baeb768e2f032636019b717899efdceastha # temporary golden cache file.
c81d47afd05baeb768e2f032636019b717899efdceastha #
4fb0018bf832424363cfcc05b23323c48ab7a076Sumanth Naropanth tmpgoldencache=$ppdmgrtmpdir/tmpgoldencache
4fb0018bf832424363cfcc05b23323c48ab7a076Sumanth Naropanth
c81d47afd05baeb768e2f032636019b717899efdceastha /bin/sort "${VARCACHES}"/* >>"${tmpgoldencache}" 2>/dev/null
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ ! -s "${tmpgoldencache}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha # No cache files. Remove golden cache.
c81d47afd05baeb768e2f032636019b717899efdceastha /bin/rm -f "${GOLDCACHE}" >/dev/null 2>&1
c81d47afd05baeb768e2f032636019b717899efdceastha /bin/rm -f "${tmpgoldencache}" >/dev/null 2>&1
c81d47afd05baeb768e2f032636019b717899efdceastha elif [[ -e "${GOLDCACHE}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha # Use the newly generated "temporary" golden cache file if there
c81d47afd05baeb768e2f032636019b717899efdceastha # differences between the current and newly generated ppdcache
c81d47afd05baeb768e2f032636019b717899efdceastha # or if a rebuild is being performed.
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ "${VARCACHES}" -nt "${GOLDCACHE}" ]] || \
c81d47afd05baeb768e2f032636019b717899efdceastha changes_in_cache "${GOLDCACHE}" "${tmpgoldencache}" ; then
c81d47afd05baeb768e2f032636019b717899efdceastha set_perms ${FILEMODE} ${FILEOWNER} "${tmpgoldencache}"
c81d47afd05baeb768e2f032636019b717899efdceastha /bin/mv -f "${tmpgoldencache}" \
c81d47afd05baeb768e2f032636019b717899efdceastha "${GOLDCACHE}" >/dev/null 2>&1
c81d47afd05baeb768e2f032636019b717899efdceastha else
c81d47afd05baeb768e2f032636019b717899efdceastha /bin/rm -f "${tmpgoldencache}" >/dev/null 2>&1
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha else
c81d47afd05baeb768e2f032636019b717899efdceastha # There wasn't an existing ppdcache. Install the newly
c81d47afd05baeb768e2f032636019b717899efdceastha # generated ppdcache file to the golden ppdcache.
c81d47afd05baeb768e2f032636019b717899efdceastha set_perms ${FILEMODE} ${FILEOWNER} "${tmpgoldencache}"
c81d47afd05baeb768e2f032636019b717899efdceastha /bin/mv -f "${tmpgoldencache}" "${GOLDCACHE}" >/dev/null 2>&1
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha}
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Returns a list of PPD files that exist.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# $1 - Full path to cache file
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastharemove_invalid_cache_entries()
c81d47afd05baeb768e2f032636019b717899efdceastha{
c81d47afd05baeb768e2f032636019b717899efdceastha if debugger ; then
c81d47afd05baeb768e2f032636019b717899efdceastha set -x
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha [[ -s "${1}" ]] || return
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha IFS="$NoSpaceTabIFS"
c81d47afd05baeb768e2f032636019b717899efdceastha for centry in $(/bin/cat "${1}" 2>/dev/null) ; do
c81d47afd05baeb768e2f032636019b717899efdceastha IFS="$SaveIFS"
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha # Keep the entry from the ppd cache if it still
c81d47afd05baeb768e2f032636019b717899efdceastha # exists and there haven't been any modifications
c81d47afd05baeb768e2f032636019b717899efdceastha # since the last update to the cache.
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ -n "${centry}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha ppdfile="${centry##*:}"
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ -n "${ppdfile}" && -e "${ppdfile}" &&
c81d47afd05baeb768e2f032636019b717899efdceastha "${1}" -nt "${ppdfile}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha echo "${centry}"
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha IFS="$NoSpaceTabIFS"
c81d47afd05baeb768e2f032636019b717899efdceastha done
c81d47afd05baeb768e2f032636019b717899efdceastha IFS="$SaveIFS"
c81d47afd05baeb768e2f032636019b717899efdceastha}
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Returns 0 if the path to the PPD is as follows:
c81d47afd05baeb768e2f032636019b717899efdceastha# <PPD file repository>/<label>/<manufacturer>/<PPD file>
c81d47afd05baeb768e2f032636019b717899efdceastha# otherwise, returns 1
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# $1 Full path to PPD file
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceasthaverify_ppd_location()
c81d47afd05baeb768e2f032636019b717899efdceastha{
c81d47afd05baeb768e2f032636019b717899efdceastha if debugger ; then
c81d47afd05baeb768e2f032636019b717899efdceastha set -x
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha # Strip off what should be <label>/<manufacturer>/<PPD file>
c81d47afd05baeb768e2f032636019b717899efdceastha # and verify the PPD file repository matches one of the
c81d47afd05baeb768e2f032636019b717899efdceastha # known PPD file repositories.
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha ppd_file_repository=${1%/*/*/*}
c81d47afd05baeb768e2f032636019b717899efdceastha found=1
c81d47afd05baeb768e2f032636019b717899efdceastha for repository in ${REPOSITORIES} ; do
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ "${repository}" = "${ppd_file_repository}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha found=0
c81d47afd05baeb768e2f032636019b717899efdceastha break
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha done
c81d47afd05baeb768e2f032636019b717899efdceastha return ${found}
c81d47afd05baeb768e2f032636019b717899efdceastha}
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Generate, and sort, cache entries for each PPD files in the specified
c81d47afd05baeb768e2f032636019b717899efdceastha# list to the specified file.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# $1 - List of full paths to PPD files
c81d47afd05baeb768e2f032636019b717899efdceastha# $2 - Full path to current cache file
c81d47afd05baeb768e2f032636019b717899efdceastha# $3 - Full path to label
c81d47afd05baeb768e2f032636019b717899efdceastha# $4 - Full path to new cache file to generate
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Return code:
c81d47afd05baeb768e2f032636019b717899efdceastha# 0 success
c81d47afd05baeb768e2f032636019b717899efdceastha# 1 unsuccessful
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceasthagenerate_label_cache_file()
c81d47afd05baeb768e2f032636019b717899efdceastha{
c81d47afd05baeb768e2f032636019b717899efdceastha if debugger ; then
c81d47afd05baeb768e2f032636019b717899efdceastha set -x
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha # Generate a cache file containing cache entries for
c81d47afd05baeb768e2f032636019b717899efdceastha # all files in the label.
c81d47afd05baeb768e2f032636019b717899efdceastha #
4fb0018bf832424363cfcc05b23323c48ab7a076Sumanth Naropanth ucfile=$ppdmgrtmpdir/unsortedcache
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha # Before processing new files, remove any cache entries
c81d47afd05baeb768e2f032636019b717899efdceastha # which may be invalid.
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha valid_files=
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ -e "${2}" && "${action}" != "${REBUILD}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha valid_files=$(remove_invalid_cache_entries "${2}")
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ -n "${valid_files}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha echo "${valid_files}" >>${ucfile}
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha # If there are no valid PPD files in the current cache file,
c81d47afd05baeb768e2f032636019b717899efdceastha # and there are no new PPD files to process, the only thing
c81d47afd05baeb768e2f032636019b717899efdceastha # left to do is to remove the current cache file.
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ -z "${valid_files}" && -z "${1}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha /bin/rm -f "${2}" >/dev/null 2>&1
c81d47afd05baeb768e2f032636019b717899efdceastha /bin/rm -f "${ucfile}" >/dev/null 2>&1
c81d47afd05baeb768e2f032636019b717899efdceastha return 0
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha # For each of the label's PPD files, generate
c81d47afd05baeb768e2f032636019b717899efdceastha # a cache file entry and add it to the cache file.
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha vpl_rc=0
c81d47afd05baeb768e2f032636019b717899efdceastha vpf_rc=0
c81d47afd05baeb768e2f032636019b717899efdceastha vpl_msg=
c81d47afd05baeb768e2f032636019b717899efdceastha vpf_msg=
c81d47afd05baeb768e2f032636019b717899efdceastha IFS="$NoSpaceTabIFS"
c81d47afd05baeb768e2f032636019b717899efdceastha for fname in ${1} ; do
c81d47afd05baeb768e2f032636019b717899efdceastha IFS="$SaveIFS"
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ -n "${fname}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha verify_ppd_location "${fname}"
c81d47afd05baeb768e2f032636019b717899efdceastha vpl_rc=$?
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ ${vpl_rc} -ne 0 ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha vpl_msg="${vpl_msg}\t${fname}\n"
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha verify_ppd_file "${fname}"
c81d47afd05baeb768e2f032636019b717899efdceastha vpf_rc=$?
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ ${vpf_rc} -ne 0 ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha vpf_msg="${vpf_msg}\t${fname}\n"
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ ${vpl_rc} -eq 0 && ${vpf_rc} -eq 0 ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha echo "$(generate_cache_file_entry \
c81d47afd05baeb768e2f032636019b717899efdceastha "${modmanuf}" "${model}" "${nickn}" \
c81d47afd05baeb768e2f032636019b717899efdceastha "${devidmfg}" "${devidmdl}" "${fname}")"
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha IFS="$NoSpaceTabIFS"
c81d47afd05baeb768e2f032636019b717899efdceastha done >>"${ucfile}"
c81d47afd05baeb768e2f032636019b717899efdceastha IFS="$SaveIFS"
c81d47afd05baeb768e2f032636019b717899efdceastha /bin/sort -u "${ucfile}" >>"${4}" 2>/dev/null
c81d47afd05baeb768e2f032636019b717899efdceastha /bin/rm -f "${ucfile}" >/dev/null 2>&1
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha [[ -n "${vpl_msg}" || -n "${vpf_msg}" ]] || return 0
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ -n ${vpl_msg} ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha gettext " PPD file(s) not in valid location\n" 2>/dev/null
c81d47afd05baeb768e2f032636019b717899efdceastha gettext \
c81d47afd05baeb768e2f032636019b717899efdceastha " (<repository>/<label>/<manufacturer>/<PPD file>):\n" 2>/dev/null
c81d47afd05baeb768e2f032636019b717899efdceastha echo "${vpl_msg}"
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ -n ${vpf_msg} ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha gettext " invalid PPD file(s):\n" 2>/dev/null
c81d47afd05baeb768e2f032636019b717899efdceastha echo "${vpf_msg}"
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha return 1
c81d47afd05baeb768e2f032636019b717899efdceastha}
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Update current cache file with candidate cache file if there are
c81d47afd05baeb768e2f032636019b717899efdceastha# differences.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# $1 - Current cache file
c81d47afd05baeb768e2f032636019b717899efdceastha# $2 - Candidate cache file to update
c81d47afd05baeb768e2f032636019b717899efdceastha# $3 - Repository name
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceasthaupdate_current_cache_file()
c81d47afd05baeb768e2f032636019b717899efdceastha{
c81d47afd05baeb768e2f032636019b717899efdceastha if debugger "update_current_cache_file" ; then
c81d47afd05baeb768e2f032636019b717899efdceastha set -x
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ ! -s "${2}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha # Candidate cache has zero size (label
c81d47afd05baeb768e2f032636019b717899efdceastha # directory with no PPD files under it).
c81d47afd05baeb768e2f032636019b717899efdceastha # Delete the empty candidate cache
c81d47afd05baeb768e2f032636019b717899efdceastha # file and delete the current cache
c81d47afd05baeb768e2f032636019b717899efdceastha # file.
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha /bin/rm -f "${1}" >/dev/null 2>&1
c81d47afd05baeb768e2f032636019b717899efdceastha /bin/rm -f "${2}" >/dev/null 2>&1
c81d47afd05baeb768e2f032636019b717899efdceastha elif [[ -e "${1}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha # If there are differences between the current
c81d47afd05baeb768e2f032636019b717899efdceastha # cache file and the newly generated one, then
c81d47afd05baeb768e2f032636019b717899efdceastha # replace the current one with the new one, and
c81d47afd05baeb768e2f032636019b717899efdceastha # set the flag to update the golden ppdcache
c81d47afd05baeb768e2f032636019b717899efdceastha # file.
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha if changes_in_cache "${1}" "${2}" ; then
c81d47afd05baeb768e2f032636019b717899efdceastha set_perms ${FILEMODE} ${FILEOWNER} "${2}"
c81d47afd05baeb768e2f032636019b717899efdceastha /bin/mv -f "${2}" "${1}" >/dev/null 2>&1
c81d47afd05baeb768e2f032636019b717899efdceastha else
c81d47afd05baeb768e2f032636019b717899efdceastha /bin/rm -f "${2}" >/dev/null 2>&1
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha else
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha # There is no current cache file. Move the candidate
c81d47afd05baeb768e2f032636019b717899efdceastha # to the caches directory.
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha set_perms ${FILEMODE} ${FILEOWNER} "${2}"
c81d47afd05baeb768e2f032636019b717899efdceastha /bin/mv -f "${2}" "${1}" >/dev/null 2>&1
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha}
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Returns 0 if there are files in $1 with newer timestamp
c81d47afd05baeb768e2f032636019b717899efdceastha# than $2 or if deletions have occurred under $1,
c81d47afd05baeb768e2f032636019b717899efdceastha# otherwise returns 1.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# $1 - Full path to the destination label
c81d47afd05baeb768e2f032636019b717899efdceastha# $2 - Full path to label cache file
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceasthachanges_under_label()
c81d47afd05baeb768e2f032636019b717899efdceastha{
c81d47afd05baeb768e2f032636019b717899efdceastha if debugger ; then
c81d47afd05baeb768e2f032636019b717899efdceastha set -x
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha # First check for newer files in the directory
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ -e "${2}" && "${action}" != "${REBUILD}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha newfiles=$(/bin/find "${1}" -type f -newer "${2}")
c81d47afd05baeb768e2f032636019b717899efdceastha else
c81d47afd05baeb768e2f032636019b717899efdceastha newfiles=$(/bin/find "${1}" -type f)
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha echo "${newfiles}"
c81d47afd05baeb768e2f032636019b717899efdceastha [[ -z "${newfiles}" ]] || return 0
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha # Need to detect if PPD files have been deleted by checking
c81d47afd05baeb768e2f032636019b717899efdceastha # timestamps on label and manufacturer directories.
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha [[ ! "${1}" -nt "${2}" ]] || return 0
c81d47afd05baeb768e2f032636019b717899efdceastha /bin/find "${1}" -type d -newer "${2}" >/dev/null 2>&1 || return 1
c81d47afd05baeb768e2f032636019b717899efdceastha return 0
c81d47afd05baeb768e2f032636019b717899efdceastha}
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# If -R was specified, or the timestamp on the specified label's
c81d47afd05baeb768e2f032636019b717899efdceastha# directory or any of the PPD files under the specified label in
c81d47afd05baeb768e2f032636019b717899efdceastha# the specified PPD file respository is newer than the cache file
c81d47afd05baeb768e2f032636019b717899efdceastha# associated with the label, then generate a new sorted cache file.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# The new cache will replace the existing one (if any) only if there
c81d47afd05baeb768e2f032636019b717899efdceastha# are differences. Note: if -r was specified, then a new cache file
c81d47afd05baeb768e2f032636019b717899efdceastha# file will always be installed at
c81d47afd05baeb768e2f032636019b717899efdceastha# /var/lp/ppd/caches/<PPD file repository name>-<label name>
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# $1 - Full path of the destination PPD file repository
c81d47afd05baeb768e2f032636019b717899efdceastha# $2 - Destination PPD file repository name
c81d47afd05baeb768e2f032636019b717899efdceastha# $3 - Destination label name
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceasthaupdate_label_cache()
c81d47afd05baeb768e2f032636019b717899efdceastha{
c81d47afd05baeb768e2f032636019b717899efdceastha if debugger ; then
c81d47afd05baeb768e2f032636019b717899efdceastha set -x
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha dstlabelpath="${1}/${3}"
c81d47afd05baeb768e2f032636019b717899efdceastha replabelcachepath="${1}/${CACHES}/${3}"
c81d47afd05baeb768e2f032636019b717899efdceastha varlabelcachepath="${VARCACHES}/${2}${SEP}${3}"
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha ulc_rc=0
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ -d "${dstlabelpath}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha # If the cache doesn't exist for a label,
c81d47afd05baeb768e2f032636019b717899efdceastha # or if there were any changes under a label
c81d47afd05baeb768e2f032636019b717899efdceastha # (i.e., the timestamp on the label directory or any
c81d47afd05baeb768e2f032636019b717899efdceastha # of the PPD files under it is newer than the
c81d47afd05baeb768e2f032636019b717899efdceastha # existing cache file), then generate a new cache file.
c81d47afd05baeb768e2f032636019b717899efdceastha #
4fb0018bf832424363cfcc05b23323c48ab7a076Sumanth Naropanth tmpcachepath=$ppdmgrtmpdir/tmpcachepath
70fa9386ff0a83ccf99d2d3ac2198d2ed51bf748Wendy Phillips
70fa9386ff0a83ccf99d2d3ac2198d2ed51bf748Wendy Phillips # if this is a system repository, check for a prepopulated cache
70fa9386ff0a83ccf99d2d3ac2198d2ed51bf748Wendy Phillips if [[ "${2}" = "${SYSTEM}" && -e ${FOOCACHEDIR}/${3}.cache ]] ; then
70fa9386ff0a83ccf99d2d3ac2198d2ed51bf748Wendy Phillips # copy prepopulated cache
70fa9386ff0a83ccf99d2d3ac2198d2ed51bf748Wendy Phillips /bin/cp -f ${FOOCACHEDIR}/${3}.cache ${tmpcachepath}
70fa9386ff0a83ccf99d2d3ac2198d2ed51bf748Wendy Phillips
70fa9386ff0a83ccf99d2d3ac2198d2ed51bf748Wendy Phillips else
70fa9386ff0a83ccf99d2d3ac2198d2ed51bf748Wendy Phillips newfileslist=$(changes_under_label "${dstlabelpath}" \
70fa9386ff0a83ccf99d2d3ac2198d2ed51bf748Wendy Phillips "${varlabelcachepath}")
70fa9386ff0a83ccf99d2d3ac2198d2ed51bf748Wendy Phillips if [[ $? -eq 0 ]] ; then
70fa9386ff0a83ccf99d2d3ac2198d2ed51bf748Wendy Phillips err_files=$(generate_label_cache_file \
70fa9386ff0a83ccf99d2d3ac2198d2ed51bf748Wendy Phillips "${newfileslist}" "${varlabelcachepath}" \
70fa9386ff0a83ccf99d2d3ac2198d2ed51bf748Wendy Phillips "${dstlabelpath}" "${tmpcachepath}")
70fa9386ff0a83ccf99d2d3ac2198d2ed51bf748Wendy Phillips if [[ $? -ne 0 ]] ; then
70fa9386ff0a83ccf99d2d3ac2198d2ed51bf748Wendy Phillips #
70fa9386ff0a83ccf99d2d3ac2198d2ed51bf748Wendy Phillips # At least one PPD file was invalid.
70fa9386ff0a83ccf99d2d3ac2198d2ed51bf748Wendy Phillips # Don't return yet, as the cache info
70fa9386ff0a83ccf99d2d3ac2198d2ed51bf748Wendy Phillips # for the valid PPD files can still be
70fa9386ff0a83ccf99d2d3ac2198d2ed51bf748Wendy Phillips # used to generate a cache file.
70fa9386ff0a83ccf99d2d3ac2198d2ed51bf748Wendy Phillips #
70fa9386ff0a83ccf99d2d3ac2198d2ed51bf748Wendy Phillips echo "${err_files}"
70fa9386ff0a83ccf99d2d3ac2198d2ed51bf748Wendy Phillips ulc_rc=1
70fa9386ff0a83ccf99d2d3ac2198d2ed51bf748Wendy Phillips fi
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ -e "${tmpcachepath}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha update_current_cache_file \
c81d47afd05baeb768e2f032636019b717899efdceastha "${varlabelcachepath}" "${tmpcachepath}" "${2}"
c81d47afd05baeb768e2f032636019b717899efdceastha /bin/rm -f "${tmpcachepath}" >/dev/null 2>&1
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha else
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha # If there is a cache file in /var/lp/ppd/caches associated
c81d47afd05baeb768e2f032636019b717899efdceastha # with the label which no longer exists, remove it.
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha /bin/rm -f "${varlabelcachepath}" >/dev/null 2>&1
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha return ${ulc_rc}
c81d47afd05baeb768e2f032636019b717899efdceastha}
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Returns the alias for the specified real manufacturer's name.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# $1 - Real manufacturer's name
c81d47afd05baeb768e2f032636019b717899efdceastha# $2 - File containing list of files that have manufacturers aliases
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceasthamanuf_name_alias()
c81d47afd05baeb768e2f032636019b717899efdceastha{
c81d47afd05baeb768e2f032636019b717899efdceastha if debugger ; then
c81d47afd05baeb768e2f032636019b717899efdceastha set -x
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha # Found a couple of PPD files which had special characters
c81d47afd05baeb768e2f032636019b717899efdceastha # in the Manufacturer name (i.e, the following is the Manufacturer
c81d47afd05baeb768e2f032636019b717899efdceastha # entry:
c81d47afd05baeb768e2f032636019b717899efdceastha # *Manufacturer: "Canon Inc. (Kosugi Offic"
c81d47afd05baeb768e2f032636019b717899efdceastha # We'll only search the alias file for "Canon Inc."
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha tmpmanuf="${1% *\(*}"
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha # Search alias files for a match on the real manufacturer name
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ -s "${2}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha # Check the manufacturer aliases file for case
c81d47afd05baeb768e2f032636019b717899efdceastha # insensitive match of the Manufacturer entry
c81d47afd05baeb768e2f032636019b717899efdceastha # from the PPD file. If a match is found,
c81d47afd05baeb768e2f032636019b717899efdceastha # then modify the manufacturer entry to
c81d47afd05baeb768e2f032636019b717899efdceastha # be that of the specified alias.
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha manufaliases=$(/bin/egrep -i \
c81d47afd05baeb768e2f032636019b717899efdceastha "^${tmpmanuf}:|:${tmpmanuf}:|:${tmpmanuf}$" "${2}")
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ -n "${manufaliases}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha echo "${manufaliases%%:*}"
c81d47afd05baeb768e2f032636019b717899efdceastha break
c81d47afd05baeb768e2f032636019b717899efdceastha else
c81d47afd05baeb768e2f032636019b717899efdceastha echo "${tmpmanuf}"
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha else
c81d47afd05baeb768e2f032636019b717899efdceastha echo "${tmpmanuf}"
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha}
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Returns 0 if the extension to the specified PPD file is a known
c81d47afd05baeb768e2f032636019b717899efdceastha# extension, otherwise returns 1.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# $1 - Full path to PPD file
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Set upon return:
c81d47afd05baeb768e2f032636019b717899efdceastha# ppdfileext - PPD file ext (.ppd or .ppd.gz)
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceasthaverify_file_ext()
c81d47afd05baeb768e2f032636019b717899efdceastha{
c81d47afd05baeb768e2f032636019b717899efdceastha if debugger ; then
c81d47afd05baeb768e2f032636019b717899efdceastha set -x
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ "${1%.gz}".gz = "${1}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha ppdfileext=${GEXT}
c81d47afd05baeb768e2f032636019b717899efdceastha elif [[ "${1%.ppd}".ppd = "${1}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha ppdfileext=${PEXT}
c81d47afd05baeb768e2f032636019b717899efdceastha else
c81d47afd05baeb768e2f032636019b717899efdceastha # invalid PPD file name extension
c81d47afd05baeb768e2f032636019b717899efdceastha return 1
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha return 0
c81d47afd05baeb768e2f032636019b717899efdceastha}
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Return the lines from the specified PPD file matching the specified
c81d47afd05baeb768e2f032636019b717899efdceastha# spec items.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# $1 - spec entries from PPD file
c81d47afd05baeb768e2f032636019b717899efdceastha# $2 - spec item
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# $1 example - 1 string with substrings separated by newline:
c81d47afd05baeb768e2f032636019b717899efdceastha# *PPD-Adobe: "4.3"
c81d47afd05baeb768e2f032636019b717899efdceastha# *Manufacturer: "HP"
c81d47afd05baeb768e2f032636019b717899efdceastha# *Product: "(officejet 4200 series)"
c81d47afd05baeb768e2f032636019b717899efdceastha# *ModelName: "HP OfficeJet 4200"
c81d47afd05baeb768e2f032636019b717899efdceastha# *NickName: "HP OfficeJet 4200 Foomatic/hpijs (recommended)"
c81d47afd05baeb768e2f032636019b717899efdceastha# $2 example:
c81d47afd05baeb768e2f032636019b717899efdceastha# ^\*Manufacturer
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceasthaspec_entry()
c81d47afd05baeb768e2f032636019b717899efdceastha{
c81d47afd05baeb768e2f032636019b717899efdceastha if debugger ; then
c81d47afd05baeb768e2f032636019b717899efdceastha set -x
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha item=$(echo "${1}" | /bin/grep ${2})
c81d47afd05baeb768e2f032636019b717899efdceastha # Remove everything up to and including the first quote
c81d47afd05baeb768e2f032636019b717899efdceastha item=${item#*\"}
c81d47afd05baeb768e2f032636019b717899efdceastha # Remove the end quote
c81d47afd05baeb768e2f032636019b717899efdceastha echo "${item%\"}"
c81d47afd05baeb768e2f032636019b717899efdceastha}
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Return the lines from the specified PPD file matching the specified
c81d47afd05baeb768e2f032636019b717899efdceastha# spec items.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Note: this is similar to spec_entry() except the tokens in the
c81d47afd05baeb768e2f032636019b717899efdceastha# spec entry are different.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# $1 - spec entries from PPD file
c81d47afd05baeb768e2f032636019b717899efdceastha# $2 - spec item
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceasthadevid_spec_entry()
c81d47afd05baeb768e2f032636019b717899efdceastha{
c81d47afd05baeb768e2f032636019b717899efdceastha if debugger ; then
c81d47afd05baeb768e2f032636019b717899efdceastha set -x
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha item=$(echo "${1}" | /bin/grep ${2})
c81d47afd05baeb768e2f032636019b717899efdceastha # Remove everything up to and including the first semi-colon
c81d47afd05baeb768e2f032636019b717899efdceastha item=${item#*\:}
c81d47afd05baeb768e2f032636019b717899efdceastha # Remove the end quote
c81d47afd05baeb768e2f032636019b717899efdceastha echo ${item%\;}
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha}
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Verifies that the specified PPD file
c81d47afd05baeb768e2f032636019b717899efdceastha# - has a valid extension
c81d47afd05baeb768e2f032636019b717899efdceastha# - has the following required spec file entries:
c81d47afd05baeb768e2f032636019b717899efdceastha# *PPD-Adobe: "4.3"
c81d47afd05baeb768e2f032636019b717899efdceastha# Manufacturer
c81d47afd05baeb768e2f032636019b717899efdceastha# Product
c81d47afd05baeb768e2f032636019b717899efdceastha# ModelName
c81d47afd05baeb768e2f032636019b717899efdceastha# NickName
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# In addition, the manufacture and model from the IEEE1284 device id
c81d47afd05baeb768e2f032636019b717899efdceastha# information will be gathered here, although it's not an error that
c81d47afd05baeb768e2f032636019b717899efdceastha# it isn't in the PPD file as many don't contain the IEEE1284 info.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# $1 - Full path to PPD file
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Return codes:
c81d47afd05baeb768e2f032636019b717899efdceastha# 0 success
c81d47afd05baeb768e2f032636019b717899efdceastha# 1 invalid PPD file
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceasthaverify_ppd_file()
c81d47afd05baeb768e2f032636019b717899efdceastha{
c81d47afd05baeb768e2f032636019b717899efdceastha if debugger ; then
c81d47afd05baeb768e2f032636019b717899efdceastha set -x
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha ADOBESPEC="PPD-Adobe"
c81d47afd05baeb768e2f032636019b717899efdceastha MANUF="Manufacturer"
c81d47afd05baeb768e2f032636019b717899efdceastha PRODUCT="Product"
c81d47afd05baeb768e2f032636019b717899efdceastha MODEL="ModelName"
c81d47afd05baeb768e2f032636019b717899efdceastha NICKNAME="NickName"
c81d47afd05baeb768e2f032636019b717899efdceastha DEVID="1284DeviceID"
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha # Verify the PPD file extension
c81d47afd05baeb768e2f032636019b717899efdceastha verify_file_ext "${1}" || return 1
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha # Query for the required spec items
c81d47afd05baeb768e2f032636019b717899efdceastha searchentries="^\*${ADOBESPEC}:|^\*${MANUF}:|^\*${PRODUCT}:"
c81d47afd05baeb768e2f032636019b717899efdceastha searchentries="${searchentries}|^\*${MODEL}:|^\*${NICKNAME}:"
c81d47afd05baeb768e2f032636019b717899efdceastha searchentries="${searchentries}|^\*${DEVID}:"
c81d47afd05baeb768e2f032636019b717899efdceastha ppd_info="$(/bin/gzgrep -e "${searchentries}" "${1}")"
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha # Process the query results to verify each of the required spec
c81d47afd05baeb768e2f032636019b717899efdceastha # file items appears in the PPD file.
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha for spec_item in ${ADOBESPEC} ${MANUF} ${PRODUCT} ${MODEL} \
c81d47afd05baeb768e2f032636019b717899efdceastha ${NICKNAME} ; do
c81d47afd05baeb768e2f032636019b717899efdceastha entry=$(spec_entry "${ppd_info}" "^\*${spec_item}:")
c81d47afd05baeb768e2f032636019b717899efdceastha [[ ! -z "${entry}" ]] || return 1
c81d47afd05baeb768e2f032636019b717899efdceastha case ${spec_item} in
c81d47afd05baeb768e2f032636019b717899efdceastha ${MANUF})
c81d47afd05baeb768e2f032636019b717899efdceastha realmanuf="${entry}"
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha ${PRODUCT})
c81d47afd05baeb768e2f032636019b717899efdceastha product="${entry}"
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha ${MODEL})
c81d47afd05baeb768e2f032636019b717899efdceastha model="${entry}"
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha ${NICKNAME})
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha # Remove the model and any commas and spaces
c81d47afd05baeb768e2f032636019b717899efdceastha # which appear before the driver
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha nickn="${entry#$model[, ]*}"
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha esac
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha done
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha # Save IEEE1284 device id information
c81d47afd05baeb768e2f032636019b717899efdceastha if $(echo "${ppd_info}" | grep "${DEVID}" >/dev/null 2>&1) ; then
c81d47afd05baeb768e2f032636019b717899efdceastha DMDL="MDL"
c81d47afd05baeb768e2f032636019b717899efdceastha DMFG="MFG"
c81d47afd05baeb768e2f032636019b717899efdceastha devid="$(/bin/gzgrep -e "^[ ]*${DMDL}:|^[ ]*${DMFG}:" "${1}")"
c81d47afd05baeb768e2f032636019b717899efdceastha devidmdl="$(devid_spec_entry "${devid}" "${DMDL}")"
c81d47afd05baeb768e2f032636019b717899efdceastha devidmfg="$(devid_spec_entry "${devid}" "${DMFG}")"
c81d47afd05baeb768e2f032636019b717899efdceastha else
c81d47afd05baeb768e2f032636019b717899efdceastha devidmdl=
c81d47afd05baeb768e2f032636019b717899efdceastha devidmfg=
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha modmanuf=$(manuf_name_alias "${realmanuf}" ${aliasfile})
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha return 0
c81d47afd05baeb768e2f032636019b717899efdceastha}
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# generate_cache_file_entry()
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Returns a cache file entry for the specified PPD file.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# $1 - modmanuf
c81d47afd05baeb768e2f032636019b717899efdceastha# $2 - model
c81d47afd05baeb768e2f032636019b717899efdceastha# $3 - nickn
c81d47afd05baeb768e2f032636019b717899efdceastha# $4 - devidmfg
c81d47afd05baeb768e2f032636019b717899efdceastha# $5 - devidmdl
c81d47afd05baeb768e2f032636019b717899efdceastha# $6 - Full path to the specified PPD file
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceasthagenerate_cache_file_entry()
c81d47afd05baeb768e2f032636019b717899efdceastha{
c81d47afd05baeb768e2f032636019b717899efdceastha if debugger "generate_cache_file_entry" ; then
c81d47afd05baeb768e2f032636019b717899efdceastha set -x
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha echo "${1}":"${2}":"${3}":"${4}":"${5}":"${6}"
c81d47afd05baeb768e2f032636019b717899efdceastha}
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Expand specified file to the full path.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# $1 - File path to expand
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Return code set to 0 if expanded successfully, otherwise set to 1.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceasthappd_pathname()
c81d47afd05baeb768e2f032636019b717899efdceastha{
c81d47afd05baeb768e2f032636019b717899efdceastha if debugger ; then
c81d47afd05baeb768e2f032636019b717899efdceastha set -x
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ -f "${1}" && -s "${1}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha (cd "$(/bin/dirname "${1}")" ; \
c81d47afd05baeb768e2f032636019b717899efdceastha echo "$(/bin/pwd)/$(/bin/basename "${1}")") || return 1
c81d47afd05baeb768e2f032636019b717899efdceastha return 0
c81d47afd05baeb768e2f032636019b717899efdceastha else
c81d47afd05baeb768e2f032636019b717899efdceastha return 1
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha}
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Returns the PPD repsitory path associated with the specified
c81d47afd05baeb768e2f032636019b717899efdceastha# PPD repository name.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# $1 - Repository name
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceasthaget_rep_path()
c81d47afd05baeb768e2f032636019b717899efdceastha{
c81d47afd05baeb768e2f032636019b717899efdceastha if debugger ; then
c81d47afd05baeb768e2f032636019b717899efdceastha set -x
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha case ${1} in
c81d47afd05baeb768e2f032636019b717899efdceastha ${SYSTEM})
c81d47afd05baeb768e2f032636019b717899efdceastha echo "${SYSTEMREP}"
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha ${VENDOR})
c81d47afd05baeb768e2f032636019b717899efdceastha echo "${VENDORREP}"
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha ${ADMIN})
c81d47afd05baeb768e2f032636019b717899efdceastha echo "${ADMINREP}"
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha ${USER})
c81d47afd05baeb768e2f032636019b717899efdceastha echo "${USERREP}"
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha *)
c81d47afd05baeb768e2f032636019b717899efdceastha echo "${UNSET}"
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha esac
c81d47afd05baeb768e2f032636019b717899efdceastha}
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Returns the PPD respository name from the repository path
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# $1 - PPD repository path
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceasthaget_rep_name()
c81d47afd05baeb768e2f032636019b717899efdceastha{
c81d47afd05baeb768e2f032636019b717899efdceastha if debugger ; then
c81d47afd05baeb768e2f032636019b717899efdceastha set -x
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha case ${1} in
c81d47afd05baeb768e2f032636019b717899efdceastha ${SYSTEMREP})
c81d47afd05baeb768e2f032636019b717899efdceastha echo "${SYSTEM}"
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha ${VENDORREP})
c81d47afd05baeb768e2f032636019b717899efdceastha echo "${VENDOR}"
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha ${ADMINREP})
c81d47afd05baeb768e2f032636019b717899efdceastha echo "${ADMIN}"
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha ${USERREP})
c81d47afd05baeb768e2f032636019b717899efdceastha echo "${USER}"
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha "all")
c81d47afd05baeb768e2f032636019b717899efdceastha echo "all"
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha *)
c81d47afd05baeb768e2f032636019b717899efdceastha echo "${UNSET}"
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha esac
c81d47afd05baeb768e2f032636019b717899efdceastha}
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Returns 0 if a matching label name is found in the specified repository,
c81d47afd05baeb768e2f032636019b717899efdceastha# otherwise returns 1.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# $1 - repository path
c81d47afd05baeb768e2f032636019b717899efdceastha# $2 - label name
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceasthalabel_path_in_repository()
c81d47afd05baeb768e2f032636019b717899efdceastha{
c81d47afd05baeb768e2f032636019b717899efdceastha if debugger "label_path_in_repository" ; then
c81d47afd05baeb768e2f032636019b717899efdceastha set -x
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha [[ "${1}" != "" && "${2}" != "" ]] || return 1
c81d47afd05baeb768e2f032636019b717899efdceastha lpir_rc=1
c81d47afd05baeb768e2f032636019b717899efdceastha for repository in ${REPOSITORIES} ; do
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ "${repository}" = "${1}" && -d "${1}/${2}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha lpir_rc=0
c81d47afd05baeb768e2f032636019b717899efdceastha break
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha done
c81d47afd05baeb768e2f032636019b717899efdceastha return ${lpir_rc}
c81d47afd05baeb768e2f032636019b717899efdceastha}
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Returns 0 if the source label path is the same
c81d47afd05baeb768e2f032636019b717899efdceastha# as the destination label path, otherwise returns 1.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# $1 - full path to source PPD file (source label path)
c81d47afd05baeb768e2f032636019b717899efdceastha# $2 - destination repository path
c81d47afd05baeb768e2f032636019b717899efdceastha# $3 - destination label name
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceasthalabel_path_match()
c81d47afd05baeb768e2f032636019b717899efdceastha{
c81d47afd05baeb768e2f032636019b717899efdceastha if debugger "label_path_match" ; then
c81d47afd05baeb768e2f032636019b717899efdceastha set -x
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha # dest repository not specified
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ "${2}" = "${UNSET}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha # dest label not specified
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ "${3}" = "${UNSET}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha # We've found a match if the label path is in a known
c81d47afd05baeb768e2f032636019b717899efdceastha # repository.
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha lpath="${1%/*/*}"
c81d47afd05baeb768e2f032636019b717899efdceastha label_path_in_repository \
c81d47afd05baeb768e2f032636019b717899efdceastha "${1%/*/*/*}" "${lpath##*/}" || return 1
c81d47afd05baeb768e2f032636019b717899efdceastha else
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha # If the source label path exists in the
c81d47afd05baeb768e2f032636019b717899efdceastha # in a known repository, and the destination
c81d47afd05baeb768e2f032636019b717899efdceastha # label is the same as the source label,
c81d47afd05baeb768e2f032636019b717899efdceastha # then we'll assume the default destination
c81d47afd05baeb768e2f032636019b717899efdceastha # repository is the same as the source
c81d47afd05baeb768e2f032636019b717899efdceastha # destination repository.
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha [[ "${1%/*/*}" = "${1%/*/*/*}/${3}" ]] || return 1
c81d47afd05baeb768e2f032636019b717899efdceastha label_path_in_repository "${1%/*/*/*}" "${3}" || \
c81d47afd05baeb768e2f032636019b717899efdceastha return 1
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha # dest repository specified, dest label not specified
c81d47afd05baeb768e2f032636019b717899efdceastha elif [[ "${3}" = "${UNSET}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha # If the destination repository path is the same as the
c81d47afd05baeb768e2f032636019b717899efdceastha # source repository, and if the source label exists in the
c81d47afd05baeb768e2f032636019b717899efdceastha # destination repository path, then we'll assume the default
c81d47afd05baeb768e2f032636019b717899efdceastha # destination label is the same as the source label.
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha [[ "${2}" = "${1%/*/*/*}" ]] || return 1
c81d47afd05baeb768e2f032636019b717899efdceastha lpath="${1%/*/*}"
c81d47afd05baeb768e2f032636019b717899efdceastha label_path_in_repository "${2}" "${lpath##*/}" || return 1
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha # dest repository and dest label specified.
c81d47afd05baeb768e2f032636019b717899efdceastha else
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha # We've found a match if the destination and label
c81d47afd05baeb768e2f032636019b717899efdceastha # match those of the source label path, and the source
c81d47afd05baeb768e2f032636019b717899efdceastha # label path is in a known repository.
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha [[ "${1%/*/*}" = "${2}/${3}" ]] || return 1
c81d47afd05baeb768e2f032636019b717899efdceastha label_path_in_repository "${2}" "${3}" || return 1
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha return 0
c81d47afd05baeb768e2f032636019b717899efdceastha}
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Returns 0 if specified label name is a reserved label, otherwise
c81d47afd05baeb768e2f032636019b717899efdceastha# returns 1.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# $1 - label name
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceasthareserved_label()
c81d47afd05baeb768e2f032636019b717899efdceastha{
c81d47afd05baeb768e2f032636019b717899efdceastha if debugger ; then
c81d47afd05baeb768e2f032636019b717899efdceastha set -x
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha rl_rc=1
c81d47afd05baeb768e2f032636019b717899efdceastha for labelname in ${RESERVEDLABELS} ; do
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ "${1}" = "${labelname}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha rl_rc=0
c81d47afd05baeb768e2f032636019b717899efdceastha break
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha done
c81d47afd05baeb768e2f032636019b717899efdceastha return ${rl_rc}
c81d47afd05baeb768e2f032636019b717899efdceastha}
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Returns a list of all labels that exist in a repository that are
c81d47afd05baeb768e2f032636019b717899efdceastha# not reserved labels.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# $1 - Full path of repository
c81d47afd05baeb768e2f032636019b717899efdceastha# $2 - Repository name
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceasthaget_rep_label_list()
c81d47afd05baeb768e2f032636019b717899efdceastha{
c81d47afd05baeb768e2f032636019b717899efdceastha if debugger ; then
c81d47afd05baeb768e2f032636019b717899efdceastha set -x
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha # Get a list of all labels that exist in all of the
c81d47afd05baeb768e2f032636019b717899efdceastha # PPD file repository.
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha for lname in $(/bin/ls "${1}" 2>/dev/null) ; do
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ -d "${1}/${lname}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha if ! reserved_label "${lname}" ; then
c81d47afd05baeb768e2f032636019b717899efdceastha echo "${lname} "
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha done
c81d47afd05baeb768e2f032636019b717899efdceastha}
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Returns a valid PPD label.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Verifies the specified PPD label is a valid label. If the
c81d47afd05baeb768e2f032636019b717899efdceastha# label is not set, then it is set to a default value.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Return code set to 0 if the specified PPD label is valid, otherwise 1.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# $1 - PPD label
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceasthavalid_specified_label()
c81d47afd05baeb768e2f032636019b717899efdceastha{
c81d47afd05baeb768e2f032636019b717899efdceastha if debugger ; then
c81d47afd05baeb768e2f032636019b717899efdceastha set -x
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha # Verify the specified label
c81d47afd05baeb768e2f032636019b717899efdceastha vsl_rc=0
c81d47afd05baeb768e2f032636019b717899efdceastha case "${1}" in
c81d47afd05baeb768e2f032636019b717899efdceastha "all")
c81d47afd05baeb768e2f032636019b717899efdceastha # Reserved label name with -a or -g options
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ "${action}" = "${ADD}" || \
c81d47afd05baeb768e2f032636019b717899efdceastha "${action}" = "${GENERATEENTRY}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha print -n "$myprog: " 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha gettext "reserved PPD label name: ${1}\n" 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha vsl_rc=1
c81d47afd05baeb768e2f032636019b717899efdceastha else
c81d47afd05baeb768e2f032636019b717899efdceastha echo "${1}"
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha "ppdcache" | "caches" | "manufaliases")
c81d47afd05baeb768e2f032636019b717899efdceastha # Reserved label names with any option
c81d47afd05baeb768e2f032636019b717899efdceastha print -n "$myprog: " 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha gettext "reserved PPD label name: ${1}\n" 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha vsl_rc=1
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha "" | "${UNSET}")
c81d47afd05baeb768e2f032636019b717899efdceastha # Label name not specified. Set the default label name.
c81d47afd05baeb768e2f032636019b717899efdceastha # For -g and -a, default is "user", otherwise, default
c81d47afd05baeb768e2f032636019b717899efdceastha # is "all".
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ "${action}" = "${ADD}" || \
c81d47afd05baeb768e2f032636019b717899efdceastha "${action}" = "${GENERATEENTRY}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha echo "${USER}"
c81d47afd05baeb768e2f032636019b717899efdceastha else
c81d47afd05baeb768e2f032636019b717899efdceastha echo "all"
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha *)
c81d47afd05baeb768e2f032636019b717899efdceastha # label cannot be "." or ".."
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ "${1}" = "." || "${1}" = ".." ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha print -n "$myprog: " 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha gettext "PPD label name cannot be " 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha gettext "\".\" or \"..\"\n" 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha vsl_rc=1
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha # Label name cannot contain special characters
c81d47afd05baeb768e2f032636019b717899efdceastha echo "${1}" | /bin/egrep "${SPECIALCHARS}" >/dev/null
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ $? -eq 0 ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha print -n "$myprog: " 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha gettext "PPD label name contains " 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha gettext "an invalid character: ${1}\n" 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha vsl_rc=1
c81d47afd05baeb768e2f032636019b717899efdceastha else
c81d47afd05baeb768e2f032636019b717899efdceastha echo "${1}"
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha esac
c81d47afd05baeb768e2f032636019b717899efdceastha return ${vsl_rc}
c81d47afd05baeb768e2f032636019b717899efdceastha}
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Returns the full path of any variant copy of the source file in
c81d47afd05baeb768e2f032636019b717899efdceastha# the destination label/repository.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# $1 - Full path to source PPD file
c81d47afd05baeb768e2f032636019b717899efdceastha# $2 - Full path to destination PPD file
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Return code set to
c81d47afd05baeb768e2f032636019b717899efdceastha# 0 - Copy doesn't exist
c81d47afd05baeb768e2f032636019b717899efdceastha# 1 - Duplicate copy exists
c81d47afd05baeb768e2f032636019b717899efdceastha# 2 - Variant copy exists
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceasthavariant_copy()
c81d47afd05baeb768e2f032636019b717899efdceastha{
c81d47afd05baeb768e2f032636019b717899efdceastha if debugger ; then
c81d47afd05baeb768e2f032636019b717899efdceastha set -x
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha # First make sure there is not a .ppd and a .ppd.gz version
c81d47afd05baeb768e2f032636019b717899efdceastha # of the destination file; users should know not to do this.
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ -e "${2%.gz}" && -e "${2%.gz}.gz" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha /bin/rm -f "${2%.gz}" >/dev/null 2>&1
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha # Use gzcmp to compare PPD files as it can deal with
c81d47afd05baeb768e2f032636019b717899efdceastha # gzipped or regular files.
c81d47afd05baeb768e2f032636019b717899efdceastha if $(${GZCMP} "${1}" "${2}"* >/dev/null 2>&1) ; then
c81d47afd05baeb768e2f032636019b717899efdceastha echo "${2}"*
c81d47afd05baeb768e2f032636019b717899efdceastha return 1
c81d47afd05baeb768e2f032636019b717899efdceastha elif [[ -e "${2%.gz}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha echo "${2%.gz}"
c81d47afd05baeb768e2f032636019b717899efdceastha return 2
c81d47afd05baeb768e2f032636019b717899efdceastha elif [[ -e "${2%.gz}.gz" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha echo "${2%.gz}.gz"
c81d47afd05baeb768e2f032636019b717899efdceastha return 2
c81d47afd05baeb768e2f032636019b717899efdceastha else
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha # A PPD file doesn't exist in the destination
c81d47afd05baeb768e2f032636019b717899efdceastha # repository under the destination label.
c81d47afd05baeb768e2f032636019b717899efdceastha # Just display the source PPD file, ensuring
c81d47afd05baeb768e2f032636019b717899efdceastha # it has a gzip extension as we will always
c81d47afd05baeb768e2f032636019b717899efdceastha # try to gzip the copy in the destination.
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ "${1#*.ppd}" = ".gz" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha echo "${2}"
c81d47afd05baeb768e2f032636019b717899efdceastha else
c81d47afd05baeb768e2f032636019b717899efdceastha echo "${2}.gz"
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha return 0
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha}
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# $1 - Directory mode
c81d47afd05baeb768e2f032636019b717899efdceastha# $2 - Directory owner (i.e., root:lp)
c81d47afd05baeb768e2f032636019b717899efdceastha# $3 - Directory to create
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceasthamake_dir()
c81d47afd05baeb768e2f032636019b717899efdceastha{
c81d47afd05baeb768e2f032636019b717899efdceastha if debugger "make_dir" ; then
c81d47afd05baeb768e2f032636019b717899efdceastha set -x
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha [[ ! -d "${3}" ]] || return 0
c81d47afd05baeb768e2f032636019b717899efdceastha /bin/mkdir "${3}" >/dev/null 2>&1 || return 1
c81d47afd05baeb768e2f032636019b717899efdceastha set_perms ${1} ${2} "${3}"
c81d47afd05baeb768e2f032636019b717899efdceastha return 0
c81d47afd05baeb768e2f032636019b717899efdceastha}
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Remove a ppdmgr generated cache (in /var/lp/ppd/cache)
c81d47afd05baeb768e2f032636019b717899efdceastha# if it doesn't have an associated label in the repository.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# $1 - Full path to label
c81d47afd05baeb768e2f032636019b717899efdceastha# $2 - Cache name
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastharemove_unassociated_cache()
c81d47afd05baeb768e2f032636019b717899efdceastha{
c81d47afd05baeb768e2f032636019b717899efdceastha if debugger "remove_unassociated_cache" ; then
c81d47afd05baeb768e2f032636019b717899efdceastha set -x
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ "${1}" != "${UNSET}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ -n "${1}" && ! -d "${1}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha # The label doesn't exist, so delete
c81d47afd05baeb768e2f032636019b717899efdceastha # the associated cache file.
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha /bin/rm -f "${VARCACHES}/${2}" >/dev/null 2>&1
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha}
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Sorted copies of cache files for each label in each PPD repository
c81d47afd05baeb768e2f032636019b717899efdceastha# are maintained in /var/lp/ppd/caches/<PPD respository>-<label>.
c81d47afd05baeb768e2f032636019b717899efdceastha# This is done so that changes in delivered cache files can be
c81d47afd05baeb768e2f032636019b717899efdceastha# detected. If a difference in cache files is detected, or a
c81d47afd05baeb768e2f032636019b717899efdceastha# cache file is either added or removed, then we know that
c81d47afd05baeb768e2f032636019b717899efdceastha# the ppdcache file needs to be updated.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Get a list of all cache files and compare against the list
c81d47afd05baeb768e2f032636019b717899efdceastha# of labels in all of the PPD file repositories. They should
c81d47afd05baeb768e2f032636019b717899efdceastha# be the same. If there is a label in one of the PPD file
c81d47afd05baeb768e2f032636019b717899efdceastha# repositories that doesn't have an associated cache file, then
c81d47afd05baeb768e2f032636019b717899efdceastha# we don't worry about it now, as that will be resolved when
c81d47afd05baeb768e2f032636019b717899efdceastha# we update the cache for that label. However, if there is
c81d47afd05baeb768e2f032636019b717899efdceastha# a cache file associated with a label that no longer exists, then
c81d47afd05baeb768e2f032636019b717899efdceastha# remove the cache file.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# $1 - Full path to repository (or "all")
c81d47afd05baeb768e2f032636019b717899efdceastha# $2 - Label name
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceasthaupdate_cache()
c81d47afd05baeb768e2f032636019b717899efdceastha{
c81d47afd05baeb768e2f032636019b717899efdceastha if debugger ; then
c81d47afd05baeb768e2f032636019b717899efdceastha set -x
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha # Determine which labels in which PPD repository the
c81d47afd05baeb768e2f032636019b717899efdceastha # cache file will be updated for.
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ "${1}" = "all" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha rname="${REPOSITORIES}"
c81d47afd05baeb768e2f032636019b717899efdceastha else
c81d47afd05baeb768e2f032636019b717899efdceastha rname="${1}"
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha uc_rc=0
c81d47afd05baeb768e2f032636019b717899efdceastha for dstreppath in ${rname} ; do
c81d47afd05baeb768e2f032636019b717899efdceastha labellist=
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ "${2}" = "all" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha dstrepname=$(get_rep_name "${dstreppath}")
c81d47afd05baeb768e2f032636019b717899efdceastha labellist=$(get_rep_label_list "${dstreppath}" \
c81d47afd05baeb768e2f032636019b717899efdceastha "${dstrepname}")
c81d47afd05baeb768e2f032636019b717899efdceastha else
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha # Ensure the label exists in the PPD file repository.
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ -d "${dstreppath}/${2}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha labellist="${2}"
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha # Update the cache for each label in the PPD repository
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha for dstlabel in ${labellist} ; do
c81d47afd05baeb768e2f032636019b717899efdceastha ulc_msg=$(update_label_cache "${dstreppath}" \
c81d47afd05baeb768e2f032636019b717899efdceastha "${dstrepname}" "${dstlabel}")
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ $? -ne 0 ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha echo "${ulc_msg}"
c81d47afd05baeb768e2f032636019b717899efdceastha uc_rc=1
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha done
c81d47afd05baeb768e2f032636019b717899efdceastha done
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha # Update the golden cache file.
c81d47afd05baeb768e2f032636019b717899efdceastha update_golden_cache
c81d47afd05baeb768e2f032636019b717899efdceastha return ${uc_rc}
c81d47afd05baeb768e2f032636019b717899efdceastha}
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha# $1 - exit status
c81d47afd05baeb768e2f032636019b717899efdceasthappdmgr_exit()
c81d47afd05baeb768e2f032636019b717899efdceastha{
c81d47afd05baeb768e2f032636019b717899efdceastha if debugger "ppdmgr_exit" ; then
c81d47afd05baeb768e2f032636019b717899efdceastha set -x
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha /bin/rm -rf "${ppdmgrtmpdir}" >/dev/null 2>&1
c81d47afd05baeb768e2f032636019b717899efdceastha exit ${1}
c81d47afd05baeb768e2f032636019b717899efdceastha}
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceasthausage()
c81d47afd05baeb768e2f032636019b717899efdceastha{
c81d47afd05baeb768e2f032636019b717899efdceastha gettext "usage:\n" 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha print -n "\t$myprog: " 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha gettext "-a <ppd_filename_path> [ -L <label> ]\n" 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha gettext "\t\t[ -R <ppd_repository> ] [-w]\n" 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha print -n "\t$myprog: " 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha gettext "-r [ -L <label> ] [ -R <ppd_repository> ]\n" 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha print -n "\t$myprog: " 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha gettext "-u [ -L <label> ] [ -R <ppd_repository> ]\n" 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha ppdmgr_exit ${FAIL}
c81d47afd05baeb768e2f032636019b717899efdceastha}
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha##########################################################################
c81d47afd05baeb768e2f032636019b717899efdceastha# main
c81d47afd05baeb768e2f032636019b717899efdceastha##########################################################################
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceasthamyprog=$(/bin/basename $0)
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceasthaSaveIFS="$IFS"
c81d47afd05baeb768e2f032636019b717899efdceasthaNoSpaceTabIFS='
c81d47afd05baeb768e2f032636019b717899efdceastha'
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha# Updatable PPD repository
c81d47afd05baeb768e2f032636019b717899efdceasthaVARDIR=/var/lp/ppd
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha# Delivered PPD respository
c81d47afd05baeb768e2f032636019b717899efdceasthaSYSTEMREP=/usr/share/ppd
c81d47afd05baeb768e2f032636019b717899efdceasthaADMINREP=/usr/local/share/ppd
c81d47afd05baeb768e2f032636019b717899efdceasthaVENDORREP=/opt/share/ppd
c81d47afd05baeb768e2f032636019b717899efdceasthaUSERREP=${VARDIR}
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceasthaRESERVEDREPS="${SYSTEMREP} ${ADMINREP} ${VENDORREP}"
c81d47afd05baeb768e2f032636019b717899efdceasthaREPOSITORIES="${USERREP} ${RESERVEDREPS}"
c81d47afd05baeb768e2f032636019b717899efdceasthaRESERVEDLABELS="all caches ppdcache manufaliases"
70fa9386ff0a83ccf99d2d3ac2198d2ed51bf748Wendy Phillips
70fa9386ff0a83ccf99d2d3ac2198d2ed51bf748Wendy Phillips# Directory where system:SUNWfoomatic is delivered
70fa9386ff0a83ccf99d2d3ac2198d2ed51bf748Wendy PhillipsFOOCACHEDIR=/usr/lib/lp/caches
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha# Deliveries
c81d47afd05baeb768e2f032636019b717899efdceasthaSYSTEM=system
c81d47afd05baeb768e2f032636019b717899efdceasthaVENDOR=vendor
c81d47afd05baeb768e2f032636019b717899efdceasthaADMIN=admin
c81d47afd05baeb768e2f032636019b717899efdceasthaUSER=user
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha# Sytem PPD cache name used by printmgr
c81d47afd05baeb768e2f032636019b717899efdceasthaGOLDCACHE=${USERREP}/ppdcache
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha# Delivered caches directory
c81d47afd05baeb768e2f032636019b717899efdceasthaCACHES=caches
c81d47afd05baeb768e2f032636019b717899efdceasthaMANUFALIASES=manufaliases
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha# Updated caches directory
c81d47afd05baeb768e2f032636019b717899efdceasthaVARCACHES=${VARDIR}/${CACHES}
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha# valid PPD file name extensions
c81d47afd05baeb768e2f032636019b717899efdceasthaPEXT=ppd
c81d47afd05baeb768e2f032636019b717899efdceasthaGEXT=gz
c81d47afd05baeb768e2f032636019b717899efdceasthaFILEEXTS=".${PEXT} .${PEXT}.${GEXT}"
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha# Default modes and owners
c81d47afd05baeb768e2f032636019b717899efdceasthaDIRMODE=755
c81d47afd05baeb768e2f032636019b717899efdceasthaDIROWNER=root:lp
c81d47afd05baeb768e2f032636019b717899efdceasthaADMINOWNER=root:root
c81d47afd05baeb768e2f032636019b717899efdceasthaFILEMODE=444
c81d47afd05baeb768e2f032636019b717899efdceasthaFILEOWNER=root:lp
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha# ppdmgr actions
c81d47afd05baeb768e2f032636019b717899efdceasthaADD=add
c81d47afd05baeb768e2f032636019b717899efdceasthaGENERATEENTRY=generateentry
c81d47afd05baeb768e2f032636019b717899efdceasthaUPDATE=update
c81d47afd05baeb768e2f032636019b717899efdceasthaREBUILD=rebuild
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceasthaSUCCESS=0
c81d47afd05baeb768e2f032636019b717899efdceasthaFAIL=1
c81d47afd05baeb768e2f032636019b717899efdceasthaWARN=2
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceasthaMAXLABELNAME=256
c81d47afd05baeb768e2f032636019b717899efdceasthaGZIP="/bin/gzip -c"
c81d47afd05baeb768e2f032636019b717899efdceasthaGZCMP="/bin/gzcmp -s"
c81d47afd05baeb768e2f032636019b717899efdceasthaCMP="/bin/cmp -s"
c81d47afd05baeb768e2f032636019b717899efdceasthaSPECIALCHARS=":"
c81d47afd05baeb768e2f032636019b717899efdceasthaSEP=":"
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceasthadebug=0
c81d47afd05baeb768e2f032636019b717899efdceasthawflag=0
c81d47afd05baeb768e2f032636019b717899efdceasthastatus=${SUCCESS}
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceasthaUNSET=" "
c81d47afd05baeb768e2f032636019b717899efdceasthappdlabel=${UNSET}
c81d47afd05baeb768e2f032636019b717899efdceasthappdrepname=${UNSET}
c81d47afd05baeb768e2f032636019b717899efdceasthappdreppath=${UNSET}
c81d47afd05baeb768e2f032636019b717899efdceasthamodmanuf=
c81d47afd05baeb768e2f032636019b717899efdceasthamodel=
c81d47afd05baeb768e2f032636019b717899efdceasthanickn=
c81d47afd05baeb768e2f032636019b717899efdceasthadevidmdl=
c81d47afd05baeb768e2f032636019b717899efdceasthadevidmfg=
c81d47afd05baeb768e2f032636019b717899efdceastha
4fb0018bf832424363cfcc05b23323c48ab7a076Sumanth Naropanthppdmgrtmpdir=$(/usr/bin/mktemp -t -d ppdmgr.XXXXXX)
4fb0018bf832424363cfcc05b23323c48ab7a076Sumanth Naropanthif [ -z "$ppdmgrtmpdir" ] ; then
4fb0018bf832424363cfcc05b23323c48ab7a076Sumanth Naropanth print -n "$myprog: " 1>&2
4fb0018bf832424363cfcc05b23323c48ab7a076Sumanth Naropanth gettext "Fatal error: could not create temporary directory\n" 1>&2
4fb0018bf832424363cfcc05b23323c48ab7a076Sumanth Naropanth exit 1
4fb0018bf832424363cfcc05b23323c48ab7a076Sumanth Naropanthfi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceasthaaliasfile=${USERREP}/manufaliases
c81d47afd05baeb768e2f032636019b717899efdceasthatmpfilepath=
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceasthaOPTS=a:g:L:rR:uwZ
c81d47afd05baeb768e2f032636019b717899efdceasthawhile getopts "$OPTS" arg ; do
c81d47afd05baeb768e2f032636019b717899efdceastha case ${arg} in
c81d47afd05baeb768e2f032636019b717899efdceastha a) # add PPD file
c81d47afd05baeb768e2f032636019b717899efdceastha action=${ADD}
c81d47afd05baeb768e2f032636019b717899efdceastha origsrcppdpath=${OPTARG}
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha g) # create cache entry
c81d47afd05baeb768e2f032636019b717899efdceastha action=${GENERATEENTRY}
c81d47afd05baeb768e2f032636019b717899efdceastha origsrcppdpath=${OPTARG}
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha L) # PPD label name
c81d47afd05baeb768e2f032636019b717899efdceastha ppdlabel=${OPTARG}
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha r) # rebuild cache
c81d47afd05baeb768e2f032636019b717899efdceastha action=${REBUILD}
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha R) # PPD file repository to use
c81d47afd05baeb768e2f032636019b717899efdceastha ppdrepname=${OPTARG}
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha u) # update cache
c81d47afd05baeb768e2f032636019b717899efdceastha action=${UPDATE}
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha w) # display PPD file path
c81d47afd05baeb768e2f032636019b717899efdceastha wflag=1
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha Z) # debug
c81d47afd05baeb768e2f032636019b717899efdceastha debug=1
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha ?)
c81d47afd05baeb768e2f032636019b717899efdceastha usage
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha esac
c81d47afd05baeb768e2f032636019b717899efdceasthadone
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceasthaif debugger "Main" ; then
c81d47afd05baeb768e2f032636019b717899efdceastha set -x
c81d47afd05baeb768e2f032636019b717899efdceasthafi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceasthaif [[ $# -lt 1 || -z "${action}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha usage
c81d47afd05baeb768e2f032636019b717899efdceasthafi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha# ignore wflag unless specified with -a
c81d47afd05baeb768e2f032636019b717899efdceasthaif [[ ${wflag} -eq 1 && "${action}" != ${ADD} ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha wflag=0
c81d47afd05baeb768e2f032636019b717899efdceasthafi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# Ensure the destination PPD repository directory is set
c81d47afd05baeb768e2f032636019b717899efdceastha# to match the specified repository. If the
c81d47afd05baeb768e2f032636019b717899efdceastha# destination PPD file repository was specified, then
c81d47afd05baeb768e2f032636019b717899efdceastha# it must be one of the following:
c81d47afd05baeb768e2f032636019b717899efdceastha# "user"
c81d47afd05baeb768e2f032636019b717899efdceastha# "admin"
c81d47afd05baeb768e2f032636019b717899efdceastha# "vendor"
c81d47afd05baeb768e2f032636019b717899efdceastha# "system"
c81d47afd05baeb768e2f032636019b717899efdceastha# "all"
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceasthacase "${ppdrepname}" in
c81d47afd05baeb768e2f032636019b717899efdceastha"${SYSTEM}")
c81d47afd05baeb768e2f032636019b717899efdceastha ppdreppath="${SYSTEMREP}"
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha"${ADMIN}")
c81d47afd05baeb768e2f032636019b717899efdceastha ppdreppath="${ADMINREP}"
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha"${VENDOR}")
c81d47afd05baeb768e2f032636019b717899efdceastha ppdreppath="${VENDORREP}"
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha"${USER}")
c81d47afd05baeb768e2f032636019b717899efdceastha ppdreppath="${USERREP}"
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha"all")
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ "${action}" = "${ADD}" || \
c81d47afd05baeb768e2f032636019b717899efdceastha "${action}" = "${GENERATEENTRY}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha print -n "$myprog: " 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha gettext "reserved PPD repository name: " 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha gettext "${ppdrepname}\n" 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha ppdmgr_exit ${FAIL}
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha ppdreppath="all"
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha"${UNSET}"|"")
c81d47afd05baeb768e2f032636019b717899efdceastha ppdreppath="${UNSET}"
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha*)
c81d47afd05baeb768e2f032636019b717899efdceastha print -n "$myprog: " 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha gettext "invalid PPD repository name: ${ppdrepname}\n" 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha ppdmgr_exit ${FAIL}
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceasthaesac
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceastha# When a source PPD file's path is from a known repository, the
c81d47afd05baeb768e2f032636019b717899efdceastha# destination repository and desination label are assumed to be the
c81d47afd05baeb768e2f032636019b717899efdceastha# same as the source PPD file's unless a differing repository or label
c81d47afd05baeb768e2f032636019b717899efdceastha# was specified.
c81d47afd05baeb768e2f032636019b717899efdceastha#
c81d47afd05baeb768e2f032636019b717899efdceasthaif [[ "${action}" = "${ADD}" || "${action}" = "${GENERATEENTRY}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha srcppdpath=$(ppd_pathname "${origsrcppdpath}")
c81d47afd05baeb768e2f032636019b717899efdceastha ppd_pathname_rc=$?
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ ${ppd_pathname_rc} -ne 0 ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha print -n "$myprog: " 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha gettext "invalid PPD file: ${origsrcppdpath}\n" 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha ppdmgr_exit ${ppd_pathname_rc}
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha # Path cannot contain special characters
c81d47afd05baeb768e2f032636019b717899efdceastha echo "${srcppdpath}" | /bin/egrep "${SPECIALCHARS}" >/dev/null
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ $? -eq 0 ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha print -n "$myprog: " 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha gettext "PPD path contains " 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha gettext "an invalid character: ${ppd_pathname}\n" 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha ppdmgr_exit ${FAIL}
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha ppdfname=$(/bin/basename "${origsrcppdpath}")
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha # Check to see if there's any work to be done. If the source file
c81d47afd05baeb768e2f032636019b717899efdceastha # is already in the destination repository under the destination
c81d47afd05baeb768e2f032636019b717899efdceastha # label, then there's nothing left to do. We exit rather than
c81d47afd05baeb768e2f032636019b717899efdceastha # going on to do an update on the label in the repository as
c81d47afd05baeb768e2f032636019b717899efdceastha # it could possible take a long time to update. If an add was
c81d47afd05baeb768e2f032636019b717899efdceastha # requested, it could have come from an application, so we want
c81d47afd05baeb768e2f032636019b717899efdceastha # to return quickly.
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha if label_path_match "${srcppdpath}" "${ppdreppath}" "${ppdlabel}" ; then
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ ${wflag} -eq 1 || \
c81d47afd05baeb768e2f032636019b717899efdceastha "${action}" = "${GENERATEENTRY}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha echo "${srcppdpath}"
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha ppdmgr_exit ${SUCCESS}
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceasthafi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceasthappdlabel=$(valid_specified_label "${ppdlabel}")
c81d47afd05baeb768e2f032636019b717899efdceasthaif [[ $? -ne 0 ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha ppdmgr_exit ${FAIL}
c81d47afd05baeb768e2f032636019b717899efdceasthafi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceasthaif [[ "${ppdreppath}" = "${UNSET}" ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha ppdreppath="${USERREP}"
c81d47afd05baeb768e2f032636019b717899efdceasthafi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceasthadstrepname=$(get_rep_name "${ppdreppath}")
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceasthacase "${action}" in
c81d47afd05baeb768e2f032636019b717899efdceastha"${ADD}")
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha # Attempt to add the PPD file to the repository under the
c81d47afd05baeb768e2f032636019b717899efdceastha # specified label. If any errors occur, final_dst_ppd_path
c81d47afd05baeb768e2f032636019b717899efdceastha # will contain the error message rather than the path to the
c81d47afd05baeb768e2f032636019b717899efdceastha # PPD file.
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha final_dst_ppd_path=$(add_ppd "${srcppdpath}" "${ppdfname}" \
c81d47afd05baeb768e2f032636019b717899efdceastha "${ppdreppath}" "${dstrepname}" "${ppdlabel}")
c81d47afd05baeb768e2f032636019b717899efdceastha add_ppd_rc=$?
c81d47afd05baeb768e2f032636019b717899efdceastha case ${add_ppd_rc} in
c81d47afd05baeb768e2f032636019b717899efdceastha 0) #
c81d47afd05baeb768e2f032636019b717899efdceastha # The PPD file was added. Update the specified
c81d47afd05baeb768e2f032636019b717899efdceastha # cache associated with the label if the PPD file
c81d47afd05baeb768e2f032636019b717899efdceastha # was added successfully and was not a duplicate.
c81d47afd05baeb768e2f032636019b717899efdceastha # Ensure any changes are also reflected in the
c81d47afd05baeb768e2f032636019b717899efdceastha # golden cache.
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha add_ppd_msg=$(update_label_cache "${ppdreppath}" \
c81d47afd05baeb768e2f032636019b717899efdceastha "${dstrepname}" "${ppdlabel}")
c81d47afd05baeb768e2f032636019b717899efdceastha apm_rc=$?
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha echo "${add_ppd_msg}" | /bin/grep "${final_dst_ppd_path}"
c81d47afd05baeb768e2f032636019b717899efdceastha path_in_msg=$?
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha # Only report cache update errors if the file that was
c81d47afd05baeb768e2f032636019b717899efdceastha # added was one that was reported as not being added
c81d47afd05baeb768e2f032636019b717899efdceastha # to the cache. This really should happen as the file
c81d47afd05baeb768e2f032636019b717899efdceastha # was verified during the add.
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ ${apm_rc} -ne 0 && ${path_in_msg} -eq 0 ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha print -n "$myprog: " 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha gettext "printer information does not reflect " 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha gettext "the\nfollowing PPD file(s):\n" 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha print "${add_ppd_msg}" 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha status=${FAIL}
c81d47afd05baeb768e2f032636019b717899efdceastha else
c81d47afd05baeb768e2f032636019b717899efdceastha update_golden_cache
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha # Display the full path to the added PPD file,
c81d47afd05baeb768e2f032636019b717899efdceastha # if requested (-w).
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ ${wflag} -eq 1 ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha print "${final_dst_ppd_path}"
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha 1) # Duplicate copy exists
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ ${wflag} -eq 1 ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha print "${final_dst_ppd_path}"
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha 2) # Varying copy exists
c81d47afd05baeb768e2f032636019b717899efdceastha print -n "$myprog: " 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha gettext "differing variant of source PPD file " 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha gettext "already exists at\n" 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha gettext "${final_dst_ppd_path}\n" 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha status=${FAIL}
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha *) # The PPD file was not added as a problem occurred.
c81d47afd05baeb768e2f032636019b717899efdceastha # Display the error message.
c81d47afd05baeb768e2f032636019b717899efdceastha print -n "$myprog: " 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha print "${final_dst_ppd_path}" 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha status=${FAIL}
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha esac
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha"${GENERATEENTRY}")
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha # Create a cache file entry for the specified PPD file and
c81d47afd05baeb768e2f032636019b717899efdceastha # display it on standard out.
c81d47afd05baeb768e2f032636019b717899efdceastha #
c81d47afd05baeb768e2f032636019b717899efdceastha verify_ppd_file "${srcppdpath}"
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ $? -eq 0 ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha dstdir="${ppdreppath}/${ppdlabel}/${modmanuf}"
c81d47afd05baeb768e2f032636019b717899efdceastha final_dst_path="${dstdir}/$(/bin/basename ${srcppdpath})"
c81d47afd05baeb768e2f032636019b717899efdceastha verify_ppd_location "${final_dst_path}"
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ $? -eq 0 ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha # Generate the cache file entry
c81d47afd05baeb768e2f032636019b717899efdceastha print "$(generate_cache_file_entry "${modmanuf}" \
c81d47afd05baeb768e2f032636019b717899efdceastha "${model}" "${nickn}" "${devidmfg}" "${devidmdl}" \
c81d47afd05baeb768e2f032636019b717899efdceastha "${final_dst_path}")"
c81d47afd05baeb768e2f032636019b717899efdceastha else
c81d47afd05baeb768e2f032636019b717899efdceastha print -n "$myprog: " 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha gettext "PPD file not in valid location\n" 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha gettext \
c81d47afd05baeb768e2f032636019b717899efdceastha "(<repository>/<label>/<manufacturer>/<PPD file>):\n\t${1}\n" 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha status=${FAIL}
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha else
c81d47afd05baeb768e2f032636019b717899efdceastha print -n "$myprog: " 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha gettext "invalid PPD file: ${1}\n" 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha status=${FAIL}
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha"${REBUILD}" | "${UPDATE}")
c81d47afd05baeb768e2f032636019b717899efdceastha update_msg=$(update_cache "${ppdreppath}" "${ppdlabel}")
c81d47afd05baeb768e2f032636019b717899efdceastha if [[ $? -ne 0 ]] ; then
c81d47afd05baeb768e2f032636019b717899efdceastha print -n "$myprog: " 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha gettext "printer information does not reflect " 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha gettext "the\nfollowing PPD file(s):\n" 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha print "${update_msg}" 1>&2
c81d47afd05baeb768e2f032636019b717899efdceastha status=${WARN}
c81d47afd05baeb768e2f032636019b717899efdceastha fi
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceastha*)
c81d47afd05baeb768e2f032636019b717899efdceastha usage
c81d47afd05baeb768e2f032636019b717899efdceastha ;;
c81d47afd05baeb768e2f032636019b717899efdceasthaesac
c81d47afd05baeb768e2f032636019b717899efdceastha
c81d47afd05baeb768e2f032636019b717899efdceasthappdmgr_exit ${status}