Initial add of defaria.com
[clearscm.git] / defaria.com / Computers / code / adm / bin / lpsetup
1 #!/usr/bin/ksh
2 ################################################################################
3 #
4 # File:         lpsetup
5 # Description:  Script to recreate printer definitions
6 # Author:       Andrew@DeFaria.com
7 # Created:      Wed Sep  6 16:38:14 PDT 2000
8 # Language:     Korn Shell
9 #
10 # (c) Copyright 2001, Andrew@DeFaria.com, all rights reserved
11 #
12 ################################################################################
13 # Set me to command name
14 me=$(basename $0)
15
16 # Set adm_base
17 adm_base=${adm_base:-//sonscentral/Corporate/Software/adm}
18
19 # Set adm_fpath
20 adm_fpath=${adm_fpath:-$adm_base/functions}
21
22 # Source functions
23 . $adm_fpath/common
24
25 # Global variables
26 printer_definitions=${printer_definitions:-$adm_base/etc/printer.defs}
27 local_printers=
28
29 # Commands used
30 accept=/usr/sbin/accept
31 enable=/usr/bin/enable
32 lpadmin=/usr/sbin/lpadmin
33 lpshut=/usr/sbin/lpshut
34 lpsched=/usr/sbin/lpsched
35
36 function usage {
37   if [ "_$1" != "_" ]; then
38     display "$1"
39     display
40   fi
41   display "Usage: $me"
42   exit 1
43 } # usage
44
45 function remove_all_printers {
46   debug "ENTER: $0"
47
48   verbose "Removing all printers"
49
50   # First list all known printers
51   all_printers=$(lpstat -s | grep device | cut -f3 -d' ' | cut -f1 -d:)
52
53   # Now determine if the printer is local. If it's local then we do not delete
54   # it.
55   for printer in $all_printers; do
56     if [ $(lpstat -v$printer | wc -l) -gt 1 ]; then
57       verbose "Removing $printer"
58       $lpadmin -x$printer
59     else
60       local_printers="$local_printers $printer"
61       verbose "$printer is local to this machine. Will not automatically remove it"
62     fi
63   done
64   verbose "Removed all printers"
65   debug "EXIT: $0"
66 } # remove_all_printers
67
68 # Check for execution by root
69 if is_not_root; then
70   error "This script must be run as root" 1
71 fi
72
73 while [ $# -ge 1 ]; do
74   case "$1" in
75     -usage)
76       usage
77     ;;
78
79     -v|-verbose)
80       verbose=yes
81     ;;
82
83     -d|-debug)
84       debug=yes
85     ;;
86
87     *)
88       usage "Unrecognized parameter $1"
89     ;;
90   esac
91   shift
92 done
93
94 if [ ! -r $printer_definitions ]; then
95   error "Unable to find printer definitions ($printer_definitions)" 2
96 fi
97
98 if [ $(uname -r) = "B.11.11" ]; then
99   verbose "Prereleased OS (B.11.11) detected. No processing done"
100   exit 0
101 fi
102
103 # You must shutdown the spooler before making any changes
104 $lpshut > /dev/null 2>&1
105
106 if [ $? -ne 0 ]; then
107   error "Unable to stop LP Scheduler!" 3
108 fi
109
110 # First remove all printer definitions
111 remove_all_printers
112
113 # Now add them back
114 verbose "Adding all printers"
115 grep -v "^#" $printer_definitions | grep -v "^$" | while read printer server; do
116   is_a_local_printer=false
117   for local_printer in $local_printers; do
118     if [ "$printer" = "$local_printer" ]; then
119       is_a_local_printer=true
120       break
121     fi
122   done
123
124   if [ "$is_a_local_printer" = "false" ]; then
125     verbose "Adding $printer:$server... \c"
126     server=$server.cup.hp.com
127     $lpadmin            \
128           -p$printer    \
129           -orm$server   \
130           -orp$printer  \
131           -mrmodel      \
132           -v/dev/null   \
133           -ocmrcmodel   \
134           -osmrsmodel
135
136     verbose "accepting... \c"
137     $accept $printer > /dev/null 2>&1
138
139     verbose "enabling... \c"
140     $enable $printer > /dev/null 2>&1
141
142     verbose "done"
143   else
144     verbose "Skipping local printer $printer..."
145   fi
146 done
147
148 verbose "Added all printers"
149
150 # Start up the print spooler
151 verbose "Restarting the print spooler"
152 $lpsched -v > /dev/null 2>&1
153
154 if [ $? -ne 0 ]; then
155   error "Unable to start LP Scheduler!" 6
156 fi