Try to make smbprint a better behaved citizen.
[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 # In order for this to work the /etc/printcap entry must include an 
29 # accounting file (af=...):
30 #
31 #   cdcolour:\
32 #       :cm=CD IBM Colorjet on 6th:\
33 #       :sd=/var/spool/lpd/cdcolour:\
34 #       :af=/var/spool/lpd/cdcolour/acct:\
35 #       :if=/usr/local/etc/smbprint:\
36 #       :mx=0:\
37 #       :lp=/dev/null:
38 #
39 # The /usr/var/spool/lpd/PRINTNAME/.config file should contain:
40 #   server=PC_SERVER
41 #   service=PR_SHARENAME
42 #   password="password"
43 #
44 # E.g.
45 #   server=PAULS_PC
46 #   service=CJET_371
47 #   password=""
48
49 #
50 # Debugging log file, change to /dev/null if you like.
51 #
52 logfile=/tmp/smb-print.log
53 # logfile=/dev/null
54
55
56 #
57 # The last parameter to the filter is the accounting file name.
58 #   Extract the directory name from the file name.
59 #   Concat this with /.config to get the config file.
60 #
61 TRANS=0
62 eval acct_file=\${$#}
63 spool_dir=`dirname $acct_file` 
64 config_file=$spool_dir/.config
65
66 # Should read the following variables set in the config file:
67 #   server
68 #   service
69 #   password
70 eval `cat $config_file`
71
72 while getopts t c; do
73   case $c in
74     t)
75        TRANS=1
76        ;;
77
78     '?')  # Bad parameters, ignore it ...
79        ;;
80   esac
81 done
82 #
83 # Some debugging help, change the >> to > if you want to same space.
84 #
85 echo "server $server, service $service" >> $logfile
86
87 (
88 # NOTE You may wish to add the line `echo translate' if you want automatic
89 # CR/LF translation when printing.
90         if [ $TRANS ]; then
91           echo translate
92         fi
93         echo "print -"
94         cat
95 ) | /usr/local/samba/bin/smbclient "\\\\$server\\$service" $password -U $server -N -P >> $logfile