r14748: store the name/ip address combination when we doa reverse look up in case...
[Samba.git] / examples / printing / VampireDriversFunctions
blobea0cf4729542b5fb3496376c0419f649d7db354d
1 #!/bin/bash
3 #####################################################################
4 ##
5 ## smb.conf parser class
6 ##
7 ## Copyright (C) Kurt Pfeifle <kpfeifle@danka.de>, 2004.
8 ##
9 ## This program is free software; you can redistribute it and/or modify
10 ## it under the terms of the GNU General Public License as published by
11 ## the Free Software Foundation; either version 2 of the License, or
12 ## (at your option) any later version.
14 ## This program is distributed in the hope that it will be useful,
15 ## but WITHOUT ANY WARRANTY; without even the implied warranty of
16 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 ## GNU General Public License for more details.
19 ## You should have received a copy of the GNU General Public License
20 ## along with this program; if not, write to the Free Software
21 ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23 ######################################################################
25 ######################################################################
26 ## Here an example calling sequence
27 ##!/bin/sh
28 ## set -x
29 ## source VampireDriversFunctions
32 ## Start local variables
34 ## You must define these variable (possibly in a source script)
36 ## nthost=192.168.17.1
37 ## printeradmin=Administrator
38 ## adminpasswd=not4you
40 ## smbhost=knoppix
41 ## smbprinteradmin=knoppix
42 ## smbadminpasswd=knoppix
44 ## End of local variables
48 ## functions to call
51 ## fetchenumdrivers3listfromNThost # repeat, if no success at first
52 ## createdrivernamelist
53 ## createprinterlistwithUNCnames # repeat, if no success at first
54 ## createmapofprinterstodriver
55 ## splitenumdrivers3list
56 ## makesubdirsforWIN40driverlist
57 ## splitWIN40fileintoindividualdriverfiles
58 ## fetchtheWIN40driverfiles
59 ## uploadallWIN40drivers
60 ## makesubdirsforW32X86driverlist
61 ## splitW32X86fileintoindividualdriverfiles
62 ## fetchtheW32X86driverfiles
63 ## uploadallW32X86drivers
65 ## End of example calling sequence
66 ######################################################################
69 # -----------------------------------------------------------------------------
70 # -----------------------------------------------------------------------------
71 function vampiredrivers_readme()
73 echo -e " \n\
74 ############################################################################
76 # About the \"Vampire Printer Drivers\" set of functions....
77 # --------------------------------------------------------
79 # (C) Kurt Pfeifle <kpfeifle@danka.de>, 2004
80 # License: GPL
82 # ------------------------------------------------------------
84 # Version: 0.8 (largely \"self-documented\" now, but not yet
85 # completely -- if it ever will be....)
87 # Thanks a lot to Fabian Franz for helping me with some important
88 # Bash-Scripting-Questions!
90 # This set of functions provides a framework to snatch all printer
91 # driver info and related files from a Windows NT print server.
92 # It then uploads and installs the drivers to a Samba server. (The
93 # Samba server needs to be prepared for this: a valid [print$]
94 # share, with write access set for a \"printer admin\".)
96 # The main commands used are \"smbclient\" and \"rpcclient\" combined
97 # with \"grep\", \"sed\" and \"awk\". Probably a Perl or Python script
98 # would be better suited to do this, mainly because we have to cope
99 # with printer and driver names which are containing spaces in
100 # them, so a lot of shell escaping is required to handle these.
101 # Also, I am not very savvy in scripting, so I invented some very
102 # obscure methods to work around my knowledge gaps. When I download
103 # the driver files from the Windows NT box, I put all related driver
104 # files into their own sub directory, using the same name as the
105 # driver. Also, driver versions \"0\", \"2\" and \"3\" are placed in
106 # further subdirectories.
109 # Known problems:
110 # ---------------
112 # 1) I found one printer driver containing a \"slash\" which is not
113 # handled by this script: \"HP Color LaserJet 5/5M PS\". (There
114 # are more of these in the wild, of course.) -- The reason: I
115 # didn't find a way to create a Unix directory containing a \"slash\".
116 # UPDATE: The script replaces the \"/\" with a \"_\" and also renames
117 # the drivername accordingly, when it is uploaded to the Samba
118 # [print$] share....
120 # 2) There is an unsolved problem in case a real file name deviates
121 # in its case sensitive spelling from how it is displayed by the
122 # \"rpcclient enumdrivers\" command. I encountered cases where
123 # rpcclient displayed \"PS5UI.DLL\" as a file name, but \"smbclient
124 # mget\" retrieved \"ps5ui.dll\" from the NT printserver, and the
125 # driverinstallation failed because \"smbclient mput\" tried to put
126 # \"PS5UI.DLL\" back onto the Samba server where UNIX only had
127 # \"ps5ui.dll\" available (which of course failed). -- UPDATE: this
128 # is now solved. All files are renamed now to the same
129 # case-sensitive spelling as \"rpcclient ... enumdrivers 3\"
130 # announces. This includes renaming into both, uppercase or
131 # lowercase, as the case might be....
133 # 3) This script is probably not portable at all and relies on lots
134 # of Bash-isms.
136 # 4) This script runs with rpcclient from Samba-3.0.2a (or later) only
137 # (because it uses the \"Version\" parameter for \"adddriver\").
139 # The following functions use a few external variables to log
140 # into the 2 hosts. We suggest that you create a file which
141 # contains the variables and that you source that file at the
142 # beginning of this script...
144 # #################################################################
146 # ntprinteradmin=Administrator # any account on the NT host
147 # # with \"printer admin\" privileges
148 # ntadminpasswd=not4you # the \"printer admin\" password on
149 # # the NT print server
150 # nthost=windowsntprintserverbox # the netbios name of the NT print
151 # # server
153 # smbprinteradmin=knoppix # an account on the Samba server
154 # # with \"printer admin\" privileges
155 # smbadminpasswd=2secret4you # the \"printer admin\" password on
156 # # the Samba server
157 # smbhost=knoppix # the netbios name of the Samba
158 # # print server
160 # #################################################################
163 # NOTE: these functions also work for 2 NT print servers: snatch all
164 # drivers from the first, and upload them to the second server (which
165 # takes the role of the \"Samba\" server). Of course they also work
166 # for 2 Samba servers: snatch all drivers from the first (which takes
167 # the role of the NT print server) and upload them to the second....
170 # ............PRESS \"q\" TO QUIT............" \
171 |less
175 #set -x
178 # -----------------------------------------------------------------------------
179 # ----------- print a little help... ------------------------------------------
180 # -----------------------------------------------------------------------------
182 function helpwithvampiredrivers()
184 if stringinstring help $@ ; then
185 helpwithvampiredrivers ;
186 else
187 echo " ";
188 echo " 1. Run the functions of this script one by one.";
189 echo " ";
190 echo " 2. List all functions with the \"enumallfunctions\" call.";
191 echo " ";
192 echo " 3. After each functions' run, check if it completed successfully.";
193 echo " ";
194 echo " 4. For each function, you can ask for separate help by typing";
195 echo " \"<functionname> --help\"."
196 echo " ";
197 echo " 5. Often network conditions prevent the MS-RPC calls"
198 echo " implemented by Samba to succeed at the first attempt."
199 echo " You may have more joy if you try more than once or twice....";
200 echo " ";
201 echo " 6. I can not support end-users who have problems with this script."
202 echo " However, we are available for paid, professional consulting,"
203 echo " training and troubleshooting work.";
204 echo " ";
205 echo " ";
209 # -----------------------------------------------------------------------------
210 # ----------- enumerate all builtin functions... ------------------------------
211 # -----------------------------------------------------------------------------
212 function enumallfunctions()
214 if stringinstring help $@ ; then
215 helpwithvampiredrivers ;
216 else
217 echo " "
218 echo " "
219 echo "--> Running now function enumallfunctions()..."
220 echo "=============================================="
221 echo -e " \n\
223 NOTE: run the listed functions in the same order as listed below.
225 EXAMPLE: \"knoppix@ttyp6[knoppix]$ helpwithvampiredrivers\"
227 HELP: the \"--help\" parameter prints usage hints regarding a function.
229 EXAMPLE: \"knoppix@ttyp6[knoppix]$ fetchenumdrivers3listfromNThost --help\"
232 function vampiredrivers_readme()
233 function enumallfunctions()
234 function helpwithvampiredrivers()
235 function fetchenumdrivers3listfromNThost() # repeat, if no success at first
236 function createdrivernamelist()
237 function createprinterlistwithUNCnames() # repeat, if no success at first
238 function createmapofprinterstodrivers()
239 function splitenumdrivers3list()
240 function makesubdirsforW32X86driverlist()
241 function splitW32X86fileintoindividualdriverfiles()
242 function fetchallW32X86driverfiles()
243 function uploadallW32X86drivers()
244 function makesubdirsforWIN40driverlist()
245 function splitWIN40fileintoindividualdriverfiles()
246 function fetchallWIN40driverfiles()
247 function uploadallWIN40drivers()"
248 echo " "
252 # this is a helperfunction (Thanks to Fabian Franz!)
253 function stringinstring()
255 case "$2" in *$1*)
256 return 0
258 esac
259 return 1
262 # -----------------------------------------------------------------------------
263 # ----------- Create an "enumprinters 3" list --------------------- -----------
264 # -----------------------------------------------------------------------------
267 function helpwithfetchenumdrivers3listfromNThost()
269 echo -e " \n\
270 ################################################################################
272 # About fetchenumdrivers3listfromNThost()....
273 # -------------------------------------------
275 # PRECONDITIONS: 1) This function expects write access to the current directory.
276 # 2) This function expects to have the '\$nthosts',
277 # '\$ntprinteradmin' and '\$ntadminpasswd' variables set to
278 # according values.
280 # WHAT IT DOES: This function connects to the '\$nthost' (using the credentials
281 # '\$ntprinteradmin' with '\$ntadminpasswd', retrieves a list of
282 # drivers (with related file names) from that host, and saves the
283 # list under the name of '\${nthost}/enumdrivers3list.txt' (ie. it
284 # also creates the '\$nthost' subdirectory in the current one). It
285 # further prints some more info to stdout.
287 # IF IT DOESN'T WORK: It may happen that the function doesn't work at the first
288 # time (there may be a connection problem). Just repeat a
289 # few times. It may work then. You will recognize if it
290 # does.
292 # HINT: The current values: 'nthost'=\"$nthost\"
293 # 'ntprinteradmin'=\"$ntprinteradmin\"
294 # 'ntadminpasswd'=<not shown here, check yourself!>
296 ################################################################################"
297 echo " "
300 # -----------------------------------------------------------------------------
302 function fetchenumdrivers3listfromNThost()
304 if stringinstring help $@ ; then
305 helpwithfetchenumdrivers3listfromNThost;
306 else
307 echo " "
308 echo " "
309 echo "--> Running now function fetchenumdrivers3listfromNThost"
310 echo "========================================================"
311 [ -d ${nthost} ] || mkdir "${nthost}";
312 rpcclient -U${ntprinteradmin}%${ntadminpasswd} -c 'enumdrivers 3' ${nthost} \
313 | sed -e '/^.*Driver Name: \[.*\]/ y/\//_/' \
314 | tee \
315 ${nthost}/enumdrivers3list.txt;
317 NUMBEROFDIFFERENTDRIVERNAMES=$( grep "Driver Name:" ${nthost}/enumdrivers3list.txt \
318 | sort -f \
319 | uniq \
320 | wc -l );
322 echo " ";
323 echo "--> Finished in running function fetchenumdrivers3listfromNThost....";
324 echo "===================================================================="
325 echo "NUMBEROFDIFFERENTDRIVERNAMES retrieved from \"${nthost}\" is $NUMBEROFDIFFERENTDRIVERNAMES".;
326 echo " --> If you got \"0\" you may want to try again. <---";
327 echo "================================================================";
328 echo " ";
329 enumdrivers3list=`cat ${nthost}/enumdrivers3list.txt`;
334 # -----------------------------------------------------------------------------
335 # ----------- Create a list of all available drivers installed ----------------
336 # ------------------------on the NT print server-------------------------------
337 # -----------------------------------------------------------------------------
340 function helpwithcreatedrivernamelist()
342 echo -e " \n\
343 ################################################################################
345 # About createdrivernamelist()...
346 # -------------------------------
348 # PRECONDITIONS: 1) This function expects to find the subdirectory '\$nthost'
349 # and the file '\${nthost}/enumdrivers3list.txt' to exist.
350 # 2) This function expects to have the '\$nthosts' variable set
351 # to an according value.
353 # WHAT IT DOES: This function dissects the '\${nthost}/enumdrivers3list.txt'
354 # and creates other textfiles from its contents:
355 # - '\${nthost}/drvrlst.txt'
356 # - '\${nthost}/completedriverlist.txt'
357 # and further prints some more info to stdout.
359 # HINT: The current value: 'nthost'=\"$nthost\"
361 ################################################################################"
364 # -----------------------------------------------------------------------------
366 function createdrivernamelist()
368 if stringinstring help $@ ; then
369 helpwithcreatedrivernamelist;
370 else
371 echo " ";
372 echo " ";
373 echo "--> Running now function createdrivernamelist....";
374 echo "=================================================";
375 cat ${nthost}/enumdrivers3list.txt \
376 | grep "Driver Name:" \
377 | awk -F "[" '{ print $2 }' \
378 | awk -F "]" '{ print $1 }' \
379 | sort -f \
380 | uniq \
381 | tr / _ \
382 | sed -e 's/$/\"/' -e 's/^ */\"/' \
383 | tee \
384 ${nthost}/drvrlst.txt;
385 drvrlst=$(echo ${nthost}/drvrlst.txt);
387 cat ${nthost}/enumdrivers3list.txt \
388 | grep "Driver Name:" \
389 | awk -F "[" '{ print $2 }' \
390 | awk -F "]" '{ print $1 }' \
391 | sort -f \
392 | uniq \
393 | sed -e 's/$/\"/' \
394 | cat -n \
395 | sed -e 's/^ */DRIVERNAME/' -e 's/\t/\="/' \
396 | tee \
397 ${nthost}/completedriverlist.txt;
399 NUMBEROFDRIVERS=`cat ${nthost}/completedriverlist.txt| wc -l`;
400 echo " ";
401 echo "--> Finished in running function createdrivernamelist....";
402 echo "==============================================================================="
403 echo "NUMBEROFDRIVERS retrieve-able from \"${nthost}\" is $NUMBEROFDRIVERS".;
404 echo " --> If you got \"0\" you may want to run \"fetchenumdrivers3listfromNThost\""
405 echo " again. <---";
406 echo "===============================================================================";
407 echo " ";
408 driverlist=`cat ${nthost}/completedriverlist.txt`;
410 # alternative method suggested by Fabian Franz:
411 # | awk 'BEGIN {n=1} { print "DRIVERNAME"n"=\""$0"\""; n=n+1 } '
417 # -----------------------------------------------------------------------------
418 # ----------- Create a list of all available printers -------------------------
419 # -----------------------------------------------------------------------------
422 function helpwithcreateprinterlistwithUNCnames()
424 echo -e " \n\
425 ################################################################################
427 # About createprinterlistwithUNCnames()...
428 # ----------------------------------------
430 # PRECONDITIONS: 1) This function expects write access to the current directory.
431 # 2) This function expects to have the '\$nthost',
432 # '\$ntprinteradmin' and '\$ntadminpasswd' variables set to
433 # according values.
435 # WHAT IT DOES: This function connects to the '\$nthost' (using the credentials
436 # '\$ntprinteradmin' with '\$ntadminpasswd'), retrieves a list of
437 # printqueues (with associated driver names) from that host (with
438 # the help of the 'rpcclient ... enumprinters' utility, and saves
439 # it under name and path '\${nthost}/printerlistwithUNCnames.txt'
440 # (ie. it also creates the '\$nthost' subdirectory in the current
441 # one). It further prints some more info to stdout.
443 # IF IT DOESN'T WORK: It may happen that the function doesn't work at the first
444 # time (there may be a connection problem). Just repeat a
445 # few times. It may work then. You will recognize if it does.
447 # HINT: The current values: 'nthost'=\"$nthost\"
448 # 'ntprinteradmin'=\"$ntprinteradmin\"
449 # 'ntadminpasswd'=<not shown here, check yourself!>
451 ################################################################################"
454 # -----------------------------------------------------------------------------
456 function createprinterlistwithUNCnames()
458 if stringinstring help $@ ; then
459 helpwithcreateprinterlistwithUNCnames ;
460 else
461 [ -d ${nthost} ] || mkdir -p ${nthost};
462 echo " "
463 echo " "
464 echo " "
465 echo "--> Running now function createprinterlistwithUNCnames()...."
466 echo "============================================================"
467 rpcclient -U"${ntprinteradmin}%${ntadminpasswd}" -c 'enumprinters' ${nthost} \
468 | grep "description:" \
469 | awk -F "[" '{ print $2 }' \
470 | awk -F "]" '{ print $1 }' \
471 | sort -f \
472 | uniq \
473 | tee \
474 ${nthost}/printerlistwithUNCnames.txt;
476 NUMBEROFPRINTERS=`cat ${nthost}/printerlistwithUNCnames.txt| wc -l`;
477 echo " ";
478 echo "--> Finished in running function createprinterlistwithUNCnames....";
479 echo "=========================================================================="
480 echo "NUMBEROFPRINTERS retrieved from \"${nthost}\" is $NUMBEROFPRINTERS".;
481 echo " --> If you got \"0\" you may want to try again. <---";
482 echo "==========================================================================";
483 echo " ";
484 printerlistwithUNCnames=`cat ${nthost}/printerlistwithUNCnames.txt`;
489 # -----------------------------------------------------------------------------
490 # ----------- Create a list of all printers which have (no) drivers -----------
491 # -----------------------------------------------------------------------------
494 function helpwithcreatemapofprinterstodrivers()
496 echo -e " \n\
497 ################################################################################
499 # About createmapofprinterdrivers()...
500 # ------------------------------------
502 # PRECONDITIONS: 1) This function expects to find a subdirectory '\$nthost' and
503 # the file '\${nthost}/printerlistwithUNCnames.txt' to exist.
504 # 2) This functions expects to have the '\$nthosts' variable set
505 # to an according value.
507 # WHAT IT DOES: This function dissects '\${nthost}/printerlistwithUNCnames.txt'
508 # and creates some other textfiles from its contents:
509 # - '\${nthost}/allprinternames.txt'
510 # - '\${nthost}/alldrivernames.txt'
511 # - '\${nthost}/allnonrawprinters.txt'
512 # - '\${nthost}/allrawprinters.txt'
513 # - '\${nthost}/printertodrivermap.txt'
514 # and further prints some more info to stdout.
516 # HINT: You currently have defined: 'nthost'=\"$nthost\", which resolves above
517 # mentioned paths to:
518 # - '${nthost}/allprinternames.txt'
519 # - '${nthost}/alldrivernames.txt'
520 # - '${nthost}/allnonrawprinters.txt'
521 # - '${nthost}/allrawprinters.txt'
522 # - '${nthost}/printertodrivermap.txt'
524 ################################################################################"
527 # -----------------------------------------------------------------------------
529 function createmapofprinterstodrivers()
531 if stringinstring help $@ ; then
532 helpwithcreatemapofprinterstodrivers ;
533 else
534 echo " "
535 echo " "
536 echo "--> Running now function createmapofprinterstodrivers()...."
537 echo "==========================================================="
538 echo " "
539 echo " "
540 echo "ALL PRINTERNAMES:"
541 echo "================="
542 echo " "
543 cat ${nthost}/printerlistwithUNCnames.txt \
544 | awk -F "\\" '{ print $4 }' \
545 | awk -F "," '{print $1}' \
546 | sort -f \
547 | uniq \
548 | tee \
549 ${nthost}/allprinternames.txt;
551 echo " "
552 echo " "
553 echo "ALL non-RAW PRINTERS:"
554 echo "====================="
555 echo " "
556 cat ${nthost}/printerlistwithUNCnames.txt \
557 | grep -v ",," \
558 | awk -F "\\" '{ print $4 }' \
559 | awk -F "," '{print $1}' \
560 | sort -f \
561 | uniq \
562 | tee \
563 ${nthost}/allnonrawprinters.txt;
565 echo " "
566 echo " "
567 echo "ALL RAW PRINTERS:"
568 echo "================"
569 echo " "
570 cat ${nthost}/printerlistwithUNCnames.txt \
571 | grep ",," \
572 | awk -F "\\" '{ print $4 }' \
573 | awk -F "," '{print $1}' \
574 | sort -f \
575 | uniq \
576 | tee \
577 ${nthost}/allrawprinters.txt;
579 echo " "
580 echo " "
581 echo "THE DRIVERNAMES:"
582 echo "================"
583 cat ${nthost}/printerlistwithUNCnames.txt \
584 | awk -F "," '{print $2 }' \
585 | grep -v "^$" \
586 | tee \
587 ${nthost}/alldrivernames.txt;
589 echo " "
590 echo " "
591 echo "THE PRINTER-TO-DRIVER-MAP-FOR-non-RAW-PRINTERS:"
592 echo "==============================================="
593 cat ${nthost}/printerlistwithUNCnames.txt \
594 | awk -F "\\" '{ print $4 }' \
595 | awk -F "," '{ print "\"" $1 "\":\"" $2 "\"" }' \
596 | grep -v ":\"\"$" \
597 | tee \
598 ${nthost}/printertodrivermap.txt
599 echo -e "##########################\n# printer:driver #" >> ${nthost}/printertodrivermap.txt
604 # -----------------------------------------------------------------------------
605 # ----------- Create a list of all printers which have drivers ----------------
606 # -----------------------------------------------------------------------------
609 function helpwithgetdrivernamelist()
611 echo -e " \n\
612 ################################################################################
614 # About getdrivernamelist()...
615 # ----------------------------
617 # PRECONDITIONS: 1) This function expects to find the subdirectory '\$nthost\'
618 # otherwise it creates it...
620 # WHAT IT DOES: This function creates the '\${nthost}/printernamelist.txt'
621 # and also prints it to <stdout>. To do so, it must contact the
622 # '\$nthost' via rpcclient (which in turn needs '\$ntprinteradmin'
623 # '\$ntadminpasswd' to log in....).
625 # HINT: The current values: 'nthost'=\"$nthost\"
626 # 'ntprinteradmin'=\"$ntprinteradmin\"
627 # 'ntadminpasswd'=<not shown here, check yourself!>
628 # which resolves above mentioned path to:
629 # - '${nthost}/printernamelist.txt'
631 ################################################################################"
634 # -----------------------------------------------------------------------------
636 function getdrivernamelist()
638 if stringinstring $@ ; then
639 helpwithgetdrivernamelist ;
640 else
641 [ -d ${nthost} ] || mkdir -p ${nthost};
642 echo " "
643 echo " "
644 echo "--> Running now function getdrivernamelist()...."
645 echo "================================================"
646 rpcclient -U${ntprinteradmin}%${ntadminpasswd} -c 'enumprinters' ${nthost} \
647 | grep "description:" \
648 | grep -v ",," \
649 | awk -F "," '{ print $2 }' \
650 | sort -f \
651 | uniq \
652 | tee \
653 ${nthost}/drivernamelist.txt
658 # -----------------------------------------------------------------------------
659 # ----------- Split the driverfile listing between the architectures ----------
660 # -----------------------------------------------------------------------------
663 function helpwithsplitenumdrivers3list()
665 echo -e " \n\
666 ################################################################################
668 # About splitenumdrivers3list()...
669 # --------------------------------
671 # PRECONDITIONS: 1) This function expects write access to the current directory
672 # and its subdirs '\$nthost/*'.
673 # 2) This function expects to have the '\$nthost' variable set to
674 # the according value.
676 # WHAT IT DOES: This function dissects the '\$nthost/enumdrivers3list.txt'
677 # (using "sed", "cat", "awk" and "grep"). It splits the list up
678 # into two different files representing a complete list of drivers
679 # and files for each of the 2 supported architectures. It creates
680 # '\${nthost}/W32X86/${nthost}-enumdrivers3list-NTx86.txt'
681 # and '\${nthost}/WIN40/${nthost}-enumdrivers3list-WIN40.txt'.
683 # IF IT DOESN'T WORK: The function "fetchenumdrivers3listfromNThost" may not
684 # have been run successfully. This is a precondition for
685 # the current function.
687 # HINT: You currently have defined: 'nthost'=\"$nthost\", which resolves above
688 # mentioned paths to:
689 # - '${nthost}/WIN40/${nthost}-enumdrivers3list-NTx86.txt'
690 # - '${nthost}/W32X86/${nthost}-enumdrivers3list-NTx86.txt'
692 ################################################################################"
695 # -----------------------------------------------------------------------------
697 function splitenumdrivers3list()
699 if stringinstring help $@ ; then
700 helpwithsplitenumdrivers3list ;
701 else
702 echo " "
703 echo " "
704 echo "--> Running now function splitenumdrivers3list()...."
705 echo "===================================================="
707 [ -d ${nthost}/WIN40 ] || mkdir -p ${nthost}/WIN40;
708 [ -d ${nthost}/W32X86 ] || mkdir -p ${nthost}/W32X86;
710 cat ${nthost}/enumdrivers3list.txt \
711 | sed -e '/^\[Windows NT x86\]/,$ d' \
712 | tee \
713 ${nthost}/WIN40/${nthost}-enumdrivers3list-WIN40.txt ;
715 cat ${nthost}/WIN40/${nthost}-enumdrivers3list-WIN40.txt \
716 | grep Version \
717 | sort -f \
718 | uniq \
719 | awk -F "[" '{ print $2 }' \
720 | awk -F "]" '{ print $1 }' \
721 | tee ${nthost}/WIN40/availableversionsWIN40.txt ;
723 # cd ${nthost}/WIN40/ ;
724 # mkdir $( cat availableversionsWIN40.txt ) 2> /dev/null ;
725 # cd - ;
727 cat ${nthost}/enumdrivers3list.txt \
728 | sed -e '/^\[Windows NT x86\]/,$! d' \
729 | tee \
730 ${nthost}/W32X86/${nthost}-enumdrivers3list-NTx86.txt ;
732 cat ${nthost}/W32X86/${nthost}-enumdrivers3list-NTx86.txt \
733 | grep Version \
734 | sort -f \
735 | uniq \
736 | awk -F "[" '{ print $2 }' \
737 | awk -F "]" '{ print $1 }' \
738 | tee ${nthost}/W32X86/availableversionsW32X86.txt ;
740 # cd ${nthost}/W32X86/ ;
741 # mkdir $( cat availableversionsW32X86.txt ) 2> /dev/null ;
742 # cd - ;
747 # -----------------------------------------------------------------------------
748 # ---------- Make subdirs in ./${sambahost}/WIN40/ for each driver.... -------
749 # -----------------------------------------------------------------------------
752 function helpwithmakesubdirsforWIN40driverlist()
754 echo -e " \n\
755 ################################################################################
757 # About makesubdirsforWIN40driverlist() and makesubdirsforWIN40driverlist ()...
758 # -----------------------------------------------------------------------------
760 # PRECONDITIONS: 1) These functions expect write access to the current directory
761 # 2) These functions expect to have the '\$nthost' variable set
762 # to the according value.
763 # 3) These functions expect to find the two files
764 # '\${nthost}/WIN40/\${nthost}-enumdrivers3list-WIN40.txt' and
765 # '\${nthost}/W32X86/\${nthost}-enumdrivers3list-NTx86.txt' to
766 # work on.
768 # WHAT IT DOES: These functions dissect the '$nthost/enumdrivers3list.txt'
769 # (using "sed", "cat", "awk" and "grep"). They split the input
770 # files up into individual files representing driver(version)s and
771 # create appropriate subdirectories for each driver and version
772 # underneath './\$nthost/<architecture>'. They use the drivernames
773 # (including spaces) for the directory names. ("/" -- slashes --
774 # in drivernames are converted to underscores).
776 # IF IT DOESN'T WORK: The function "fetchenumdrivers3listfromNThost" and
777 # consecutive ones may not have been run successfully. This
778 # is a precondition for the current function.
780 # HINT: You currently have defined: 'nthost'=\"$nthost\", which resolves above
781 # mentioned paths to:
782 # - '\${nthost}/WIN40/\${nthost}-enumdrivers3list-NTx86.txt'
783 # - '\${nthost}/W32X86/\${nthost}-enumdrivers3list-NTx86.txt'
785 ################################################################################
786 # ............PRESS \"q\" TO QUIT............" \
787 |less
790 # -----------------------------------------------------------------------------
792 function makesubdirsforWIN40driverlist()
794 if stringinstring help $@ ; then
795 helpwithmakesubdirsforWIN40driverlist ;
796 else
797 cat ${nthost}/WIN40/${nthost}-enumdrivers3list-WIN40.txt \
798 | grep "Driver Name:" \
799 | awk -F "[" '{ print $2 }' \
800 | awk -F "]" '{ print $1 }' \
801 | sort -f \
802 | uniq \
803 | tr / _ \
804 | sed -e 's/$/\"/' \
805 | sed -e 's/^/mkdir -p '"\"${nthost}"'\/WIN40\//' \
806 | tee \
807 ${nthost}/makesubdirsforWIN40driverlist.txt;
809 sh -x ${nthost}/makesubdirsforWIN40driverlist.txt;
811 # rm ${nthost}/makesubdirsforWIN40driverlist.txt;
816 # -----------------------------------------------------------------------------
817 # ---------- Make subdirs in ./${sambahost}/W32X86/ for each driver.... -------
818 # -----------------------------------------------------------------------------
821 function makesubdirsforW32X86driverlist()
823 if stringinstring help $@ ; then
824 helpwithvampiredrivers ;
825 else
826 cat ${nthost}/W32X86/${nthost}-enumdrivers3list-NTx86.txt \
827 | grep "Driver Name:" \
828 | awk -F "[" '{ print $2 }' \
829 | awk -F "]" '{ print $1 }' \
830 | sort -f \
831 | uniq \
832 | tr / _ \
833 | sed -e 's/$/\"/' \
834 | sed -e 's/^ */mkdir '\""${nthost}"'\/W32X86\//' \
835 | tee \
836 ${nthost}/makesubdirsforW32X86driverlist.txt;
838 sh -x ${nthost}/makesubdirsforW32X86driverlist.txt;
840 # rm ${nthost}/makesubdirsforW32X86driverlist.txt;
847 # -----------------------------------------------------------------------------
848 # ----------- Split the WIN40 driverfile listing of each architecture ---------
849 # ------------------------ into individual drivers ----------------------------
850 # -----------------------------------------------------------------------------
853 function helpwithmakesubdirsforWIN40driverlist()
855 echo -e " \n\
856 ################################################################################
858 # About splitWIN40fileintoindividualdriverfiles() and
859 # splitW32X86fileintoindividualdriverfiles()...
860 # ---------------------------------------------------
862 # PRECONDITIONS: 1) These functions expect write access to the current directory
863 # and its subdirs '\$nthost/*/'.
864 # 2) These functions expect to have the '\$nthost' variable set
865 # to the according value.
866 # 3) These functions expect to find the two files
867 # '\${nthost}/WIN40/\${nthost}-enumdrivers3list-WIN40.txt' and
868 # '\${nthost}/W32X86/\${nthost}-enumdrivers3list-NTx86.txt' to
869 # work on.
871 # WHAT IT DOES: 1) These functions create a directory for each printer driver.
872 # The directory name is identical to the driver name.
873 # 2) For each supported driver version (\"0\", \"2\" and \"3\") it
874 # creates a subdirectory as required underneath
875 # './\$nthost/<architecture>'.
876 # 3) The directories use the drivernames (including spaces) for
877 # their names. ("/" - slashes - in drivernames are converted to
878 # underscores).
879 # 4) In each subdirectory they dissect the original
880 # '\$nthost/enumdrivers3list.txt' (using "sed", "cat", "awk"
881 # and "grep") and store that part describing the related driver
882 # (under the name \"driverfilesversion.txt\".
883 # 5) For each driver the files \"Drivername\", \"DriverPath\",
884 # \"Drivername\", \"Configfile\", \"Helpfile\", \"AllFiles\" and
885 # \"Dependentfilelist\" are stored in the according directory
886 # which hold contend that is used by other (downstream)
887 # functions.
888 # 6) It creates a file named \"AllFilesIAskFor\" which holds the
889 # case sensitive names of files it wanted to download. It also
890 # creates a file named \"AllFilesIGot\" which holds the case
891 # sensitive spelling of the downloaded files. (Due to
892 # Microsoft's ingenious file naming tradition, you may have
893 # asked for a \"PS5UI.DLL\" but gotten a \"ps5ui.dll\".
894 # 7) The 2 files from 6) will be later compared with the help of
895 # the \"sdiff\" utility to decide how to re-name the files so
896 # that the subsequent driver upload command's spelling
897 # convention is met.
899 # IF IT DOESN'T WORK: The function \"fetchenumdrivers3listfromNThost\" and
900 # consecutive ones may not have been run successfully. This
901 # is a precondition for the current function.
903 # HINT: You currently have defined: 'nthost'=\"$nthost\".
905 ################################################################################
906 # ............PRESS \"q\" TO QUIT............" \
907 |less
910 # -----------------------------------------------------------------------------
912 function splitWIN40fileintoindividualdriverfiles()
914 if stringinstring help $@ ; then
915 helpwithmakesubdirsforWIN40driverlist ;
916 else
917 echo " "
918 echo " "
919 echo "--> Running now function splitWIN40fileintoindividualdriverfiles()..."
920 echo "====================================================================="
922 for i in ${nthost}/WIN40/*/; do
923 CWD1="$( pwd )" ;
924 cd "${i}" ;
925 echo " "
926 echo " "
927 echo " ###########################################################################################"
928 echo " "
929 echo " Next driver is \"$( basename "$( pwd)" )\""
930 echo " "
931 echo " ###########################################################################################"
933 ##### echo "yes" | cp -f ../../../${nthost}/WIN40/${nthost}-enumdrivers3list-WIN40.txt . 2> /dev/null ;
934 ln -s -f ../${nthost}-enumdrivers3list-WIN40.txt ${nthost}-enumdrivers3list-WIN40.lnk ;
936 tac ${nthost}-enumdrivers3list-WIN40.lnk \
937 | sed -e '/'"$(basename "$(echo "$PWD")")"'/,/Version/ p' -n \
938 | grep Version \
939 | uniq \
940 | awk -F "[" '{ print $2 }' \
941 | awk -F "]" '{ print "mkdir \"" $1 "\"" }' \
942 | tee mkversiondir.txt ;
944 sh mkversiondir.txt 2> /dev/null ;
946 cat ${nthost}-enumdrivers3list-WIN40.lnk \
947 | sed -e '/\['"$(basename "$(echo "$PWD")")"'\]/,/Monitor/ w alldriverfiles.txt' -n ;
949 for i in */; do
950 CWD2="$( pwd )" ;
951 cd "${i}";
952 echo "yes" | cp ../alldriverfiles.txt . 2> /dev/null ;
954 cat alldriverfiles.txt \
955 | egrep '(\\'"$(basename "$( pwd )")"'\\|Driver Name)' \
956 | tee driverfilesversion.txt ;
958 Drivername=$( grep "Driver Name:" driverfilesversion.txt \
959 | awk -F "[" '{ print $2 }' \
960 | awk -F "]" '{ print $1 }' \
961 | sort -f \
962 | uniq \
963 | tee Drivername ) ;
965 DriverPath=$( grep "Driver Path:" driverfilesversion.txt \
966 | awk -F "[" '{ print $2 }' \
967 | awk -F "]" '{ print $1 }' \
968 | awk -F "WIN40" '{ print $2 }' \
969 | awk -F "\\" '{ print $3 }' \
970 | sort -f \
971 | uniq ) ;
972 echo "${DriverPath}" \
973 | tee DriverPath ;
975 Datafile=$( grep "Datafile:" driverfilesversion.txt \
976 | awk -F "[" '{ print $2 }' \
977 | awk -F "]" '{ print $1 }' \
978 | awk -F "WIN40" '{ print $2 }' \
979 | awk -F "\\" '{ print $3 }' \
980 | sort -f \
981 | uniq ) ;
982 echo "${Datafile}" \
983 | tee Datafile ;
985 Configfile=$( grep "Configfile:" driverfilesversion.txt \
986 | awk -F "[" '{ print $2 }' \
987 | awk -F "]" '{ print $1 }' \
988 | awk -F "WIN40" '{ print $2 }' \
989 | awk -F "\\" '{ print $3 }' \
990 | sort -f \
991 | uniq ) ;
992 echo "${Configfile}" \
993 | tee Configfile ;
995 Helpfile=$( grep "Helpfile:" driverfilesversion.txt \
996 | awk -F "[" '{ print $2 }' \
997 | awk -F "]" '{ print $1 }' \
998 | awk -F "WIN40" '{ print $2 }' \
999 | awk -F "\\" '{ print $3 }' \
1000 | sort -f \
1001 | uniq ) ;
1002 echo "${Helpfile}" \
1003 | tee Helpfile ;
1005 Dependentfilelist=$( grep "Dependentfiles:" driverfilesversion.txt \
1006 | awk -F "[" '{ print $2 }' \
1007 | awk -F "]" '{ print $1 }' \
1008 | awk -F "WIN40" '{ print $2 }' \
1009 | awk -F "\\" '{ print $3 }' \
1010 | sort -f \
1011 | uniq ) ;
1013 Dependentfiles=$( echo $Dependentfilelist \
1014 | sed -e 's/ /,/g ' ) ;
1016 echo "${Dependentfiles}" \
1017 | tee Dependentfiles
1019 AllFiles=$( echo ${Dependentfilelist}; echo ${Helpfile}; echo ${Configfile}; echo ${Datafile}; echo ${DriverPath} );
1021 echo "${AllFiles}" \
1022 | sort -f \
1023 | uniq \
1024 | tee AllFiles ;
1026 for i in $( cat AllFiles ); do echo ${i}; done \
1027 | sort -f \
1028 | uniq \
1029 | tee AllFilesIAskFor ;
1031 cd "${CWD2}" 1> /dev/null ;
1032 done
1034 # rpcclient -U"${smbprinteradmin}%${smbadminpasswd}" \
1035 # -c "adddriver \"${Architecture}\" \"${DriverName}:${DriverPath}:${Datafile}:${Configfile}:${Helpfile}:NULL:RAW:${Dependentfiles}\" ${Version}" \ ${smbhost}
1037 # rpcclient -U"${smbprinteradmin}%${smbadminpasswd}" \
1038 # -c "setdriver \"${printername}\" \"${DriverName}\"" \
1039 # ${smbhost}
1041 # rpcclient -U"${smbprinteradmin}%${smbadminpasswd}" \
1042 # -c "setprinter \"${printername}\" \"Driver was installed and set via MS-RPC (utilized by Kurt Pfeifle\'s set of \"Vampire Printerdrivers\" scripts from Linux)\"" \
1043 # ${smbhost}
1045 cd "${CWD1}" 1> /dev/null ;
1046 done;
1053 # -----------------------------------------------------------------------------
1054 # ---------- Split the W32X86 driverfile listing of each architecture ---------
1055 # ------------------------ into individual drivers ----------------------------
1056 # -----------------------------------------------------------------------------
1059 function splitW32X86fileintoindividualdriverfiles()
1061 if stringinstring help $@ ; then
1062 helpwithmakesubdirsforWIN40driverlist ;
1063 else
1064 echo " "
1065 echo " "
1066 echo "--> Running now function splitW32X86fileintoindividualdriverfiles()..."
1067 echo "======================================================================"
1069 for i in ${nthost}/W32X86/*/; do
1070 CWD1="$( pwd )" ;
1071 cd "${i}" ;
1072 echo " "
1073 echo " "
1074 echo " ###########################################################################################"
1075 echo " "
1076 echo " Next driver is \"$( basename "$( pwd)" )\""
1077 echo " "
1078 echo " ###########################################################################################"
1080 ###### echo "yes" | cp -f ../../../${nthost}/W32X86/${nthost}-enumdrivers3list-NTx86.txt . 2> /dev/null ;
1081 ln -s -f ../${nthost}-enumdrivers3list-NTx86.txt ${nthost}-enumdrivers3list-NTx86.lnk ;
1083 tac ${nthost}-enumdrivers3list-NTx86.lnk \
1084 | sed -e '/'"$(basename "$(echo "$PWD")")"'/,/Version/ p' -n \
1085 | grep Version \
1086 | uniq \
1087 | awk -F "[" '{ print $2 }' \
1088 | awk -F "]" '{ print "mkdir \"" $1 "\"" }' \
1089 | tee mkversiondir.txt ;
1091 sh mkversiondir.txt 2> /dev/null ;
1093 cat ${nthost}-enumdrivers3list-NTx86.lnk \
1094 | sed -e '/\['"$(basename "$(echo "$PWD")")"'\]/,/Monitor/ w alldriverfiles.txt' -n ;
1096 for i in */; do
1097 CWD2="$( pwd )" ;
1098 cd "${i}";
1099 echo "yes" | cp ../alldriverfiles.txt . 2> /dev/null ;
1101 cat alldriverfiles.txt \
1102 | egrep '(\\'"$(basename "$( pwd )")"'\\|Driver Name)' \
1103 | tee driverfilesversion.txt ;
1105 Drivername=$( grep "Driver Name:" driverfilesversion.txt \
1106 | awk -F "[" '{ print $2 }' \
1107 | awk -F "]" '{ print $1 }' \
1108 | sort -f \
1109 | uniq \
1110 | tee Drivername ) ;
1111 # echo "${Drivername}" \
1112 # | tee Drivername ;
1115 DriverPath=$( grep "Driver Path:" driverfilesversion.txt \
1116 | awk -F "[" '{ print $2 }' \
1117 | awk -F "]" '{ print $1 }' \
1118 | awk -F "W32X86" '{ print $2 }' \
1119 | awk -F "\\" '{ print $3 }' \
1120 | sort -f \
1121 | uniq ) ;
1122 echo "${DriverPath}" \
1123 | tee DriverPath ;
1125 Datafile=$( grep "Datafile:" driverfilesversion.txt \
1126 | awk -F "[" '{ print $2 }' \
1127 | awk -F "]" '{ print $1 }' \
1128 | awk -F "W32X86" '{ print $2 }' \
1129 | awk -F "\\" '{ print $3 }' \
1130 | sort -f \
1131 | uniq ) ;
1132 echo "${Datafile}" \
1133 | tee Datafile ;
1135 Configfile=$( grep "Configfile:" driverfilesversion.txt \
1136 | awk -F "[" '{ print $2 }' \
1137 | awk -F "]" '{ print $1 }' \
1138 | awk -F "W32X86" '{ print $2 }' \
1139 | awk -F "\\" '{ print $3 }' \
1140 | sort -f \
1141 | uniq ) ;
1142 echo "${Configfile}" \
1143 | tee Configfile ;
1145 Helpfile=$( grep "Helpfile:" driverfilesversion.txt \
1146 | awk -F "[" '{ print $2 }' \
1147 | awk -F "]" '{ print $1 }' \
1148 | awk -F "W32X86" '{ print $2 }' \
1149 | awk -F "\\" '{ print $3 }' \
1150 | sort -f \
1151 | uniq ) ;
1152 echo "${Helpfile}" \
1153 | tee Helpfile ;
1155 Dependentfilelist=$( grep "Dependentfiles:" driverfilesversion.txt \
1156 | awk -F "[" '{ print $2 }' \
1157 | awk -F "]" '{ print $1 }' \
1158 | awk -F "W32X86" '{ print $2 }' \
1159 | awk -F "\\" '{ print $3 }' \
1160 | sort -f \
1161 | uniq ) ;
1163 Dependentfiles=$( echo $Dependentfilelist \
1164 | sed -e 's/ /,/g ' ) ;
1166 echo "${Dependentfiles}" \
1167 | tee Dependentfiles
1169 AllFiles=$( echo ${Dependentfilelist}; echo ${Helpfile}; echo ${Configfile}; echo ${Datafile}; echo ${DriverPath} ) ;
1171 echo "${AllFiles}" \
1172 | sort -f \
1173 | uniq \
1174 | tee AllFiles ;
1176 for i in $( cat AllFiles ); do echo ${i}; done \
1177 | sort -f \
1178 | uniq \
1179 | tee AllFilesIAskFor ;
1181 cd "${CWD2}" 1> /dev/null ;
1182 done
1184 # rpcclient -U"${smbprinteradmin}%${smbadminpasswd}" \
1185 # -c "adddriver \"${Architecture}\" \"${DriverName}:${DriverPath}:${Datafile}:${Configfile}:${Helpfile}:NULL:RAW:${Dependentfiles}\" ${Version}" \ ${smbhost}
1187 # rpcclient -U"${smbprinteradmin}%${smbadminpasswd}" \
1188 # -c "setdriver \"${printername}\" \"${DriverName}\"" \
1189 # ${smbhost}
1191 # rpcclient -U"${smbprinteradmin}%${smbadminpasswd}" \
1192 # -c "setprinter \"${printername}\" \"Driver was installed and set via MS-RPC (utilized by Kurt Pfeifle\'s set of \"Vampire Printerdrivers\" scripts from Linux)\"" \
1193 # ${smbhost}
1195 cd "${CWD1}" 1> /dev/null ;
1196 done;
1202 # -----------------------------------------------------------------------------
1203 # ------------------ First download the driverfiles........... ----------------
1204 # -----------------------------------------------------------------------------
1207 function helpwithfetchallW32X86driverfiles()
1209 echo -e " \n\
1210 ################################################################################
1212 # About fetchallW32X86driverfiles()...
1213 # ------------------------------------
1215 # PRECONDITIONS: 1) This function expects to have the \'\$nthost\' variable set
1216 # to the according value.
1217 # 2) This function expects to find files \"AllFiles\",
1218 # \"AllFilesIAskFor\", and \"AllFilesIGot\" in the directories
1219 # \'\${nthost}/<architecture>/<drivername>/<version>/\'.
1221 # WHAT IT DOES: These functions use \"smbclient\" to connect to the NT print
1222 # server \"\$nthost\" and download the printer driver files from
1223 # there. To achieve that in an orderly fashion, the previously
1224 # created subdirectories (named like the drivers to fetch) are
1225 # visited in turn and the related files are downloaded for each
1226 # driver/directory.
1228 # IF IT DOESN'T WORK: The function \"fetchenumdrivers3listfromNThost\" and
1229 # consecutive ones may not have been run successfully. This
1230 # is a precondition for the current function.
1232 # HINT: The current values: 'nthost'=\"$nthost\"
1233 # 'ntprinteradmin'=\"$ntprinteradmin\"
1234 # 'ntadminpasswd'=<not shown here, check yourself!>
1236 ################################################################################"
1239 # -----------------------------------------------------------------------------
1241 function fetchallW32X86driverfiles()
1243 if stringinstring help $@ ; then
1244 helpwithfetchallW32X86driverfiles ;
1245 else
1246 echo " "
1247 echo " "
1248 echo "--> Running now function fetchallW32X86driverfiles()...."
1249 echo "========================================================"
1251 CURRENTWD=${PWD} ;
1252 for i in ${nthost}/W32X86/*/*/ ; do \
1253 cd "${i}";
1255 driverversion="$(basename "$(echo "$PWD")")" ;
1256 echo "$(basename "$(echo "$PWD")")" > driverversion ;
1258 AllFiles=$( cat AllFiles ) ;
1260 [ -d TheFiles ] || mkdir TheFiles;
1262 cd TheFiles;
1264 echo " "
1265 echo "===================================================="
1266 echo "Downloading files now to ${PWD}....";
1267 echo "===================================================="
1268 echo " "
1270 # Fetch the Driver files from the Windoze box (printserver)
1271 smbclient -U"${ntprinteradmin}%${ntadminpasswd}" -d 2 \
1272 //${nthost}/print\$ -c \
1273 "cd W32X86\\${driverversion};prompt;mget ${AllFiles}"
1275 ls -1 \
1276 | sort -f \
1277 | uniq \
1278 | tee ../AllFilesIGot ;
1280 cd ${CURRENTWD} ;
1282 done ;
1287 # -----------------------------------------------------------------------------
1288 # -------------- Now upload the driverfiles and activate them! ----------------
1289 # Upload files into root "Architecture" directory of Samba'a [print$] share...
1290 # -----------------------------------------------------------------------------
1293 function helpwithuploadallW32X86drivers()
1295 echo -e " \n\
1296 ################################################################################
1298 # About uploadallW32X86drivers()...
1299 # ---------------------------------
1301 # PRECONDITIONS: 1) This function expects to have the '\$nthost',
1302 # '\$ntprinteradmin' and '\$ntadminpasswd' variables set to
1303 # according values.
1304 # 2) This function expects to find the files \"AllFiles\",
1305 # \"AllFilesIGot\" and \"AllFilesIAskFor\" in the
1306 # \"\${nthost}/W32X86<drivername>/<driverversion>/TheFiles\"
1307 # subdirectory.
1309 # WHAT IT DOES: This function uses "smbclient" to connect to the new Samba print
1310 # server "\$nthost" and upload the printer driver files into the
1311 # \"[print\$]\" share there. To achieve that in orderly fashion,
1312 # the previously created subdirectories (named like the drivers
1313 # fetched previously from \$smbhost) are visited in turn and the
1314 # related files are uploaded for each driver/directory. For this
1315 # to really succeed, the files \"AllFilesIGot\" and \"AllFilesIAskFor\"
1316 # are compared with the help of the \"sdiff\" utility to decide
1317 # how to re-name the mis-matching filenams, so that the used
1318 # driver upload command's spelling convention is met....
1320 # IF IT DOESN'T WORK: The function "fetchenumdrivers3listfromNThost" and
1321 # consecutive ones may not have been run successfully. This
1322 # is a precondition for the current function.
1324 # HINT: The current values: 'nthost'=\"$nthost\"
1325 # 'ntprinteradmin'=\"$ntprinteradmin\"
1326 # 'ntadminpasswd'=<not shown here, check yourself!>
1328 ################################################################################
1329 # ............PRESS \"q\" TO QUIT............" \
1330 |less
1333 # -----------------------------------------------------------------------------
1335 function uploadallW32X86drivers()
1337 if stringinstring help $@ ; then
1338 helpwithuploadallW32X86drivers ;
1339 else
1340 echo " "
1341 echo " "
1342 echo "--> Running now function uploadallW32X86drivers()...."
1343 echo "====================================================="
1345 for i in ${nthost}/W32X86/*/*/; do \
1346 CURRENTWD=${PWD} ;
1347 cd "${i}" ;
1348 # we are now in [..]/W32X86/[drvrname]/[2|3]/
1350 driverversion="$(basename "$(echo "$PWD")")" ;
1352 echo "$(basename "$(echo "$PWD")")" > driverversion ;
1354 cd TheFiles ;
1355 # we are now in [..]/W32X86/[drvrname]/[2|3]/TheFiles
1356 echo " "
1357 echo "===================================================="
1358 echo "Uploading driverfiles now from ${PWD}....";
1359 echo "===================================================="
1360 echo " "
1361 set -x ;
1363 smbclient -U"${smbprinteradmin}%${smbadminpasswd}" -d 2 \
1364 //${smbhost}/print\$ \
1365 -c "mkdir W32X86;cd W32X86;prompt;mput $( cat ../AllFilesIGot )";
1367 cd .. ;
1368 # we are now in [..]/W32X86/[drvrname]/[2|3]/
1370 # Now tell Samba that those files are *printerdriver* files....
1371 # The "adddriver" command will move them to the "0" subdir and create or
1372 # update the associated *.tdb files (faking the MS Windows Registry on Samba)
1373 Drivername="$( cat Drivername )"
1375 set -x ;
1376 [ x"$( cat Dependentfiles)" == x"" ] && echo NULL > Dependentfiles;
1378 sdiff -s AllFilesIGot AllFilesIAskFor \
1379 | tee sdiff-of-Requested-and-Received.txt ;
1381 [ -s sdiff-of-Requested-and-Received.txt ] \
1382 || rm -f sdiff-of-Requested-and-Received.txt \
1383 && cat sdiff-of-Requested-and-Received.txt > ../sdiff-of-Requested-and-Received.txt ;
1385 cat sdiff-of-Requested-and-Received.txt \
1386 | sed -e 's/^/mv /' \
1387 | sed -e 's/ *|/ /' \
1388 | tee rename-Received-to-Requested-case.txt ;
1390 sh -x rename-Received-to-Requested-case.txt ;
1392 mv rename-Received-to-Requested-case.txt rename-Received-to-Requested-case.done ;
1394 echo " ################ B E G I N DEBUGGING STATEMENT ############"
1395 echo "rpcclient -U\"${smbprinteradmin}%${smbadminpasswd}\" -d 2 \
1396 -c \'adddriver \"Windows NT x86\" \"$( cat Drivername ):$( cat DriverPath ):$( cat Datafile ):$( cat Configfile ):$( cat Helpfile ):NULL:RAW:$( cat Dependentfiles )\" $( cat driverversion )" \
1397 ${smbhost} \' ;
1398 echo " ################ E N D DEBUGGING STATEMENT ################"
1400 rpcclient -U"${smbprinteradmin}%${smbadminpasswd}" -d 2 \
1401 -c "adddriver \"Windows NT x86\" \"$( cat Drivername ):$( cat DriverPath ):$( cat Datafile ):$( cat Configfile ):$( cat Helpfile ):NULL:RAW:$( cat Dependentfiles )\" $( cat driverversion )" \
1402 ${smbhost} ;
1404 set +x ;
1406 cd ${CURRENTWD} ;
1407 # we are now back to where we started
1408 done;
1409 set +x ;
1413 # Now tell Samba which printqueue this driver is associated with....
1414 # The "setdriver" command will do just that and create or
1415 # update the associated *.tdb files (faking the MS Windows Registry on Samba)
1416 # rpcclient -U"${smbprinteradmin}%${smbadminpasswd}" \
1417 # -c "setdriver \"${printername}\" \"${DriverName}\"" \
1418 # ${smbhost}
1419 # -- NOT YET IMPLEMENTED IN THIS SCRIPT ---
1422 # Now set a nice printer comment and let the world know what we've done
1423 # (or not.... ;-)
1424 # rpcclient -U"${smbprinteradmin}%${smbadminpasswd}" \
1425 # -c "setprinter \"${printername}\" \"Driver was installed and set via MS-RPC (rpcclient commandline from Linux)\"" \
1426 # ${smbhost}
1427 # -- NOT YET IMPLEMENTED IN THIS SCRIPT ---
1431 # -----------------------------------------------------------------------------
1432 # ------------------ First download the driverfiles........... ----------------
1433 # -----------------------------------------------------------------------------
1436 function helpwithfetchallWIN40driverfiles()
1438 echo -e " \n\
1439 ################################################################################
1441 # About fetchallWIN40driverfiles()...
1442 # -----------------------------------
1444 # PRECONDITIONS: 1) This function expects to have the \$nthost variable set to
1445 # the according value.
1446 # 2) This function expects to find the \"AllFiles\" file in
1447 # \"\${nthost}/WIN40<drivername>/<driverversion>/TheFiles\".
1449 # WHAT IT DOES: These functions use "smbclient" to connect to the NT print server
1450 # "\$nthost" and download the printer driver files from there. To
1451 # achieve that in an orderly fashion, the previously created
1452 # subdirectories (named like the drivers to fetch) are visited in
1453 # turn and the related files are downloaded for each
1454 # driver/directory.
1456 # IF IT DOESN'T WORK: The function "fetchenumdrivers3listfromNThost" and
1457 # consecutive ones may not have been run successfully. This
1458 # is a precondition for the current function.
1460 # HINT: The current values: 'nthost'=\"$nthost\"
1461 # 'ntprinteradmin'=\"$ntprinteradmin\"
1462 # 'ntadminpasswd'=<not shown here, check yourself!>
1464 ################################################################################
1465 # ............PRESS \"q\" TO QUIT............" \
1466 |less
1469 # -----------------------------------------------------------------------------
1471 function fetchallWIN40driverfiles()
1473 if stringinstring help $@ ; then
1474 helpwithfetchallWIN40driverfiles ;
1475 else
1476 echo " "
1477 echo " "
1478 echo "--> Running now function fetchallWIN40driverfiles()...."
1479 echo "======================================================="
1481 CURRENTWD=${PWD} ;
1483 for i in ${nthost}/WIN40/*/*/; do \
1484 cd "${i}";
1486 driverversion="$(basename "$(echo "$PWD")")" ;
1487 echo "$(basename "$(echo "$PWD")")" > driverversion ;
1489 AllFiles=$( cat AllFiles ) ;
1491 [ -d TheFiles ] || mkdir TheFiles;
1493 cd TheFiles;
1495 echo " "
1496 echo "===================================================="
1497 echo "Downloading files now to ${PWD}....";
1498 echo "===================================================="
1499 echo " "
1501 # Fetch the Driver files from the Windoze box (printserver)
1502 smbclient -U"${ntprinteradmin}%${ntadminpasswd}" -d 2 \
1503 //${nthost}/print\$ -c \
1504 "cd WIN40\\${driverversion};prompt;mget ${AllFiles}" ;
1506 ls -1 \
1507 | sort -f \
1508 | uniq \
1509 | tee ../AllFilesIGot ;
1511 cd ${CURRENTWD} ;
1513 done ;
1518 # -----------------------------------------------------------------------------
1519 # -------------- Now upload the driverfiles and activate them! ----------------
1520 # Upload files into root "Architecture" directory of Samba'a [print$] share...
1521 # -----------------------------------------------------------------------------
1524 function helpwithuploadallWIN40drivers()
1526 echo -e " \n\
1527 ################################################################################
1529 # About uploadallWIN40drivers()...
1530 # --------------------------------
1532 # PRECONDITIONS: 1) This function expects to have '\$smbhost', '\$smbprinteradmin'
1533 # and '\$smbadminpasswd' variables set to according values.
1534 # 2) This function expects to find \"AllFiles\", \"AllFilesIGot\"
1535 # and \"AllFilesIAskFor\" in the subdirectory
1536 # \"\${nthost}/WINI40/<drivername>/<driverversion>/TheFiles\".
1538 # WHAT IT DOES: These function uses \"smbclient\" to connect to the new Samba
1539 # print server "\$nthost" and upload the printer driver files into
1540 # the \"[print\$]\" share there.
1541 # To achieve that in an orderly fashion, the previously created
1542 # subdirectories (named like the drivers fetched previously from
1543 # \$smbhost) are visited in turn and the related files are
1544 # uploaded for each driver/directory.
1545 # For this to really succeed, \"AllFilesIGot\" and \"AllFilesIAskFor\"
1546 # are compared with the help of the \"sdiff\" utility to decide
1547 # how to re-name the mis-matching filenams, so that the used
1548 # driver upload command's spelling convention is met....
1550 # IF IT DOESN'T WORK: The function \"fetchenumdrivers3listfromNThost\" and
1551 # consecutive ones may not have been run successfully. This
1552 # is a precondition for the current function.
1554 # HINT: The current values: 'nthost'=\"$nthost\"
1555 # 'ntprinteradmin'=\"$ntprinteradmin\"
1556 # 'ntadminpasswd'=<not shown here, check yourself!>
1558 ################################################################################
1559 # ............PRESS \"q\" TO QUIT............" \
1560 |less
1562 function uploadallWIN40drivers()
1564 if stringinstring help $@ ; then
1565 helpwithuploadallWIN40drivers ;
1566 else
1567 echo " "
1568 echo " "
1569 echo "--> Running now function uploadallWIN40drivers()...."
1570 echo "===================================================="
1572 for i in ${nthost}/WIN40/*/*/; do \
1573 CURRENTWD=${PWD} ;
1574 cd "${i}" ;
1575 # we are now in [..]/WIN40/[drvrname]/[0]/
1577 driverversion="$(basename "$(echo "$PWD")")" ;
1579 echo "$(basename "$(echo "$PWD")")" > driverversion ;
1581 cd TheFiles ;
1582 # we are now in [..]/WIN40/[drvrname]/[0]/TheFiles
1583 echo " "
1584 echo "===================================================="
1585 echo "Uploading driverfiles now from ${PWD}....";
1586 echo "===================================================="
1587 echo " "
1588 set -x ;
1590 smbclient -U"${smbprinteradmin}%${smbadminpasswd}" -d 2 \
1591 //${smbhost}/print\$ \
1592 -c "mkdir WIN40;cd WIN40;prompt;mput $( cat ../AllFilesIGot )";
1594 cd .. ;
1595 # we are now in [..]/WIN40/[drvrname]/[0]/
1597 # Now tell Samba that those files are *printerdriver* files....
1598 # The "adddriver" command will move them to the "0" subdir and create or
1599 # update the associated *.tdb files (faking the MS Windows Registry on Samba)
1600 Drivername="$( cat Drivername )"
1602 set -x ;
1603 [ x"$( cat Dependentfiles)" == x"" ] && echo NULL > Dependentfiles;
1605 sdiff -s AllFilesIGot AllFilesIAskFor \
1606 | tee sdiff-of-Requested-and-Received.txt ;
1608 [ -s sdiff-of-Requested-and-Received.txt ] \
1609 || rm -f sdiff-of-Requested-and-Received.txt \
1610 && cat sdiff-of-Requested-and-Received.txt > ../sdiff-of-Requested-and-Received.txt ;
1612 cat sdiff-of-Requested-and-Received.txt \
1613 | sed -e 's/^/mv /' \
1614 | sed -e 's/ *|/ /' \
1615 | tee rename-Received-to-Requested-case.txt ;
1617 sh -x rename-Received-to-Requested-case.txt ;
1619 mv rename-Received-to-Requested-case.txt rename-Received-to-Requested-case.done ;
1621 echo " ################ DEBUGGING STATEMENT "
1622 echo "rpcclient -U\"${smbprinteradmin}%${smbadminpasswd}\" -d 2 \
1623 -c \'adddriver \"Windows NT x86\" \"$( cat Drivername ):$( cat DriverPath ):$( cat Datafile ):$( cat Configfile ):$( cat Helpfile ):NULL:RAW:$( cat Dependentfiles )\" $( cat driverversion )" \
1624 ${smbhost}\' ;
1625 echo " ################ DEBUGGING STATEMENT "
1627 rpcclient -U"${smbprinteradmin}%${smbadminpasswd}" -d 2 \
1628 -c "adddriver \"Windows 4.0\" \"$( cat Drivername ):$( cat DriverPath ):$( cat Datafile ):$( cat Configfile ):$( cat Helpfile ):NULL:RAW:$( cat Dependentfiles )\" $( cat driverversion )" \
1629 ${smbhost} ;
1631 set +x ;
1632 cd ${CURRENTWD} ;
1633 # we are now back to where we started
1634 done;
1638 # Now tell Samba which printqueue this driver is associated with....
1639 # The "setdriver" command will do just that and create or
1640 # update the associated *.tdb files (faking the MS Windows Registry on Samba)
1641 # rpcclient -U"${smbprinteradmin}%${smbadminpasswd}" \
1642 # -c "setdriver \"${printername}\" \"${DriverName}\"" \
1643 # ${smbhost}
1644 # -- NOT YET IMPLEMENTED IN THIS SCRIPT ---
1646 # Now set a nice printer comment and let the world know what we've done
1647 # (or not.... ;-)
1648 # rpcclient -U"${smbprinteradmin}%${smbadminpasswd}" \
1649 # -c "setprinter \"${printername}\" \"Driver was installed and set via MS-RPC (rpcclient commandline from Linux)\"" \
1650 # ${smbhost}
1651 # -- NOT YET IMPLEMENTED IN THIS SCRIPT ---
1655 #source ${0} ;
1657 enumallfunctions;