a much improved smbprint script.

Richard Sharpe sharpe at ns.aus.com
Sun Dec 9 09:42:14 GMT 2001


Hi Alfred,

Thanks for this scripts ... I can see that it has been cleaned up a lot.

However, I have one big problem with it at the moment, but of course 
there was already a big problem with the original, that is related to 
the problem that you have introduced :-)

Your script assumes that smbclient is to be found at 
/usr/pkg/bin/smbclient, while the original assumed that it was to be 
found at /usr/local/samba/bin/smbclient.

Your solution is an improvement, but I think I will have to take it one 
step further. There is, I think, an install script that goes through a 
bunch of scripts and fixes up the locations of such things.

This will involve making smbprint a standard script that is installed by 
Samba. I will ask the team what they think of the idea, and add it.

At the very least, I will add what you have provided with a small change 
and a comment to change the location of smbprint.

Alfred Perlstein wrote:

>We found that the smbprint script included in the samba distribution
>is really broken.
>
>The main problem is that smbprint doesn't always get every byte
>from stdin for some reason probably due to the cli engine it uses
>flushing stdin.
>
>Most likely it can be fixed by having it check stdin for isatty or
>something, but for now the attached replacement does the right thing
>by using the -c command line option rather than stdin.  It also
>allows one to set all kinds of other nifty bells and whistles
>including:
>
>  .) smb user to use.
>  .) smb password to use.
>  .) which smb config file to use.
>  .) which IP to use
>  .) debug flags
>
>Enjoy and give me a shout out in the CVS log. :)
>Peter Swain also worked on getting this in working order.
>
>#!/bin/sh 
>
># This script is an input filter for printcap printing on a unix machine. It
># uses the smbclient program to print the file to the specified smb-based 
># server and service.
># For example you could have a printcap entry like this
>#
># smb:lp=/dev/null:sd=/usr/spool/smb:sh:if=/usr/local/samba/smbprint
>#
># which would create a unix printer called "smb" that will print via this 
># script. You will need to create the spool directory /usr/spool/smb with
># appropriate permissions and ownerships for your system.
>
># Set these to the server and service you wish to print to 
># In this example I have a WfWg PC called "lapland" that has a printer 
># exported called "printer" with no password.
>
>#
># Script further altered by hamiltom at ecnz.co.nz (Michael Hamilton)
># so that the server, service, and password can be read from 
># a /usr/var/spool/lpd/PRINTNAME/.config file.
>#
># Script further modified by Richard Sharpe to fix some things.
># Get rid of the -x on the first line, and add parameters
>#
>#    -t  now causes translate to be used when sending files
>#
># In order for this to work the /etc/printcap entry must include an 
># accounting file (af=...):
>#
>#   cdcolour:\
>#	:cm=CD IBM Colorjet on 6th:\
>#	:sd=/var/spool/lpd/cdcolour:\
>#	:af=/var/spool/lpd/cdcolour/acct:\
>#	:if=/usr/local/etc/smbprint:\
>#	:mx=0:\
>#	:lp=/dev/null:
>#
># The /usr/var/spool/lpd/PRINTNAME/.config file should contain:
>#   server=PC_SERVER
>#   service=PR_SHARENAME
>#   password="password"
>#
># E.g.
>#   server=PAULS_PC
>#   service=CJET_371
>#   password=""
>
>smbclient=/usr/pkg/bin/smbclient
>
>#
># The last parameter to the filter is the accounting file name.
>#   Extract the directory name from the file name.
>#   Concat this with /.config to get the config file.
>#
>TRANS=0
>eval acct_file=\${$#}
>spool_dir=`dirname $acct_file` 
>config_file=$spool_dir/.config
>
># Should read the following variables set in the config file:
>#   server
>#   service
>#   password
>#   username (optional)
>#   IP (optional)
>#   debug (optional)
>#   debugsmb (optional)
>#   debugfile (optional)
>. $config_file
>
>if [ "x$password" = "x"] ; then
>	password="-N"
>fi
>
>if [ "x$username" == "x" ] ; then
>	username="$server";
>fi
>
>
>while getopts t c; do
>	case $c in
>	t)
>		TRANS=1
>		;;
>
>	'?')  # Bad parameters, ignore it ...
>		;;
>	esac
>done
>
>command="print - ;"
>if [ $TRANS -eq 1 ]; then
>	command="translate;$command";
>fi
>
>debugfile="/tmp/smb-print.log"
>if [ "x$debug" = "x" -o $debug -eq 0 ] ; then
>	debugfile=/dev/null debugargs=
>else
>	set -x; exec >>$debugfile 2>&1
>	debugargs="$debugfile."
>	#[ "x$debugsmb" == "x" ] || debugargs="$debugargs -d $debugsmb"
>fi
>
>$smbclient \
>	"\\\\$server\\$service" \
>	$password \
>	${smbconf:+-s} $smbconf \
>	${IP:+-I} $IP \
>	${debugargs:+-l} $debugargs \
>	-U $username \
>	-P \
>	-c "$command"
>
>----- End forwarded message -----
>

-- 
Richard Sharpe, rsharpe at ns.aus.com, LPIC-1
www.samba.org, www.ethereal.com, SAMS Teach Yourself Samba 
in 24 Hours, Special Edition, Using Samba







More information about the samba-technical mailing list