summaryrefslogtreecommitdiff
path: root/examples/printing/VampireDriversFunctions
diff options
context:
space:
mode:
authorGerald Carter <jerry@samba.org>2004-04-20 02:16:25 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 10:51:17 -0500
commit125efdd608e87dfef3d916b3f76f9d20ac03b63a (patch)
tree31b90b77b0c904bdfffc55712b694d94ec11ee5e /examples/printing/VampireDriversFunctions
parent26915c7a319bcc0e9d48ce02fdea6519040fccd2 (diff)
downloadsamba-125efdd608e87dfef3d916b3f76f9d20ac03b63a.tar.gz
samba-125efdd608e87dfef3d916b3f76f9d20ac03b63a.tar.bz2
samba-125efdd608e87dfef3d916b3f76f9d20ac03b63a.zip
r291: adding printer and driver migration shell script from Kurt Pfeifle
(This used to be commit 4d806384c0c1b97ca1707809c609090b7a252f90)
Diffstat (limited to 'examples/printing/VampireDriversFunctions')
-rw-r--r--examples/printing/VampireDriversFunctions1657
1 files changed, 1657 insertions, 0 deletions
diff --git a/examples/printing/VampireDriversFunctions b/examples/printing/VampireDriversFunctions
new file mode 100644
index 0000000000..ea0cf47295
--- /dev/null
+++ b/examples/printing/VampireDriversFunctions
@@ -0,0 +1,1657 @@
+#!/bin/bash
+
+#####################################################################
+##
+## smb.conf parser class
+##
+## Copyright (C) Kurt Pfeifle <kpfeifle@danka.de>, 2004.
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+##
+######################################################################
+
+######################################################################
+## Here an example calling sequence
+##!/bin/sh
+## set -x
+## source VampireDriversFunctions
+
+##
+## Start local variables
+##
+## You must define these variable (possibly in a source script)
+
+## nthost=192.168.17.1
+## printeradmin=Administrator
+## adminpasswd=not4you
+
+## smbhost=knoppix
+## smbprinteradmin=knoppix
+## smbadminpasswd=knoppix
+##
+## End of local variables
+##
+
+##
+## functions to call
+##
+
+## fetchenumdrivers3listfromNThost # repeat, if no success at first
+## createdrivernamelist
+## createprinterlistwithUNCnames # repeat, if no success at first
+## createmapofprinterstodriver
+## splitenumdrivers3list
+## makesubdirsforWIN40driverlist
+## splitWIN40fileintoindividualdriverfiles
+## fetchtheWIN40driverfiles
+## uploadallWIN40drivers
+## makesubdirsforW32X86driverlist
+## splitW32X86fileintoindividualdriverfiles
+## fetchtheW32X86driverfiles
+## uploadallW32X86drivers
+
+## End of example calling sequence
+######################################################################
+
+
+# -----------------------------------------------------------------------------
+# -----------------------------------------------------------------------------
+function vampiredrivers_readme()
+{
+echo -e " \n\
+############################################################################
+#
+# About the \"Vampire Printer Drivers\" set of functions....
+# --------------------------------------------------------
+#
+# (C) Kurt Pfeifle <kpfeifle@danka.de>, 2004
+# License: GPL
+#
+# ------------------------------------------------------------
+#
+# Version: 0.8 (largely \"self-documented\" now, but not yet
+# completely -- if it ever will be....)
+#
+# Thanks a lot to Fabian Franz for helping me with some important
+# Bash-Scripting-Questions!
+#
+# This set of functions provides a framework to snatch all printer
+# driver info and related files from a Windows NT print server.
+# It then uploads and installs the drivers to a Samba server. (The
+# Samba server needs to be prepared for this: a valid [print$]
+# share, with write access set for a \"printer admin\".)
+#
+# The main commands used are \"smbclient\" and \"rpcclient\" combined
+# with \"grep\", \"sed\" and \"awk\". Probably a Perl or Python script
+# would be better suited to do this, mainly because we have to cope
+# with printer and driver names which are containing spaces in
+# them, so a lot of shell escaping is required to handle these.
+# Also, I am not very savvy in scripting, so I invented some very
+# obscure methods to work around my knowledge gaps. When I download
+# the driver files from the Windows NT box, I put all related driver
+# files into their own sub directory, using the same name as the
+# driver. Also, driver versions \"0\", \"2\" and \"3\" are placed in
+# further subdirectories.
+#
+#
+# Known problems:
+# ---------------
+#
+# 1) I found one printer driver containing a \"slash\" which is not
+# handled by this script: \"HP Color LaserJet 5/5M PS\". (There
+# are more of these in the wild, of course.) -- The reason: I
+# didn't find a way to create a Unix directory containing a \"slash\".
+# UPDATE: The script replaces the \"/\" with a \"_\" and also renames
+# the drivername accordingly, when it is uploaded to the Samba
+# [print$] share....
+#
+# 2) There is an unsolved problem in case a real file name deviates
+# in its case sensitive spelling from how it is displayed by the
+# \"rpcclient enumdrivers\" command. I encountered cases where
+# rpcclient displayed \"PS5UI.DLL\" as a file name, but \"smbclient
+# mget\" retrieved \"ps5ui.dll\" from the NT printserver, and the
+# driverinstallation failed because \"smbclient mput\" tried to put
+# \"PS5UI.DLL\" back onto the Samba server where UNIX only had
+# \"ps5ui.dll\" available (which of course failed). -- UPDATE: this
+# is now solved. All files are renamed now to the same
+# case-sensitive spelling as \"rpcclient ... enumdrivers 3\"
+# announces. This includes renaming into both, uppercase or
+# lowercase, as the case might be....
+#
+# 3) This script is probably not portable at all and relies on lots
+# of Bash-isms.
+#
+# 4) This script runs with rpcclient from Samba-3.0.2a (or later) only
+# (because it uses the \"Version\" parameter for \"adddriver\").
+#
+# The following functions use a few external variables to log
+# into the 2 hosts. We suggest that you create a file which
+# contains the variables and that you source that file at the
+# beginning of this script...
+#
+# #################################################################
+#
+# ntprinteradmin=Administrator # any account on the NT host
+# # with \"printer admin\" privileges
+# ntadminpasswd=not4you # the \"printer admin\" password on
+# # the NT print server
+# nthost=windowsntprintserverbox # the netbios name of the NT print
+# # server
+#
+# smbprinteradmin=knoppix # an account on the Samba server
+# # with \"printer admin\" privileges
+# smbadminpasswd=2secret4you # the \"printer admin\" password on
+# # the Samba server
+# smbhost=knoppix # the netbios name of the Samba
+# # print server
+#
+# #################################################################
+#
+#
+# NOTE: these functions also work for 2 NT print servers: snatch all
+# drivers from the first, and upload them to the second server (which
+# takes the role of the \"Samba\" server). Of course they also work
+# for 2 Samba servers: snatch all drivers from the first (which takes
+# the role of the NT print server) and upload them to the second....
+#
+#
+# ............PRESS \"q\" TO QUIT............" \
+|less
+}
+
+
+#set -x
+
+
+# -----------------------------------------------------------------------------
+# ----------- print a little help... ------------------------------------------
+# -----------------------------------------------------------------------------
+
+function helpwithvampiredrivers()
+{
+if stringinstring help $@ ; then
+helpwithvampiredrivers ;
+else
+ echo " ";
+ echo " 1. Run the functions of this script one by one.";
+ echo " ";
+ echo " 2. List all functions with the \"enumallfunctions\" call.";
+ echo " ";
+ echo " 3. After each functions' run, check if it completed successfully.";
+ echo " ";
+ echo " 4. For each function, you can ask for separate help by typing";
+ echo " \"<functionname> --help\"."
+ echo " ";
+ echo " 5. Often network conditions prevent the MS-RPC calls"
+ echo " implemented by Samba to succeed at the first attempt."
+ echo " You may have more joy if you try more than once or twice....";
+ echo " ";
+ echo " 6. I can not support end-users who have problems with this script."
+ echo " However, we are available for paid, professional consulting,"
+ echo " training and troubleshooting work.";
+ echo " ";
+ echo " ";
+fi
+}
+
+# -----------------------------------------------------------------------------
+# ----------- enumerate all builtin functions... ------------------------------
+# -----------------------------------------------------------------------------
+function enumallfunctions()
+{
+if stringinstring help $@ ; then
+helpwithvampiredrivers ;
+else
+ echo " "
+ echo " "
+ echo "--> Running now function enumallfunctions()..."
+ echo "=============================================="
+ echo -e " \n\
+
+ NOTE: run the listed functions in the same order as listed below.
+
+ EXAMPLE: \"knoppix@ttyp6[knoppix]$ helpwithvampiredrivers\"
+
+ HELP: the \"--help\" parameter prints usage hints regarding a function.
+
+ EXAMPLE: \"knoppix@ttyp6[knoppix]$ fetchenumdrivers3listfromNThost --help\"
+
+
+ function vampiredrivers_readme()
+ function enumallfunctions()
+ function helpwithvampiredrivers()
+ function fetchenumdrivers3listfromNThost() # repeat, if no success at first
+ function createdrivernamelist()
+ function createprinterlistwithUNCnames() # repeat, if no success at first
+ function createmapofprinterstodrivers()
+ function splitenumdrivers3list()
+ function makesubdirsforW32X86driverlist()
+ function splitW32X86fileintoindividualdriverfiles()
+ function fetchallW32X86driverfiles()
+ function uploadallW32X86drivers()
+ function makesubdirsforWIN40driverlist()
+ function splitWIN40fileintoindividualdriverfiles()
+ function fetchallWIN40driverfiles()
+ function uploadallWIN40drivers()"
+ echo " "
+fi
+}
+
+# this is a helperfunction (Thanks to Fabian Franz!)
+function stringinstring()
+{
+ case "$2" in *$1*)
+ return 0
+ ;;
+ esac
+ return 1
+}
+
+# -----------------------------------------------------------------------------
+# ----------- Create an "enumprinters 3" list --------------------- -----------
+# -----------------------------------------------------------------------------
+#
+
+function helpwithfetchenumdrivers3listfromNThost()
+{
+echo -e " \n\
+################################################################################
+#
+# About fetchenumdrivers3listfromNThost()....
+# -------------------------------------------
+#
+# PRECONDITIONS: 1) This function expects write access to the current directory.
+# 2) This function expects to have the '\$nthosts',
+# '\$ntprinteradmin' and '\$ntadminpasswd' variables set to
+# according values.
+#
+# WHAT IT DOES: This function connects to the '\$nthost' (using the credentials
+# '\$ntprinteradmin' with '\$ntadminpasswd', retrieves a list of
+# drivers (with related file names) from that host, and saves the
+# list under the name of '\${nthost}/enumdrivers3list.txt' (ie. it
+# also creates the '\$nthost' subdirectory in the current one). It
+# further prints some more info to stdout.
+#
+# IF IT DOESN'T WORK: It may happen that the function doesn't work at the first
+# time (there may be a connection problem). Just repeat a
+# few times. It may work then. You will recognize if it
+# does.
+#
+# HINT: The current values: 'nthost'=\"$nthost\"
+# 'ntprinteradmin'=\"$ntprinteradmin\"
+# 'ntadminpasswd'=<not shown here, check yourself!>
+#
+################################################################################"
+echo " "
+}
+
+# -----------------------------------------------------------------------------
+
+function fetchenumdrivers3listfromNThost()
+{
+if stringinstring help $@ ; then
+helpwithfetchenumdrivers3listfromNThost;
+else
+ echo " "
+ echo " "
+ echo "--> Running now function fetchenumdrivers3listfromNThost"
+ echo "========================================================"
+ [ -d ${nthost} ] || mkdir "${nthost}";
+ rpcclient -U${ntprinteradmin}%${ntadminpasswd} -c 'enumdrivers 3' ${nthost} \
+ | sed -e '/^.*Driver Name: \[.*\]/ y/\//_/' \
+ | tee \
+ ${nthost}/enumdrivers3list.txt;
+
+ NUMBEROFDIFFERENTDRIVERNAMES=$( grep "Driver Name:" ${nthost}/enumdrivers3list.txt \
+ | sort -f \
+ | uniq \
+ | wc -l );
+
+ echo " ";
+ echo "--> Finished in running function fetchenumdrivers3listfromNThost....";
+ echo "===================================================================="
+ echo "NUMBEROFDIFFERENTDRIVERNAMES retrieved from \"${nthost}\" is $NUMBEROFDIFFERENTDRIVERNAMES".;
+ echo " --> If you got \"0\" you may want to try again. <---";
+ echo "================================================================";
+ echo " ";
+ enumdrivers3list=`cat ${nthost}/enumdrivers3list.txt`;
+fi
+}
+
+
+# -----------------------------------------------------------------------------
+# ----------- Create a list of all available drivers installed ----------------
+# ------------------------on the NT print server-------------------------------
+# -----------------------------------------------------------------------------
+#
+
+function helpwithcreatedrivernamelist()
+{
+echo -e " \n\
+################################################################################
+#
+# About createdrivernamelist()...
+# -------------------------------
+#
+# PRECONDITIONS: 1) This function expects to find the subdirectory '\$nthost'
+# and the file '\${nthost}/enumdrivers3list.txt' to exist.
+# 2) This function expects to have the '\$nthosts' variable set
+# to an according value.
+#
+# WHAT IT DOES: This function dissects the '\${nthost}/enumdrivers3list.txt'
+# and creates other textfiles from its contents:
+# - '\${nthost}/drvrlst.txt'
+# - '\${nthost}/completedriverlist.txt'
+# and further prints some more info to stdout.
+#
+# HINT: The current value: 'nthost'=\"$nthost\"
+#
+################################################################################"
+}
+
+# -----------------------------------------------------------------------------
+
+function createdrivernamelist()
+{
+if stringinstring help $@ ; then
+helpwithcreatedrivernamelist;
+else
+ echo " ";
+ echo " ";
+ echo "--> Running now function createdrivernamelist....";
+ echo "=================================================";
+ cat ${nthost}/enumdrivers3list.txt \
+ | grep "Driver Name:" \
+ | awk -F "[" '{ print $2 }' \
+ | awk -F "]" '{ print $1 }' \
+ | sort -f \
+ | uniq \
+ | tr / _ \
+ | sed -e 's/$/\"/' -e 's/^ */\"/' \
+ | tee \
+ ${nthost}/drvrlst.txt;
+ drvrlst=$(echo ${nthost}/drvrlst.txt);
+
+ cat ${nthost}/enumdrivers3list.txt \
+ | grep "Driver Name:" \
+ | awk -F "[" '{ print $2 }' \
+ | awk -F "]" '{ print $1 }' \
+ | sort -f \
+ | uniq \
+ | sed -e 's/$/\"/' \
+ | cat -n \
+ | sed -e 's/^ */DRIVERNAME/' -e 's/\t/\="/' \
+ | tee \
+ ${nthost}/completedriverlist.txt;
+
+ NUMBEROFDRIVERS=`cat ${nthost}/completedriverlist.txt| wc -l`;
+ echo " ";
+ echo "--> Finished in running function createdrivernamelist....";
+ echo "==============================================================================="
+ echo "NUMBEROFDRIVERS retrieve-able from \"${nthost}\" is $NUMBEROFDRIVERS".;
+ echo " --> If you got \"0\" you may want to run \"fetchenumdrivers3listfromNThost\""
+ echo " again. <---";
+ echo "===============================================================================";
+ echo " ";
+ driverlist=`cat ${nthost}/completedriverlist.txt`;
+
+ # alternative method suggested by Fabian Franz:
+ # | awk 'BEGIN {n=1} { print "DRIVERNAME"n"=\""$0"\""; n=n+1 } '
+fi
+}
+
+
+
+# -----------------------------------------------------------------------------
+# ----------- Create a list of all available printers -------------------------
+# -----------------------------------------------------------------------------
+#
+
+function helpwithcreateprinterlistwithUNCnames()
+{
+echo -e " \n\
+################################################################################
+#
+# About createprinterlistwithUNCnames()...
+# ----------------------------------------
+#
+# PRECONDITIONS: 1) This function expects write access to the current directory.
+# 2) This function expects to have the '\$nthost',
+# '\$ntprinteradmin' and '\$ntadminpasswd' variables set to
+# according values.
+#
+# WHAT IT DOES: This function connects to the '\$nthost' (using the credentials
+# '\$ntprinteradmin' with '\$ntadminpasswd'), retrieves a list of
+# printqueues (with associated driver names) from that host (with
+# the help of the 'rpcclient ... enumprinters' utility, and saves
+# it under name and path '\${nthost}/printerlistwithUNCnames.txt'
+# (ie. it also creates the '\$nthost' subdirectory in the current
+# one). It further prints some more info to stdout.
+#
+# IF IT DOESN'T WORK: It may happen that the function doesn't work at the first
+# time (there may be a connection problem). Just repeat a
+# few times. It may work then. You will recognize if it does.
+#
+# HINT: The current values: 'nthost'=\"$nthost\"
+# 'ntprinteradmin'=\"$ntprinteradmin\"
+# 'ntadminpasswd'=<not shown here, check yourself!>
+#
+################################################################################"
+}
+
+# -----------------------------------------------------------------------------
+
+function createprinterlistwithUNCnames()
+{
+if stringinstring help $@ ; then
+helpwithcreateprinterlistwithUNCnames ;
+else
+ [ -d ${nthost} ] || mkdir -p ${nthost};
+ echo " "
+ echo " "
+ echo " "
+ echo "--> Running now function createprinterlistwithUNCnames()...."
+ echo "============================================================"
+ rpcclient -U"${ntprinteradmin}%${ntadminpasswd}" -c 'enumprinters' ${nthost} \
+ | grep "description:" \
+ | awk -F "[" '{ print $2 }' \
+ | awk -F "]" '{ print $1 }' \
+ | sort -f \
+ | uniq \
+ | tee \
+ ${nthost}/printerlistwithUNCnames.txt;
+
+ NUMBEROFPRINTERS=`cat ${nthost}/printerlistwithUNCnames.txt| wc -l`;
+ echo " ";
+ echo "--> Finished in running function createprinterlistwithUNCnames....";
+ echo "=========================================================================="
+ echo "NUMBEROFPRINTERS retrieved from \"${nthost}\" is $NUMBEROFPRINTERS".;
+ echo " --> If you got \"0\" you may want to try again. <---";
+ echo "==========================================================================";
+ echo " ";
+ printerlistwithUNCnames=`cat ${nthost}/printerlistwithUNCnames.txt`;
+fi
+}
+
+
+# -----------------------------------------------------------------------------
+# ----------- Create a list of all printers which have (no) drivers -----------
+# -----------------------------------------------------------------------------
+#
+
+function helpwithcreatemapofprinterstodrivers()
+{
+echo -e " \n\
+################################################################################
+#
+# About createmapofprinterdrivers()...
+# ------------------------------------
+#
+# PRECONDITIONS: 1) This function expects to find a subdirectory '\$nthost' and
+# the file '\${nthost}/printerlistwithUNCnames.txt' to exist.
+# 2) This functions expects to have the '\$nthosts' variable set
+# to an according value.
+#
+# WHAT IT DOES: This function dissects '\${nthost}/printerlistwithUNCnames.txt'
+# and creates some other textfiles from its contents:
+# - '\${nthost}/allprinternames.txt'
+# - '\${nthost}/alldrivernames.txt'
+# - '\${nthost}/allnonrawprinters.txt'
+# - '\${nthost}/allrawprinters.txt'
+# - '\${nthost}/printertodrivermap.txt'
+# and further prints some more info to stdout.
+#
+# HINT: You currently have defined: 'nthost'=\"$nthost\", which resolves above
+# mentioned paths to:
+# - '${nthost}/allprinternames.txt'
+# - '${nthost}/alldrivernames.txt'
+# - '${nthost}/allnonrawprinters.txt'
+# - '${nthost}/allrawprinters.txt'
+# - '${nthost}/printertodrivermap.txt'
+#
+################################################################################"
+}
+
+# -----------------------------------------------------------------------------
+
+function createmapofprinterstodrivers()
+{
+if stringinstring help $@ ; then
+helpwithcreatemapofprinterstodrivers ;
+else
+ echo " "
+ echo " "
+ echo "--> Running now function createmapofprinterstodrivers()...."
+ echo "==========================================================="
+ echo " "
+ echo " "
+ echo "ALL PRINTERNAMES:"
+ echo "================="
+ echo " "
+ cat ${nthost}/printerlistwithUNCnames.txt \
+ | awk -F "\\" '{ print $4 }' \
+ | awk -F "," '{print $1}' \
+ | sort -f \
+ | uniq \
+ | tee \
+ ${nthost}/allprinternames.txt;
+
+ echo " "
+ echo " "
+ echo "ALL non-RAW PRINTERS:"
+ echo "====================="
+ echo " "
+ cat ${nthost}/printerlistwithUNCnames.txt \
+ | grep -v ",," \
+ | awk -F "\\" '{ print $4 }' \
+ | awk -F "," '{print $1}' \
+ | sort -f \
+ | uniq \
+ | tee \
+ ${nthost}/allnonrawprinters.txt;
+
+ echo " "
+ echo " "
+ echo "ALL RAW PRINTERS:"
+ echo "================"
+ echo " "
+ cat ${nthost}/printerlistwithUNCnames.txt \
+ | grep ",," \
+ | awk -F "\\" '{ print $4 }' \
+ | awk -F "," '{print $1}' \
+ | sort -f \
+ | uniq \
+ | tee \
+ ${nthost}/allrawprinters.txt;
+
+ echo " "
+ echo " "
+ echo "THE DRIVERNAMES:"
+ echo "================"
+ cat ${nthost}/printerlistwithUNCnames.txt \
+ | awk -F "," '{print $2 }' \
+ | grep -v "^$" \
+ | tee \
+ ${nthost}/alldrivernames.txt;
+
+ echo " "
+ echo " "
+ echo "THE PRINTER-TO-DRIVER-MAP-FOR-non-RAW-PRINTERS:"
+ echo "==============================================="
+ cat ${nthost}/printerlistwithUNCnames.txt \
+ | awk -F "\\" '{ print $4 }' \
+ | awk -F "," '{ print "\"" $1 "\":\"" $2 "\"" }' \
+ | grep -v ":\"\"$" \
+ | tee \
+ ${nthost}/printertodrivermap.txt
+ echo -e "##########################\n# printer:driver #" >> ${nthost}/printertodrivermap.txt
+fi
+}
+
+
+# -----------------------------------------------------------------------------
+# ----------- Create a list of all printers which have drivers ----------------
+# -----------------------------------------------------------------------------
+#
+
+function helpwithgetdrivernamelist()
+{
+echo -e " \n\
+################################################################################
+#
+# About getdrivernamelist()...
+# ----------------------------
+#
+# PRECONDITIONS: 1) This function expects to find the subdirectory '\$nthost\'
+# otherwise it creates it...
+#
+# WHAT IT DOES: This function creates the '\${nthost}/printernamelist.txt'
+# and also prints it to <stdout>. To do so, it must contact the
+# '\$nthost' via rpcclient (which in turn needs '\$ntprinteradmin'
+# '\$ntadminpasswd' to log in....).
+#
+# HINT: The current values: 'nthost'=\"$nthost\"
+# 'ntprinteradmin'=\"$ntprinteradmin\"
+# 'ntadminpasswd'=<not shown here, check yourself!>
+# which resolves above mentioned path to:
+# - '${nthost}/printernamelist.txt'
+#
+################################################################################"
+}
+
+# -----------------------------------------------------------------------------
+
+function getdrivernamelist()
+{
+if stringinstring $@ ; then
+helpwithgetdrivernamelist ;
+else
+ [ -d ${nthost} ] || mkdir -p ${nthost};
+ echo " "
+ echo " "
+ echo "--> Running now function getdrivernamelist()...."
+ echo "================================================"
+ rpcclient -U${ntprinteradmin}%${ntadminpasswd} -c 'enumprinters' ${nthost} \
+ | grep "description:" \
+ | grep -v ",," \
+ | awk -F "," '{ print $2 }' \
+ | sort -f \
+ | uniq \
+ | tee \
+ ${nthost}/drivernamelist.txt
+fi
+}
+
+
+# -----------------------------------------------------------------------------
+# ----------- Split the driverfile listing between the architectures ----------
+# -----------------------------------------------------------------------------
+#
+
+function helpwithsplitenumdrivers3list()
+{
+echo -e " \n\
+################################################################################
+#
+# About splitenumdrivers3list()...
+# --------------------------------
+#
+# PRECONDITIONS: 1) This function expects write access to the current directory
+# and its subdirs '\$nthost/*'.
+# 2) This function expects to have the '\$nthost' variable set to
+# the according value.
+#
+# WHAT IT DOES: This function dissects the '\$nthost/enumdrivers3list.txt'
+# (using "sed", "cat", "awk" and "grep"). It splits the list up
+# into two different files representing a complete list of drivers
+# and files for each of the 2 supported architectures. It creates
+# '\${nthost}/W32X86/${nthost}-enumdrivers3list-NTx86.txt'
+# and '\${nthost}/WIN40/${nthost}-enumdrivers3list-WIN40.txt'.
+#
+# IF IT DOESN'T WORK: The function "fetchenumdrivers3listfromNThost" may not
+# have been run successfully. This is a precondition for
+# the current function.
+#
+# HINT: You currently have defined: 'nthost'=\"$nthost\", which resolves above
+# mentioned paths to:
+# - '${nthost}/WIN40/${nthost}-enumdrivers3list-NTx86.txt'
+# - '${nthost}/W32X86/${nthost}-enumdrivers3list-NTx86.txt'
+#
+################################################################################"
+}
+
+# -----------------------------------------------------------------------------
+
+function splitenumdrivers3list()
+{
+if stringinstring help $@ ; then
+helpwithsplitenumdrivers3list ;
+else
+ echo " "
+ echo " "
+ echo "--> Running now function splitenumdrivers3list()...."
+ echo "===================================================="
+
+ [ -d ${nthost}/WIN40 ] || mkdir -p ${nthost}/WIN40;
+ [ -d ${nthost}/W32X86 ] || mkdir -p ${nthost}/W32X86;
+
+ cat ${nthost}/enumdrivers3list.txt \
+ | sed -e '/^\[Windows NT x86\]/,$ d' \
+ | tee \
+ ${nthost}/WIN40/${nthost}-enumdrivers3list-WIN40.txt ;
+
+ cat ${nthost}/WIN40/${nthost}-enumdrivers3list-WIN40.txt \
+ | grep Version \
+ | sort -f \
+ | uniq \
+ | awk -F "[" '{ print $2 }' \
+ | awk -F "]" '{ print $1 }' \
+ | tee ${nthost}/WIN40/availableversionsWIN40.txt ;
+
+# cd ${nthost}/WIN40/ ;
+# mkdir $( cat availableversionsWIN40.txt ) 2> /dev/null ;
+# cd - ;
+
+ cat ${nthost}/enumdrivers3list.txt \
+ | sed -e '/^\[Windows NT x86\]/,$! d' \
+ | tee \
+ ${nthost}/W32X86/${nthost}-enumdrivers3list-NTx86.txt ;
+
+ cat ${nthost}/W32X86/${nthost}-enumdrivers3list-NTx86.txt \
+ | grep Version \
+ | sort -f \
+ | uniq \
+ | awk -F "[" '{ print $2 }' \
+ | awk -F "]" '{ print $1 }' \
+ | tee ${nthost}/W32X86/availableversionsW32X86.txt ;
+
+# cd ${nthost}/W32X86/ ;
+# mkdir $( cat availableversionsW32X86.txt ) 2> /dev/null ;
+# cd - ;
+fi
+}
+
+
+# -----------------------------------------------------------------------------
+# ---------- Make subdirs in ./${sambahost}/WIN40/ for each driver.... -------
+# -----------------------------------------------------------------------------
+#
+
+function helpwithmakesubdirsforWIN40driverlist()
+{
+echo -e " \n\
+################################################################################
+#
+# About makesubdirsforWIN40driverlist() and makesubdirsforWIN40driverlist ()...
+# -----------------------------------------------------------------------------
+#
+# PRECONDITIONS: 1) These functions expect write access to the current directory
+# 2) These functions expect to have the '\$nthost' variable set
+# to the according value.
+# 3) These functions expect to find the two files
+# '\${nthost}/WIN40/\${nthost}-enumdrivers3list-WIN40.txt' and
+# '\${nthost}/W32X86/\${nthost}-enumdrivers3list-NTx86.txt' to
+# work on.
+#
+# WHAT IT DOES: These functions dissect the '$nthost/enumdrivers3list.txt'
+# (using "sed", "cat", "awk" and "grep"). They split the input
+# files up into individual files representing driver(version)s and
+# create appropriate subdirectories for each driver and version
+# underneath './\$nthost/<architecture>'. They use the drivernames
+# (including spaces) for the directory names. ("/" -- slashes --
+# in drivernames are converted to underscores).
+#
+# IF IT DOESN'T WORK: The function "fetchenumdrivers3listfromNThost" and
+# consecutive ones may not have been run successfully. This
+# is a precondition for the current function.
+#
+# HINT: You currently have defined: 'nthost'=\"$nthost\", which resolves above
+# mentioned paths to:
+# - '\${nthost}/WIN40/\${nthost}-enumdrivers3list-NTx86.txt'
+# - '\${nthost}/W32X86/\${nthost}-enumdrivers3list-NTx86.txt'
+#
+################################################################################
+# ............PRESS \"q\" TO QUIT............" \
+|less
+}
+
+# -----------------------------------------------------------------------------
+
+function makesubdirsforWIN40driverlist()
+{
+if stringinstring help $@ ; then
+helpwithmakesubdirsforWIN40driverlist ;
+else
+ cat ${nthost}/WIN40/${nthost}-enumdrivers3list-WIN40.txt \
+ | grep "Driver Name:" \
+ | awk -F "[" '{ print $2 }' \
+ | awk -F "]" '{ print $1 }' \
+ | sort -f \
+ | uniq \
+ | tr / _ \
+ | sed -e 's/$/\"/' \
+ | sed -e 's/^/mkdir -p '"\"${nthost}"'\/WIN40\//' \
+ | tee \
+ ${nthost}/makesubdirsforWIN40driverlist.txt;
+
+ sh -x ${nthost}/makesubdirsforWIN40driverlist.txt;
+
+# rm ${nthost}/makesubdirsforWIN40driverlist.txt;
+fi
+}
+
+
+# -----------------------------------------------------------------------------
+# ---------- Make subdirs in ./${sambahost}/W32X86/ for each driver.... -------
+# -----------------------------------------------------------------------------
+#
+
+function makesubdirsforW32X86driverlist()
+{
+if stringinstring help $@ ; then
+helpwithvampiredrivers ;
+else
+ cat ${nthost}/W32X86/${nthost}-enumdrivers3list-NTx86.txt \
+ | grep "Driver Name:" \
+ | awk -F "[" '{ print $2 }' \
+ | awk -F "]" '{ print $1 }' \
+ | sort -f \
+ | uniq \
+ | tr / _ \
+ | sed -e 's/$/\"/' \
+ | sed -e 's/^ */mkdir '\""${nthost}"'\/W32X86\//' \
+ | tee \
+ ${nthost}/makesubdirsforW32X86driverlist.txt;
+
+ sh -x ${nthost}/makesubdirsforW32X86driverlist.txt;
+
+# rm ${nthost}/makesubdirsforW32X86driverlist.txt;
+fi
+}
+
+
+
+
+# -----------------------------------------------------------------------------
+# ----------- Split the WIN40 driverfile listing of each architecture ---------
+# ------------------------ into individual drivers ----------------------------
+# -----------------------------------------------------------------------------
+#
+
+function helpwithmakesubdirsforWIN40driverlist()
+{
+echo -e " \n\
+################################################################################
+#
+# About splitWIN40fileintoindividualdriverfiles() and
+# splitW32X86fileintoindividualdriverfiles()...
+# ---------------------------------------------------
+#
+# PRECONDITIONS: 1) These functions expect write access to the current directory
+# and its subdirs '\$nthost/*/'.
+# 2) These functions expect to have the '\$nthost' variable set
+# to the according value.
+# 3) These functions expect to find the two files
+# '\${nthost}/WIN40/\${nthost}-enumdrivers3list-WIN40.txt' and
+# '\${nthost}/W32X86/\${nthost}-enumdrivers3list-NTx86.txt' to
+# work on.
+#
+# WHAT IT DOES: 1) These functions create a directory for each printer driver.
+# The directory name is identical to the driver name.
+# 2) For each supported driver version (\"0\", \"2\" and \"3\") it
+# creates a subdirectory as required underneath
+# './\$nthost/<architecture>'.
+# 3) The directories use the drivernames (including spaces) for
+# their names. ("/" - slashes - in drivernames are converted to
+# underscores).
+# 4) In each subdirectory they dissect the original
+# '\$nthost/enumdrivers3list.txt' (using "sed", "cat", "awk"
+# and "grep") and store that part describing the related driver
+# (under the name \"driverfilesversion.txt\".
+# 5) For each driver the files \"Drivername\", \"DriverPath\",
+# \"Drivername\", \"Configfile\", \"Helpfile\", \"AllFiles\" and
+# \"Dependentfilelist\" are stored in the according directory
+# which hold contend that is used by other (downstream)
+# functions.
+# 6) It creates a file named \"AllFilesIAskFor\" which holds the
+# case sensitive names of files it wanted to download. It also
+# creates a file named \"AllFilesIGot\" which holds the case
+# sensitive spelling of the downloaded files. (Due to
+# Microsoft's ingenious file naming tradition, you may have
+# asked for a \"PS5UI.DLL\" but gotten a \"ps5ui.dll\".
+# 7) The 2 files from 6) will be later compared with the help of
+# the \"sdiff\" utility to decide how to re-name the files so
+# that the subsequent driver upload command's spelling
+# convention is met.
+#
+# IF IT DOESN'T WORK: The function \"fetchenumdrivers3listfromNThost\" and
+# consecutive ones may not have been run successfully. This
+# is a precondition for the current function.
+#
+# HINT: You currently have defined: 'nthost'=\"$nthost\".
+#
+################################################################################
+# ............PRESS \"q\" TO QUIT............" \
+|less
+}
+
+# -----------------------------------------------------------------------------
+
+function splitWIN40fileintoindividualdriverfiles()
+{
+if stringinstring help $@ ; then
+helpwithmakesubdirsforWIN40driverlist ;
+else
+ echo " "
+ echo " "
+ echo "--> Running now function splitWIN40fileintoindividualdriverfiles()..."
+ echo "====================================================================="
+
+ for i in ${nthost}/WIN40/*/; do
+ CWD1="$( pwd )" ;
+ cd "${i}" ;
+ echo " "
+ echo " "
+ echo " ###########################################################################################"
+ echo " "
+ echo " Next driver is \"$( basename "$( pwd)" )\""
+ echo " "
+ echo " ###########################################################################################"
+
+##### echo "yes" | cp -f ../../../${nthost}/WIN40/${nthost}-enumdrivers3list-WIN40.txt . 2> /dev/null ;
+ ln -s -f ../${nthost}-enumdrivers3list-WIN40.txt ${nthost}-enumdrivers3list-WIN40.lnk ;
+
+ tac ${nthost}-enumdrivers3list-WIN40.lnk \
+ | sed -e '/'"$(basename "$(echo "$PWD")")"'/,/Version/ p' -n \
+ | grep Version \
+ | uniq \
+ | awk -F "[" '{ print $2 }' \
+ | awk -F "]" '{ print "mkdir \"" $1 "\"" }' \
+ | tee mkversiondir.txt ;
+
+ sh mkversiondir.txt 2> /dev/null ;
+
+ cat ${nthost}-enumdrivers3list-WIN40.lnk \
+ | sed -e '/\['"$(basename "$(echo "$PWD")")"'\]/,/Monitor/ w alldriverfiles.txt' -n ;
+
+ for i in */; do
+ CWD2="$( pwd )" ;
+ cd "${i}";
+ echo "yes" | cp ../alldriverfiles.txt . 2> /dev/null ;
+
+ cat alldriverfiles.txt \
+ | egrep '(\\'"$(basename "$( pwd )")"'\\|Driver Name)' \
+ | tee driverfilesversion.txt ;
+
+ Drivername=$( grep "Driver Name:" driverfilesversion.txt \
+ | awk -F "[" '{ print $2 }' \
+ | awk -F "]" '{ print $1 }' \
+ | sort -f \
+ | uniq \
+ | tee Drivername ) ;
+
+ DriverPath=$( grep "Driver Path:" driverfilesversion.txt \
+ | awk -F "[" '{ print $2 }' \
+ | awk -F "]" '{ print $1 }' \
+ | awk -F "WIN40" '{ print $2 }' \
+ | awk -F "\\" '{ print $3 }' \
+ | sort -f \
+ | uniq ) ;
+ echo "${DriverPath}" \
+ | tee DriverPath ;
+
+ Datafile=$( grep "Datafile:" driverfilesversion.txt \
+ | awk -F "[" '{ print $2 }' \
+ | awk -F "]" '{ print $1 }' \
+ | awk -F "WIN40" '{ print $2 }' \
+ | awk -F "\\" '{ print $3 }' \
+ | sort -f \
+ | uniq ) ;
+ echo "${Datafile}" \
+ | tee Datafile ;
+
+ Configfile=$( grep "Configfile:" driverfilesversion.txt \
+ | awk -F "[" '{ print $2 }' \
+ | awk -F "]" '{ print $1 }' \
+ | awk -F "WIN40" '{ print $2 }' \
+ | awk -F "\\" '{ print $3 }' \
+ | sort -f \
+ | uniq ) ;
+ echo "${Configfile}" \
+ | tee Configfile ;
+
+ Helpfile=$( grep "Helpfile:" driverfilesversion.txt \
+ | awk -F "[" '{ print $2 }' \
+ | awk -F "]" '{ print $1 }' \
+ | awk -F "WIN40" '{ print $2 }' \
+ | awk -F "\\" '{ print $3 }' \
+ | sort -f \
+ | uniq ) ;
+ echo "${Helpfile}" \
+ | tee Helpfile ;
+
+ Dependentfilelist=$( grep "Dependentfiles:" driverfilesversion.txt \
+ | awk -F "[" '{ print $2 }' \
+ | awk -F "]" '{ print $1 }' \
+ | awk -F "WIN40" '{ print $2 }' \
+ | awk -F "\\" '{ print $3 }' \
+ | sort -f \
+ | uniq ) ;
+
+ Dependentfiles=$( echo $Dependentfilelist \
+ | sed -e 's/ /,/g ' ) ;
+
+ echo "${Dependentfiles}" \
+ | tee Dependentfiles
+
+ AllFiles=$( echo ${Dependentfilelist}; echo ${Helpfile}; echo ${Configfile}; echo ${Datafile}; echo ${DriverPath} );
+
+ echo "${AllFiles}" \
+ | sort -f \
+ | uniq \
+ | tee AllFiles ;
+
+ for i in $( cat AllFiles ); do echo ${i}; done \
+ | sort -f \
+ | uniq \
+ | tee AllFilesIAskFor ;
+
+ cd "${CWD2}" 1> /dev/null ;
+ done
+
+# rpcclient -U"${smbprinteradmin}%${smbadminpasswd}" \
+# -c "adddriver \"${Architecture}\" \"${DriverName}:${DriverPath}:${Datafile}:${Configfile}:${Helpfile}:NULL:RAW:${Dependentfiles}\" ${Version}" \ ${smbhost}
+
+# rpcclient -U"${smbprinteradmin}%${smbadminpasswd}" \
+# -c "setdriver \"${printername}\" \"${DriverName}\"" \
+# ${smbhost}
+#
+# rpcclient -U"${smbprinteradmin}%${smbadminpasswd}" \
+# -c "setprinter \"${printername}\" \"Driver was installed and set via MS-RPC (utilized by Kurt Pfeifle\'s set of \"Vampire Printerdrivers\" scripts from Linux)\"" \
+# ${smbhost}
+
+ cd "${CWD1}" 1> /dev/null ;
+ done;
+fi
+}
+
+
+
+
+# -----------------------------------------------------------------------------
+# ---------- Split the W32X86 driverfile listing of each architecture ---------
+# ------------------------ into individual drivers ----------------------------
+# -----------------------------------------------------------------------------
+#
+
+function splitW32X86fileintoindividualdriverfiles()
+{
+if stringinstring help $@ ; then
+helpwithmakesubdirsforWIN40driverlist ;
+else
+ echo " "
+ echo " "
+ echo "--> Running now function splitW32X86fileintoindividualdriverfiles()..."
+ echo "======================================================================"
+
+ for i in ${nthost}/W32X86/*/; do
+ CWD1="$( pwd )" ;
+ cd "${i}" ;
+ echo " "
+ echo " "
+ echo " ###########################################################################################"
+ echo " "
+ echo " Next driver is \"$( basename "$( pwd)" )\""
+ echo " "
+ echo " ###########################################################################################"
+
+###### echo "yes" | cp -f ../../../${nthost}/W32X86/${nthost}-enumdrivers3list-NTx86.txt . 2> /dev/null ;
+ ln -s -f ../${nthost}-enumdrivers3list-NTx86.txt ${nthost}-enumdrivers3list-NTx86.lnk ;
+
+ tac ${nthost}-enumdrivers3list-NTx86.lnk \
+ | sed -e '/'"$(basename "$(echo "$PWD")")"'/,/Version/ p' -n \
+ | grep Version \
+ | uniq \
+ | awk -F "[" '{ print $2 }' \
+ | awk -F "]" '{ print "mkdir \"" $1 "\"" }' \
+ | tee mkversiondir.txt ;
+
+ sh mkversiondir.txt 2> /dev/null ;
+
+ cat ${nthost}-enumdrivers3list-NTx86.lnk \
+ | sed -e '/\['"$(basename "$(echo "$PWD")")"'\]/,/Monitor/ w alldriverfiles.txt' -n ;
+
+ for i in */; do
+ CWD2="$( pwd )" ;
+ cd "${i}";
+ echo "yes" | cp ../alldriverfiles.txt . 2> /dev/null ;
+
+ cat alldriverfiles.txt \
+ | egrep '(\\'"$(basename "$( pwd )")"'\\|Driver Name)' \
+ | tee driverfilesversion.txt ;
+
+ Drivername=$( grep "Driver Name:" driverfilesversion.txt \
+ | awk -F "[" '{ print $2 }' \
+ | awk -F "]" '{ print $1 }' \
+ | sort -f \
+ | uniq \
+ | tee Drivername ) ;
+# echo "${Drivername}" \
+# | tee Drivername ;
+
+
+ DriverPath=$( grep "Driver Path:" driverfilesversion.txt \
+ | awk -F "[" '{ print $2 }' \
+ | awk -F "]" '{ print $1 }' \
+ | awk -F "W32X86" '{ print $2 }' \
+ | awk -F "\\" '{ print $3 }' \
+ | sort -f \
+ | uniq ) ;
+ echo "${DriverPath}" \
+ | tee DriverPath ;
+
+ Datafile=$( grep "Datafile:" driverfilesversion.txt \
+ | awk -F "[" '{ print $2 }' \
+ | awk -F "]" '{ print $1 }' \
+ | awk -F "W32X86" '{ print $2 }' \
+ | awk -F "\\" '{ print $3 }' \
+ | sort -f \
+ | uniq ) ;
+ echo "${Datafile}" \
+ | tee Datafile ;
+
+ Configfile=$( grep "Configfile:" driverfilesversion.txt \
+ | awk -F "[" '{ print $2 }' \
+ | awk -F "]" '{ print $1 }' \
+ | awk -F "W32X86" '{ print $2 }' \
+ | awk -F "\\" '{ print $3 }' \
+ | sort -f \
+ | uniq ) ;
+ echo "${Configfile}" \
+ | tee Configfile ;
+
+ Helpfile=$( grep "Helpfile:" driverfilesversion.txt \
+ | awk -F "[" '{ print $2 }' \
+ | awk -F "]" '{ print $1 }' \
+ | awk -F "W32X86" '{ print $2 }' \
+ | awk -F "\\" '{ print $3 }' \
+ | sort -f \
+ | uniq ) ;
+ echo "${Helpfile}" \
+ | tee Helpfile ;
+
+ Dependentfilelist=$( grep "Dependentfiles:" driverfilesversion.txt \
+ | awk -F "[" '{ print $2 }' \
+ | awk -F "]" '{ print $1 }' \
+ | awk -F "W32X86" '{ print $2 }' \
+ | awk -F "\\" '{ print $3 }' \
+ | sort -f \
+ | uniq ) ;
+
+ Dependentfiles=$( echo $Dependentfilelist \
+ | sed -e 's/ /,/g ' ) ;
+
+ echo "${Dependentfiles}" \
+ | tee Dependentfiles
+
+ AllFiles=$( echo ${Dependentfilelist}; echo ${Helpfile}; echo ${Configfile}; echo ${Datafile}; echo ${DriverPath} ) ;
+
+ echo "${AllFiles}" \
+ | sort -f \
+ | uniq \
+ | tee AllFiles ;
+
+ for i in $( cat AllFiles ); do echo ${i}; done \
+ | sort -f \
+ | uniq \
+ | tee AllFilesIAskFor ;
+
+ cd "${CWD2}" 1> /dev/null ;
+ done
+
+# rpcclient -U"${smbprinteradmin}%${smbadminpasswd}" \
+# -c "adddriver \"${Architecture}\" \"${DriverName}:${DriverPath}:${Datafile}:${Configfile}:${Helpfile}:NULL:RAW:${Dependentfiles}\" ${Version}" \ ${smbhost}
+
+# rpcclient -U"${smbprinteradmin}%${smbadminpasswd}" \
+# -c "setdriver \"${printername}\" \"${DriverName}\"" \
+# ${smbhost}
+#
+# rpcclient -U"${smbprinteradmin}%${smbadminpasswd}" \
+# -c "setprinter \"${printername}\" \"Driver was installed and set via MS-RPC (utilized by Kurt Pfeifle\'s set of \"Vampire Printerdrivers\" scripts from Linux)\"" \
+# ${smbhost}
+
+ cd "${CWD1}" 1> /dev/null ;
+ done;
+fi
+}
+
+
+
+# -----------------------------------------------------------------------------
+# ------------------ First download the driverfiles........... ----------------
+# -----------------------------------------------------------------------------
+#
+
+function helpwithfetchallW32X86driverfiles()
+{
+echo -e " \n\
+################################################################################
+#
+# About fetchallW32X86driverfiles()...
+# ------------------------------------
+#
+# PRECONDITIONS: 1) This function expects to have the \'\$nthost\' variable set
+# to the according value.
+# 2) This function expects to find files \"AllFiles\",
+# \"AllFilesIAskFor\", and \"AllFilesIGot\" in the directories
+# \'\${nthost}/<architecture>/<drivername>/<version>/\'.
+#
+# WHAT IT DOES: These functions use \"smbclient\" to connect to the NT print
+# server \"\$nthost\" and download the printer driver files from
+# there. To achieve that in an orderly fashion, the previously
+# created subdirectories (named like the drivers to fetch) are
+# visited in turn and the related files are downloaded for each
+# driver/directory.
+#
+# IF IT DOESN'T WORK: The function \"fetchenumdrivers3listfromNThost\" and
+# consecutive ones may not have been run successfully. This
+# is a precondition for the current function.
+#
+# HINT: The current values: 'nthost'=\"$nthost\"
+# 'ntprinteradmin'=\"$ntprinteradmin\"
+# 'ntadminpasswd'=<not shown here, check yourself!>
+#
+################################################################################"
+}
+
+# -----------------------------------------------------------------------------
+
+function fetchallW32X86driverfiles()
+{
+if stringinstring help $@ ; then
+helpwithfetchallW32X86driverfiles ;
+else
+ echo " "
+ echo " "
+ echo "--> Running now function fetchallW32X86driverfiles()...."
+ echo "========================================================"
+
+ CURRENTWD=${PWD} ;
+ for i in ${nthost}/W32X86/*/*/ ; do \
+ cd "${i}";
+
+ driverversion="$(basename "$(echo "$PWD")")" ;
+ echo "$(basename "$(echo "$PWD")")" > driverversion ;
+
+ AllFiles=$( cat AllFiles ) ;
+
+ [ -d TheFiles ] || mkdir TheFiles;
+
+ cd TheFiles;
+
+ echo " "
+ echo "===================================================="
+ echo "Downloading files now to ${PWD}....";
+ echo "===================================================="
+ echo " "
+
+ # Fetch the Driver files from the Windoze box (printserver)
+ smbclient -U"${ntprinteradmin}%${ntadminpasswd}" -d 2 \
+ //${nthost}/print\$ -c \
+ "cd W32X86\\${driverversion};prompt;mget ${AllFiles}"
+
+ ls -1 \
+ | sort -f \
+ | uniq \
+ | tee ../AllFilesIGot ;
+
+ cd ${CURRENTWD} ;
+
+ done ;
+fi
+}
+
+
+# -----------------------------------------------------------------------------
+# -------------- Now upload the driverfiles and activate them! ----------------
+# Upload files into root "Architecture" directory of Samba'a [print$] share...
+# -----------------------------------------------------------------------------
+#
+
+function helpwithuploadallW32X86drivers()
+{
+echo -e " \n\
+################################################################################
+#
+# About uploadallW32X86drivers()...
+# ---------------------------------
+#
+# PRECONDITIONS: 1) This function expects to have the '\$nthost',
+# '\$ntprinteradmin' and '\$ntadminpasswd' variables set to
+# according values.
+# 2) This function expects to find the files \"AllFiles\",
+# \"AllFilesIGot\" and \"AllFilesIAskFor\" in the
+# \"\${nthost}/W32X86<drivername>/<driverversion>/TheFiles\"
+# subdirectory.
+#
+# WHAT IT DOES: This function uses "smbclient" to connect to the new Samba print
+# server "\$nthost" and upload the printer driver files into the
+# \"[print\$]\" share there. To achieve that in orderly fashion,
+# the previously created subdirectories (named like the drivers
+# fetched previously from \$smbhost) are visited in turn and the
+# related files are uploaded for each driver/directory. For this
+# to really succeed, the files \"AllFilesIGot\" and \"AllFilesIAskFor\"
+# are compared with the help of the \"sdiff\" utility to decide
+# how to re-name the mis-matching filenams, so that the used
+# driver upload command's spelling convention is met....
+#
+# IF IT DOESN'T WORK: The function "fetchenumdrivers3listfromNThost" and
+# consecutive ones may not have been run successfully. This
+# is a precondition for the current function.
+#
+# HINT: The current values: 'nthost'=\"$nthost\"
+# 'ntprinteradmin'=\"$ntprinteradmin\"
+# 'ntadminpasswd'=<not shown here, check yourself!>
+#
+################################################################################
+# ............PRESS \"q\" TO QUIT............" \
+|less
+}
+
+# -----------------------------------------------------------------------------
+
+function uploadallW32X86drivers()
+{
+if stringinstring help $@ ; then
+helpwithuploadallW32X86drivers ;
+else
+ echo " "
+ echo " "
+ echo "--> Running now function uploadallW32X86drivers()...."
+ echo "====================================================="
+
+ for i in ${nthost}/W32X86/*/*/; do \
+ CURRENTWD=${PWD} ;
+ cd "${i}" ;
+ # we are now in [..]/W32X86/[drvrname]/[2|3]/
+
+ driverversion="$(basename "$(echo "$PWD")")" ;
+
+ echo "$(basename "$(echo "$PWD")")" > driverversion ;
+
+ cd TheFiles ;
+ # we are now in [..]/W32X86/[drvrname]/[2|3]/TheFiles
+ echo " "
+ echo "===================================================="
+ echo "Uploading driverfiles now from ${PWD}....";
+ echo "===================================================="
+ echo " "
+ set -x ;
+
+ smbclient -U"${smbprinteradmin}%${smbadminpasswd}" -d 2 \
+ //${smbhost}/print\$ \
+ -c "mkdir W32X86;cd W32X86;prompt;mput $( cat ../AllFilesIGot )";
+
+ cd .. ;
+ # we are now in [..]/W32X86/[drvrname]/[2|3]/
+
+# Now tell Samba that those files are *printerdriver* files....
+# The "adddriver" command will move them to the "0" subdir and create or
+# update the associated *.tdb files (faking the MS Windows Registry on Samba)
+ Drivername="$( cat Drivername )"
+
+ set -x ;
+ [ x"$( cat Dependentfiles)" == x"" ] && echo NULL > Dependentfiles;
+
+ sdiff -s AllFilesIGot AllFilesIAskFor \
+ | tee sdiff-of-Requested-and-Received.txt ;
+
+ [ -s sdiff-of-Requested-and-Received.txt ] \
+ || rm -f sdiff-of-Requested-and-Received.txt \
+ && cat sdiff-of-Requested-and-Received.txt > ../sdiff-of-Requested-and-Received.txt ;
+
+ cat sdiff-of-Requested-and-Received.txt \
+ | sed -e 's/^/mv /' \
+ | sed -e 's/ *|/ /' \
+ | tee rename-Received-to-Requested-case.txt ;
+
+ sh -x rename-Received-to-Requested-case.txt ;
+
+ mv rename-Received-to-Requested-case.txt rename-Received-to-Requested-case.done ;
+
+ echo " ################ B E G I N DEBUGGING STATEMENT ############"
+ echo "rpcclient -U\"${smbprinteradmin}%${smbadminpasswd}\" -d 2 \
+ -c \'adddriver \"Windows NT x86\" \"$( cat Drivername ):$( cat DriverPath ):$( cat Datafile ):$( cat Configfile ):$( cat Helpfile ):NULL:RAW:$( cat Dependentfiles )\" $( cat driverversion )" \
+ ${smbhost} \' ;
+ echo " ################ E N D DEBUGGING STATEMENT ################"
+
+ rpcclient -U"${smbprinteradmin}%${smbadminpasswd}" -d 2 \
+ -c "adddriver \"Windows NT x86\" \"$( cat Drivername ):$( cat DriverPath ):$( cat Datafile ):$( cat Configfile ):$( cat Helpfile ):NULL:RAW:$( cat Dependentfiles )\" $( cat driverversion )" \
+ ${smbhost} ;
+
+ set +x ;
+
+ cd ${CURRENTWD} ;
+ # we are now back to where we started
+ done;
+ set +x ;
+fi
+}
+
+# Now tell Samba which printqueue this driver is associated with....
+# The "setdriver" command will do just that and create or
+# update the associated *.tdb files (faking the MS Windows Registry on Samba)
+# rpcclient -U"${smbprinteradmin}%${smbadminpasswd}" \
+# -c "setdriver \"${printername}\" \"${DriverName}\"" \
+# ${smbhost}
+# -- NOT YET IMPLEMENTED IN THIS SCRIPT ---
+#
+
+# Now set a nice printer comment and let the world know what we've done
+# (or not.... ;-)
+# rpcclient -U"${smbprinteradmin}%${smbadminpasswd}" \
+# -c "setprinter \"${printername}\" \"Driver was installed and set via MS-RPC (rpcclient commandline from Linux)\"" \
+# ${smbhost}
+# -- NOT YET IMPLEMENTED IN THIS SCRIPT ---
+#
+
+
+# -----------------------------------------------------------------------------
+# ------------------ First download the driverfiles........... ----------------
+# -----------------------------------------------------------------------------
+#
+
+function helpwithfetchallWIN40driverfiles()
+{
+echo -e " \n\
+################################################################################
+#
+# About fetchallWIN40driverfiles()...
+# -----------------------------------
+#
+# PRECONDITIONS: 1) This function expects to have the \$nthost variable set to
+# the according value.
+# 2) This function expects to find the \"AllFiles\" file in
+# \"\${nthost}/WIN40<drivername>/<driverversion>/TheFiles\".
+#
+# WHAT IT DOES: These functions use "smbclient" to connect to the NT print server
+# "\$nthost" and download the printer driver files from there. To
+# achieve that in an orderly fashion, the previously created
+# subdirectories (named like the drivers to fetch) are visited in
+# turn and the related files are downloaded for each
+# driver/directory.
+#
+# IF IT DOESN'T WORK: The function "fetchenumdrivers3listfromNThost" and
+# consecutive ones may not have been run successfully. This
+# is a precondition for the current function.
+#
+# HINT: The current values: 'nthost'=\"$nthost\"
+# 'ntprinteradmin'=\"$ntprinteradmin\"
+# 'ntadminpasswd'=<not shown here, check yourself!>
+#
+################################################################################
+# ............PRESS \"q\" TO QUIT............" \
+|less
+}
+
+# -----------------------------------------------------------------------------
+
+function fetchallWIN40driverfiles()
+{
+if stringinstring help $@ ; then
+helpwithfetchallWIN40driverfiles ;
+else
+ echo " "
+ echo " "
+ echo "--> Running now function fetchallWIN40driverfiles()...."
+ echo "======================================================="
+
+ CURRENTWD=${PWD} ;
+
+ for i in ${nthost}/WIN40/*/*/; do \
+ cd "${i}";
+
+ driverversion="$(basename "$(echo "$PWD")")" ;
+ echo "$(basename "$(echo "$PWD")")" > driverversion ;
+
+ AllFiles=$( cat AllFiles ) ;
+
+ [ -d TheFiles ] || mkdir TheFiles;
+
+ cd TheFiles;
+
+ echo " "
+ echo "===================================================="
+ echo "Downloading files now to ${PWD}....";
+ echo "===================================================="
+ echo " "
+
+ # Fetch the Driver files from the Windoze box (printserver)
+ smbclient -U"${ntprinteradmin}%${ntadminpasswd}" -d 2 \
+ //${nthost}/print\$ -c \
+ "cd WIN40\\${driverversion};prompt;mget ${AllFiles}" ;
+
+ ls -1 \
+ | sort -f \
+ | uniq \
+ | tee ../AllFilesIGot ;
+
+ cd ${CURRENTWD} ;
+
+ done ;
+fi
+}
+
+
+# -----------------------------------------------------------------------------
+# -------------- Now upload the driverfiles and activate them! ----------------
+# Upload files into root "Architecture" directory of Samba'a [print$] share...
+# -----------------------------------------------------------------------------
+#
+
+function helpwithuploadallWIN40drivers()
+{
+echo -e " \n\
+################################################################################
+#
+# About uploadallWIN40drivers()...
+# --------------------------------
+#
+# PRECONDITIONS: 1) This function expects to have '\$smbhost', '\$smbprinteradmin'
+# and '\$smbadminpasswd' variables set to according values.
+# 2) This function expects to find \"AllFiles\", \"AllFilesIGot\"
+# and \"AllFilesIAskFor\" in the subdirectory
+# \"\${nthost}/WINI40/<drivername>/<driverversion>/TheFiles\".
+#
+# WHAT IT DOES: These function uses \"smbclient\" to connect to the new Samba
+# print server "\$nthost" and upload the printer driver files into
+# the \"[print\$]\" share there.
+# To achieve that in an orderly fashion, the previously created
+# subdirectories (named like the drivers fetched previously from
+# \$smbhost) are visited in turn and the related files are
+# uploaded for each driver/directory.
+# For this to really succeed, \"AllFilesIGot\" and \"AllFilesIAskFor\"
+# are compared with the help of the \"sdiff\" utility to decide
+# how to re-name the mis-matching filenams, so that the used
+# driver upload command's spelling convention is met....
+#
+# IF IT DOESN'T WORK: The function \"fetchenumdrivers3listfromNThost\" and
+# consecutive ones may not have been run successfully. This
+# is a precondition for the current function.
+#
+# HINT: The current values: 'nthost'=\"$nthost\"
+# 'ntprinteradmin'=\"$ntprinteradmin\"
+# 'ntadminpasswd'=<not shown here, check yourself!>
+#
+################################################################################
+# ............PRESS \"q\" TO QUIT............" \
+|less
+}
+function uploadallWIN40drivers()
+{
+if stringinstring help $@ ; then
+helpwithuploadallWIN40drivers ;
+else
+ echo " "
+ echo " "
+ echo "--> Running now function uploadallWIN40drivers()...."
+ echo "===================================================="
+
+ for i in ${nthost}/WIN40/*/*/; do \
+ CURRENTWD=${PWD} ;
+ cd "${i}" ;
+ # we are now in [..]/WIN40/[drvrname]/[0]/
+
+ driverversion="$(basename "$(echo "$PWD")")" ;
+
+ echo "$(basename "$(echo "$PWD")")" > driverversion ;
+
+ cd TheFiles ;
+ # we are now in [..]/WIN40/[drvrname]/[0]/TheFiles
+ echo " "
+ echo "===================================================="
+ echo "Uploading driverfiles now from ${PWD}....";
+ echo "===================================================="
+ echo " "
+ set -x ;
+
+ smbclient -U"${smbprinteradmin}%${smbadminpasswd}" -d 2 \
+ //${smbhost}/print\$ \
+ -c "mkdir WIN40;cd WIN40;prompt;mput $( cat ../AllFilesIGot )";
+
+ cd .. ;
+ # we are now in [..]/WIN40/[drvrname]/[0]/
+
+# Now tell Samba that those files are *printerdriver* files....
+# The "adddriver" command will move them to the "0" subdir and create or
+# update the associated *.tdb files (faking the MS Windows Registry on Samba)
+ Drivername="$( cat Drivername )"
+
+ set -x ;
+ [ x"$( cat Dependentfiles)" == x"" ] && echo NULL > Dependentfiles;
+
+ sdiff -s AllFilesIGot AllFilesIAskFor \
+ | tee sdiff-of-Requested-and-Received.txt ;
+
+ [ -s sdiff-of-Requested-and-Received.txt ] \
+ || rm -f sdiff-of-Requested-and-Received.txt \
+ && cat sdiff-of-Requested-and-Received.txt > ../sdiff-of-Requested-and-Received.txt ;
+
+ cat sdiff-of-Requested-and-Received.txt \
+ | sed -e 's/^/mv /' \
+ | sed -e 's/ *|/ /' \
+ | tee rename-Received-to-Requested-case.txt ;
+
+ sh -x rename-Received-to-Requested-case.txt ;
+
+ mv rename-Received-to-Requested-case.txt rename-Received-to-Requested-case.done ;
+
+ echo " ################ DEBUGGING STATEMENT "
+ echo "rpcclient -U\"${smbprinteradmin}%${smbadminpasswd}\" -d 2 \
+ -c \'adddriver \"Windows NT x86\" \"$( cat Drivername ):$( cat DriverPath ):$( cat Datafile ):$( cat Configfile ):$( cat Helpfile ):NULL:RAW:$( cat Dependentfiles )\" $( cat driverversion )" \
+ ${smbhost}\' ;
+ echo " ################ DEBUGGING STATEMENT "
+
+ rpcclient -U"${smbprinteradmin}%${smbadminpasswd}" -d 2 \
+ -c "adddriver \"Windows 4.0\" \"$( cat Drivername ):$( cat DriverPath ):$( cat Datafile ):$( cat Configfile ):$( cat Helpfile ):NULL:RAW:$( cat Dependentfiles )\" $( cat driverversion )" \
+ ${smbhost} ;
+
+ set +x ;
+ cd ${CURRENTWD} ;
+ # we are now back to where we started
+ done;
+fi
+}
+
+# Now tell Samba which printqueue this driver is associated with....
+# The "setdriver" command will do just that and create or
+# update the associated *.tdb files (faking the MS Windows Registry on Samba)
+# rpcclient -U"${smbprinteradmin}%${smbadminpasswd}" \
+# -c "setdriver \"${printername}\" \"${DriverName}\"" \
+# ${smbhost}
+# -- NOT YET IMPLEMENTED IN THIS SCRIPT ---
+#
+# Now set a nice printer comment and let the world know what we've done
+# (or not.... ;-)
+# rpcclient -U"${smbprinteradmin}%${smbadminpasswd}" \
+# -c "setprinter \"${printername}\" \"Driver was installed and set via MS-RPC (rpcclient commandline from Linux)\"" \
+# ${smbhost}
+# -- NOT YET IMPLEMENTED IN THIS SCRIPT ---
+#
+
+
+#source ${0} ;
+
+enumallfunctions;