Start testing a few more things out of smbtorture in the build farm.
[kai/samba.git] / examples / printing / smbprint
1 #!/bin/sh 
2
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
7 #
8 # smb:lp=/dev/null:sd=/usr/spool/smb:sh:if=/usr/local/samba/smbprint
9 #
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.
13
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.
17
18 #
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.
22 #
23 # Script further modified by Richard Sharpe to fix some things.
24 # Get rid of the -x on the first line, and add parameters
25 #
26 #    -t  now causes translate to be used when sending files
27 #
28 # Further modifications by Alfred Perlstein to fix some problems and
29 # improve the quality of the code (3-Dec-2001).
30 #
31 # More hacking by Richard Sharpe to improve portability. 9-Dec-2001.
32 #
33 # In order for this to work the /etc/printcap entry must include an 
34 # accounting file (af=...):
35 #
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:
43 #
44 # The /usr/var/spool/lpd/PRINTNAME/.config file should contain:
45 #   server=PC_SERVER
46 #   service=PR_SHARENAME
47 #   password="password"
48 #
49 # E.g.
50 #   server=PAULS_PC
51 #   service=CJET_371
52 #   password=""
53
54 #smbclient=/usr/pkg/bin/smbclient
55 # Assume that smbclient will be in the same place as smbprint
56
57 smbclient="`dirname $0`/smbclient"
58
59 #
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.
63 #
64 TRANS=0
65 eval acct_file=\${$#}
66 spool_dir=`dirname $acct_file` 
67 config_file=$spool_dir/.config
68
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
79
80 if [ "x$password" = "x" ] ; then
81         password="-N"
82 fi
83
84 if [ "x$username" == "x" ] ; then
85         username="$server";
86 fi
87
88 while test $# -gt 0; do
89         case "$1" in
90         -t)
91                 TRANS=1
92                 ;;
93
94          *)   # Bad Parameters, ignore them ...
95                 ;;
96          esac
97          shift
98 done
99
100 command="print - ;"
101 if [ $TRANS -eq 1 ]; then
102         command="translate;$command";
103 fi
104
105 debugfile="/tmp/smb-print.log"
106 if [ "x$debug" = "x" ] ; then 
107                 debugfile=/dev/null debugargs=
108 else
109         if [ $debug -eq 0 ] ; then
110                 debugfile=/dev/null debugargs=
111         else
112                 set -x; exec >>$debugfile 2>&1
113                 debugargs="$debugfile."
114                 #[ "x$debugsmb" == "x" ] || debugargs="$debugargs -d $debugsmb"
115         fi
116 fi
117
118 if [ "x$smbconf" != "x" ]; then
119
120         smbconf="-s $smbconf"
121
122 fi
123
124 if [ "x$IP" != "x" ]; then
125
126         IP="-I $IP"
127
128 fi
129
130 if [ "x$debugargs" != "x" ]; then
131
132         debugargs="-l $debugargs"
133
134 fi
135
136 $smbclient \
137         "\\\\$server\\$service" \
138         $password \
139         $smbconf \
140         $IP \
141         $debugargs \
142         -U $username \
143         -P \
144         -c "$command"
145 #