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