⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vampiredriversfunctions

📁 samba-3.0.22.tar.gz 编译smb服务器的源码
💻
📖 第 1 页 / 共 4 页
字号:
#!/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 $@ ; thenhelpwithvampiredrivers ;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 $@ ; thenhelpwithvampiredrivers ;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 $@ ; thenhelpwithfetchenumdrivers3listfromNThost;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 $@ ; thenhelpwithcreatedrivernamelist;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}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -