BUG + FIX in smbprint

Martin Reczko martin at stepc.gr
Fri Sep 28 03:13:02 GMT 2001


Dear Samba Team,

the smbprint script as provided  with Suse7.2 for Samba Version 2.2.0
did not work. The problem was that the file to be printed was not
transfered via stdin after the print - command.
I changed the smbprint script to pass the commands via the -c option.
My changes and comments are marked with MR27092001MR in the smbprint
attached.

I did not find this in the lists, so I hope this is useful for others.
Regards to all of the Samba team for their nice work,
Martin Reczko

Synaptic Ltd.
Greece
Email: reczko at web.de
-------------- next part --------------
#!/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 modified by Martin Reczko to run with Samba version 2.2.0
# (as installed with Suse7.2)
# Modifications marked with #MR28092001MR
# Date: Sep 28,2001
# Email: reczko at web.de
#
# Get rid of the -x on the first line, and add parameters
#
# 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:
#
#MR28092001MR added acct to path and TRANS=1
# The /usr/var/spool/lpd/PRINTNAME/acct/.config file should contain:
#   server=PC_SERVER
#   service=PR_SHARENAME
#   password="password"
#   TRANS=1
#
# E.g.
#   server=PAULS_PC
#   service=CJET_371
#   password=""
#   TRANS=1

#
# Debugging log file, change to /dev/null if you like.
#
logfile=/tmp/smb-print.log
# logfile=/dev/null


#
# 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.
#MR28092001MR added acct to path
#
TRANS=0
eval acct_file=\${$#}
spool_dir=`dirname $acct_file` 
config_file=$spool_dir/acct/.config

# Should read the following variables set in the config file:
#   server
#   service
#   password
#TRANS=1
eval `cat $config_file`


# force translation
while getopts t c; do
  case $c in
    t)
       TRANS=1
       ;;

    '?')  # Bad parameters, ignore it ...
       ;;
  esac
done

# MR28092001MR added name of .config file to log
# Some debugging help, change the >> to > if you want to same space.
#
echo "config_file $config_file" >> $logfile
echo "server $server, service $service" >> $logfile


# MR28092001MR passing commands to smbclient via option -c
# Problem was: smbclient stops processing stdin after command:print - 
#
# NOTE You may wish to add TRANS=1 in the .config file
# for CR/LF translation when printing.
if [ $TRANS -eq 1 ]; then
 cat | /usr/bin/smbclient "\\\\$server\\$service" $password -U $server -N -P -c 'translate;print -' >> $logfile
else
 cat | /usr/bin/smbclient "\\\\$server\\$service" $password -U $server -N -P -c 'print -' >> $logfile
fi





More information about the samba mailing list