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
57smbclient="`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#
64TRANS=0
65eval acct_file=\${$#}
66spool_dir=`dirname $acct_file` 
67config_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
80if [ "x$password" = "x" ] ; then
81	password="-N"
82fi
83
84if [ "x$username" == "x" ] ; then
85	username="$server";
86fi
87
88while 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
98done
99
100command="print - ;"
101if [ $TRANS -eq 1 ]; then
102	command="translate;$command";
103fi
104
105debugfile="/tmp/smb-print.log"
106if [ "x$debug" = "x" ] ; then 
107		debugfile=/dev/null debugargs=
108else
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
116fi
117
118if [ "x$smbconf" != "x" ]; then
119
120	smbconf="-s $smbconf"
121
122fi
123
124if [ "x$IP" != "x" ]; then
125
126	IP="-I $IP"
127
128fi
129
130if [ "x$debugargs" != "x" ]; then
131
132	debugargs="-l $debugargs"
133
134fi
135
136$smbclient \
137	"\\\\$server\\$service" \
138	$password \
139	$smbconf \
140	$IP \
141	$debugargs \
142	-U $username \
143	-c "$command"
144#
145