Revert "examples: Avoid bashism in perfcount.init."
[Samba.git] / examples / printing / smbprint
blob3d4b53f850a6580d58affae6bda0d3b5840762c3
1 #!/bin/bash
3 # This script is an input filter for printcap printing on a unix machine. It
4 # uses the smbclient program to print the file to the specified smb-based
5 # server and service.
6 # For example you could have a printcap entry like this
8 # smb:lp=/dev/null:sd=/usr/spool/smb:sh:if=/usr/local/samba/smbprint
10 # which would create a unix printer called "smb" that will print via this
11 # script. You will need to create the spool directory /usr/spool/smb with
12 # appropriate permissions and ownerships for your system.
14 # Set these to the server and service you wish to print to
15 # In this example I have a WfWg PC called "lapland" that has a printer
16 # exported called "printer" with no password.
19 # Script further altered by hamiltom@ecnz.co.nz (Michael Hamilton)
20 # so that the server, service, and password can be read from
21 # a /usr/var/spool/lpd/PRINTNAME/.config file.
23 # Script further modified by Richard Sharpe to fix some things.
24 # Get rid of the -x on the first line, and add parameters
26 # -t now causes translate to be used when sending files
28 # Further modifications by Alfred Perlstein to fix some problems and
29 # improve the quality of the code (3-Dec-2001).
31 # More hacking by Richard Sharpe to improve portability. 9-Dec-2001.
33 # In order for this to work the /etc/printcap entry must include an
34 # accounting file (af=...):
36 # cdcolour:\
37 # :cm=CD IBM Colorjet on 6th:\
38 # :sd=/var/spool/lpd/cdcolour:\
39 # :af=/var/spool/lpd/cdcolour/acct:\
40 # :if=/usr/local/etc/smbprint:\
41 # :mx=0:\
42 # :lp=/dev/null:
44 # The /usr/var/spool/lpd/PRINTNAME/.config file should contain:
45 # server=PC_SERVER
46 # service=PR_SHARENAME
47 # password="password"
49 # E.g.
50 # server=PAULS_PC
51 # service=CJET_371
52 # password=""
54 #smbclient=/usr/pkg/bin/smbclient
55 # Assume that smbclient will be in the same place as smbprint
57 smbclient="`dirname $0`/smbclient"
60 # The last parameter to the filter is the accounting file name.
61 # Extract the directory name from the file name.
62 # Concat this with /.config to get the config file.
64 TRANS=0
65 eval acct_file=\${$#}
66 spool_dir=`dirname $acct_file`
67 config_file=$spool_dir/.config
69 # Should read the following variables set in the config file:
70 # server
71 # service
72 # password
73 # username (optional)
74 # IP (optional)
75 # debug (optional)
76 # debugsmb (optional)
77 # debugfile (optional)
78 . $config_file
80 if [ "x$password" = "x" ] ; then
81 password="-N"
84 if [ "x$username" == "x" ] ; then
85 username="$server";
88 while test $# -gt 0; do
89 case "$1" in
90 -t)
91 TRANS=1
94 *) # Bad Parameters, ignore them ...
96 esac
97 shift
98 done
100 command="print - ;"
101 if [ $TRANS -eq 1 ]; then
102 command="translate;$command";
106 ## Some security checks on the logfile if we are using it
108 ## make the directory containing the logfile is necessary
109 ## and set the permissions to be rwx for owner only
112 debugfile="/tmp/smb-print/logfile"
113 logdir=`dirname $debugfile`
114 if [ ! -d $logdir ]; then
115 mkdir -m 0700 $logdir
119 ## check ownership. If I don't own it refuse to
120 ## create the logfile
122 if [ ! -O $logdir ]; then
123 echo "user running script does not own $logdir. Ignoring any debug options."
124 debug=""
127 touch $debugfile
128 if [ -h $debugfile ]; then
129 echo "$debugful is a symlink. Turning off debugging!"
130 debug=""
134 ## We should be safe at this point to create the log file
135 ## without fear of a symlink attack -- move on to more script work.
138 if [ "x$debug" = "x" ] ; then
139 debugfile=/dev/null debugargs=
140 else
141 if [ $debug -eq 0 ] ; then
142 debugfile=/dev/null debugargs=
143 else
144 set -x; exec >>$debugfile 2>&1
145 debugargs="$debugfile."
146 #[ "x$debugsmb" == "x" ] || debugargs="$debugargs -d $debugsmb"
150 if [ "x$smbconf" != "x" ]; then
152 smbconf="-s $smbconf"
156 if [ "x$IP" != "x" ]; then
158 IP="-I $IP"
162 if [ "x$debugargs" != "x" ]; then
164 debugargs="-l $debugargs"
168 $smbclient \
169 "\\\\$server\\$service" \
170 $password \
171 $smbconf \
172 $IP \
173 $debugargs \
174 -U $username \
175 -c "$command"