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

📄 sambalp

📁 samba-3.0.22.tar.gz 编译smb服务器的源码
💻
字号:
#!/bin/perl## Hacked by Alan Stebbens <aks@sgi.com> to setuid to the username if # valid on this system.  Written as a secure Perl script.  To enable,##	chown root /usr/samba/bin/sambalp#	chmod u+s,+x /usr/samba/bin/sambalp## If setuidshells is not enabled on your system, you must also do this:##	systune -i#	nosuidshells = 0#	y#	quit##	reboot## This script will still work as a normal user; it will not try# to setuid in this case.## If the "$PSFIX" variable is set below...## Workaround Win95 printer driver/Impressario bug by removing# the PS check for available virtual memory.  Note that this# bug appears to be in all Win95 print drivers that generate# PostScript; but is for certain there with a QMS-PS 810 (the# printer type I configure on the Win95-side for printing with# Samba).## the perl script fixes 3 different bugs. # 1. remove the JCL statements added by some HP printer drivers to the# beginning of the postscript output. # 2. Fix a bug in output from word files with long filenames. A non-printing# character added to the end of the title comment by word is # removed. # 3. The VM fix described above.### Modified for Perl4 compatibility.#$PROG = "sambalp";$PSFIX = 1;			# set to 0 if you don't want to run				# the "psfix" portion# Untaint the PATH variable@PATH = split(' ',<<EOF);	/usr/sbin /usr/bsd /sbin /usr/bin /bin /usr/lib /usr/local/binEOF$ENV{'PATH'} = join(':',@PATH);        print "$#ARGV ".scalar(@ARGV)."\n";if (scalar(@ARGV) < 2) {    print STDERR "usage: $PROG printer file [user] [system]\n";    exit;}$printer = $ARGV[0];$file    = $ARGV[1];$user    = $ARGV[2];$system  = $ARGV[3];$user = "nobody" unless($user);$system = `hostname` unless($system);open(LPSTAT,"/usr/bin/lpstat -t|") || die("Can't get printer list.\n");@printers = ();while (<LPSTAT>) {    next unless /^printer (\w+)/;    push(@printers,$1);}close LPSTAT;# Create a hash list@printers{@printers} = @printers;    # Untaint the printer nameif (defined($prtname = $printers{$printer})) {    $printer = $prtname;} else {    die("Unknown printer: \"$printer\"\n");}if ($> == 0) {		# are we root?    # yes -- then perform a taint checks and possibly do a suid check    # Untaint the file and system names (pretend to filter them)    $file   =   $file =~ /^(.*)/ ? $1 : die("Bad file: $file\n");    $system = $system =~ /^(.*)/ ? $1 : die("Bad system: $system\n");    # Get the valid users    setpwent;    %users = ();    while (@pwe = getpwent()) { 	$uids{$pwe[0]} = $pwe[2];	$users{$pwe[2]} = $pwe[0];    }    endpwent();    # Check out the user -- if the user is a real user on this system,    # then become that user so that the  printer header page looks right    # otherwise, remain as the default user (probably "nobody").    if (defined($uid = $uids{$user})) {	# before we change UID, we must ensure that the file is still	# readable after the UID change.	chown($uid, 9, $file);	# make the file owned by the user	# Now, go ahead and become the user	$name = $users{$uid};	$> = $uid;		# become the user	$< = $uid;    } else {			# do untaint filtering	$name = $user =~ /^(\w+)/ ? $1 : die("Bad user: $user\n");    }} else {			# otherwise, just be me    $name = $user;		# whomever that is}$lpcommand = "/usr/bin/lp -c -d$printer -t'$name on $system'";# This code is from the original "psfix" but it has been completely# rewritten for speed.if ($PSFIX) {			# are we running a "psfix"?    open(FILE, $file) 		|| die("Can't read $file: $!\n");    open(LP, "|$lpcommand -")	|| die("Can't open pipe to \"lp\": $!\n");    select(LP);    while (<FILE>) {		# 	$_ =~ s/^\004//;		# strip any ctrl-d's	if (/^\e%/) {		# get rid of any non-postscript commands	    while (<FILE>) { 	# remove text until next %!PS		s/^\001M//;	# lenmark driver prefixes Ctrl-A M to %!PS		last if /^%!PS/;	    }	    last if eof(FILE);	} elsif (/^%%Title:/) {	# fix bug in long titles from MS Word	    s/.\r$/\r/;		# remove trailing character on the title	} elsif (/^\/VM\?/) {	# remove VM test	    print "/VM? { pop } bind def\r\n";	    while (<FILE>) { last if /def\r/; }	    next;		# don't print	}	print;    }    close FILE;    close LP;} else {			# we're not running psfix?    system("$lpcommand $file");}if ($file =~ m(^/)) {	# $file is a fully specified path	# Remove the file only if it lives in a directory ending in /tmp.	unlink($file) if ($file =~ m(/tmp/[^/]+$));} else {	# $file is NOT a fully specified path	# Remove the file only if current directory ends in /tmp.	unlink($file) if (`pwd` =~ m(/tmp$));}

⌨️ 快捷键说明

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