Hi all... First, thank you to Matt Chapman for pointing out why I could not connect to a non-domain participating machine. I needed to have a local account on that machine (it wasn't checking back with the domain controllers as I thought it would). I guess I'm going to have to start venturing out of the UNIX world and into the NT one. Scary :-) Either way, I now successfully am printing to a printer shared on a NT 4.0 workstation from AIX. Below is the modified smbprint script with documentation. In searching the archives of this list and others, FAQs, web-sites, etc., I never saw an explanation of how to deal with the weirdness of AIX printing while using smbclient. Well, I'm not claiming it's perfect, but here goes. Alan alan@chelz.com --------------------------------------------------------- #!/bin/ksh # smbprint (for AIX): Print files from a UNIX system running samba to # a printer shared on another smb serving machine. # # Since AIX doesn't use a standard printcap file, this script is modified # from the one distributed with Samba. # # As if there is a standard way of printing in UNIX :-) # # The first printer I have done this way in AIX (4.3) has the following entry # in the /etc/qconfig file: # # p02: # discipline = fcfs # up = TRUE # device = dp02 # dp02: # backend = /usr/local/bin/smbprint p02 # file = FALSE # header = never # trailer = never # # Technically, since most of the values are the defaults, it could be as # short as: # # p02: # device = dp02 # dp02: # backend = /usr/local/bin/smbprint p02 # # From what I could tell, when AIX calls the backend program, it appends # the file you are printing to the end of the command. If you feed into # the lp command from standard in, this is a temporary file in the print # spool directory (as it is if you use the "-c" option to the lp command). # # In the backend program definition, The "p02" is the name of the # configuration file for this "service", found in CONFIG_DIR(defined below). # In this case, the file /var/samba/print/p02 has: # # SERVER=tkt15n3z # SERVICE=printer02 # USER=print # PASSWORD=you_dont_think_i_would_actually_tell_you # TRANSLATE=TRUE # # All but the last one are standard smb variables. TRANSLATE is a way I # have made it so that you only do the CR/LF translation for printers # that require it. It will do the conversion if TRANSLATE is set to "TRUE". # All other TRANSLATE values (or lack of a value) will be ignored. # # Security. Well, I could have easily passed all the script variables # on the backend line in /etc/qconfig, but it bothered me that # the world-readable qconfig file would contain a password. So, I've # made this script run setgid (via a wrapper) as printq (please, those # more intelligent than I, let me know if there is a risk I don't realize # in doing this). I then protected both write ability to the log and # read/write to the config files. # # Dunce note: Being unfamiliar with NT 4.0, I had a problem initially # connecting to a machine that wasn't participating in the domain. I posted # to the samba@samba.anu.edu.au newsgroup (which you can get more info about # at http://samba.anu.edu.au/listproc) asking about the problem and got a # nice response from Matt Chapman asking if I had a local account on # the machine I was trying to connect to. Since my Win95 pc connected fine # to the machine without me having a local account on it, I didn't think # it was required. It was :-) # # Thanks Matt. # # Any suggestions for improvements/etc? Please send them! # # Alan (Fahrner) # alan@chelz.com # http://www.chelz.com/ # # Returns: # 0 - Okee dokee # 1 - Problem finding/reading config file or file to print # 2 - Called incorrectly # ? - Some other problem ################################################################################ # DEFINES ################################################################################ # protect our path export PATH="/bin" # where is our smbclient program? SMBCLIENT=/usr/local/bin/smbclient # where do we keep the printer configurations (include final "/")? CONFIG_DIR=/var/samba/print/ # Debugging log file, change to /dev/null if you like. LOGFILE=/var/samba/log/log.smbprint ################################################################################ # MAIN ################################################################################ # logging/debugging. Change to a ">" if you want to reset the log after # each print job... ID=$(id) DATE=$(date) echo "$ID -- $DATE" >> $LOGFILE # are we called correctly? if (( $# != 2 )); then echo "Called incorrectly \"$0 $*\"" exit 2 fi # these variables from arguments. PRINTER is defined in the qconfig file, # FILE is automatically passed to the backend program (this) for the # print queue device. PRINTER=$1 # is used for finding actual printer configuration FILE=$2 # what file are we printing # logging/debugging... echo $PRINTER $FILE >> $LOGFILE # get these from the printer config file. If we can't read the file # (for whatever reason), exit with a bad code # SERVER, SERVICE, USER, PASSWORD, TRANSLATE if [[ -r "$CONFIG_DIR$PRINTER" ]]; then eval $(cat $CONFIG_DIR$PRINTER) else echo "Either can't find or read config file $CONFIG_DIR$PRINTER" >> \ $LOGFILE exit 1 fi # Can we find the file we are going to print? if [[ ! -r "$FILE" ]]; then echo "Either can't find or read input file $FILE" >> $LOGFILE exit 1 fi # make sure we have all required variables. PASSWORD and TRANSLATE can be # blank or non-existant. if [[ -z "$SERVER" || -z "$SERVICE" || -z "USER" ]]; then echo "Didn't get required values from $CONFIG_DIR$PRINTER" >> $LOGFILE exit 3 else # Logging/debugging... echo "server $SERVER, service $SERVICE, user $USER, tranlate $TRANSLATE" >>\ $LOGFILE fi # group the following output for feeding into smbclient { # translate to CR/LF (if we need to)... if [[ "$TRANSLATE" = "TRUE" ]]; then echo translate fi echo "print -" cat $FILE } | $SMBCLIENT "\\\\$SERVER\\$SERVICE" $PASSWORD -U $USER -N -P >> $LOGFILE \ 2>&1