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

📄 samba3.pm

📁 samba最新软件
💻 PM
字号:
#!/usr/bin/perl# Bootstrap Samba and run a number of tests against it.# Copyright (C) 2005-2007 Jelmer Vernooij <jelmer@samba.org># Published under the GNU GPL, v3 or later.package Samba3;use strict;use Cwd qw(abs_path);use FindBin qw($RealBin);use POSIX;sub binpath($$){	my ($self, $binary) = @_;	if (defined($self->{bindir})) {		my $path = "$self->{bindir}/$binary";		-f $path or die("File $path doesn't exist");		return $path;	}	return $binary;}sub new($$) {	my ($classname, $bindir) = @_;	my $self = { bindir => $bindir };	bless $self;	return $self;}sub teardown_env($$){	my ($self, $envvars) = @_;	my $smbdpid = read_pid($envvars, "smbd");	my $nmbdpid = read_pid($envvars, "nmbd");#	my $winbinddpid = read_pid($envvars, "winbindd");	$self->stop_sig_term($smbdpid);	$self->stop_sig_term($nmbdpid);#	$self->stop_sig_term($winbinddpid);	$self->stop_sig_kill($smbdpid);	$self->stop_sig_kill($nmbdpid);#	$self->stop_sig_kill($winbinddpid);	return 0;}sub getlog_env_app($$$){	my ($self, $envvars, $name) = @_;	my $title = "$name LOG of: $envvars->{NETBIOSNAME}\n";	my $out = $title;	open(LOG, "<".$envvars->{$name."_TEST_LOG"});	seek(LOG, $envvars->{$name."_TEST_LOG_POS"}, SEEK_SET);	while (<LOG>) {		$out .= $_;	}	$envvars->{$name."_TEST_LOG_POS"} = tell(LOG);	close(LOG);	return "" if $out eq $title; 	return $out;}sub getlog_env($$){	my ($self, $envvars) = @_;	my $ret = "";	$ret .= $self->getlog_env_app($envvars, "SMBD");	$ret .= $self->getlog_env_app($envvars, "NMBD");#	$ret .= $self->getlog_env_app($envvars, "WINBINDD");	return $ret;}sub check_env($$){	my ($self, $envvars) = @_;	# TODO ...	return 1;}sub setup_env($$$){	my ($self, $envname, $path) = @_;		if ($envname eq "dc") {		return $self->setup_dc("$path/dc");	} else {		return undef;	}}sub setup_dc($$){	my ($self, $path) = @_;	my $vars = $self->provision($path, "dc");	$self->check_or_start($vars,			      ($ENV{NMBD_MAXTIME} or 2700),			      ($ENV{WINBINDD_MAXTIME} or 2700),			      ($ENV{SMBD_MAXTIME} or 2700));	$self->wait_for_start($vars);	return $vars;}sub stop($){	my ($self) = @_;}sub stop_sig_term($$) {	my ($self, $pid) = @_;	kill("USR1", $pid) or kill("ALRM", $pid) or warn("Unable to kill $pid: $!");}sub stop_sig_kill($$) {	my ($self, $pid) = @_;	kill("ALRM", $pid) or warn("Unable to kill $pid: $!");}sub write_pid($$$){	my ($env_vars, $app, $pid) = @_;	open(PID, ">$env_vars->{PIDDIR}/timelimit.$app.pid");	print PID $pid;	close(PID);}sub read_pid($$){	my ($env_vars, $app) = @_;	open(PID, "<$env_vars->{PIDDIR}/timelimit.$app.pid");	my $pid = <PID>;	close(PID);	return $pid;}sub check_or_start($$$$) {	my ($self, $env_vars, $nmbd_maxtime, $winbindd_maxtime, $smbd_maxtime) = @_;	unlink($env_vars->{NMBD_TEST_LOG});	print "STARTING NMBD...";	my $pid = fork();	if ($pid == 0) {		open STDOUT, ">$env_vars->{NMBD_TEST_LOG}";		open STDERR, '>&STDOUT';		$ENV{WINBINDD_SOCKET_DIR} = $env_vars->{WINBINDD_SOCKET_DIR};		my @optargs = ("-d0");		if (defined($ENV{NMBD_OPTIONS})) {			@optargs = split(/ /, $ENV{NMBD_OPTIONS});		}		$ENV{MAKE_TEST_BINARY} = $self->binpath("nmbd");		my @preargs = ($self->binpath("timelimit"), $nmbd_maxtime);		if(defined($ENV{NMBD_VALGRIND})) { 			@preargs = split(/ /, $ENV{NMBD_VALGRIND});		}		exec(@preargs, $self->binpath("nmbd"), "-F", "-S", "--no-process-group", "-s", $env_vars->{SERVERCONFFILE}, @optargs) or die("Unable to start nmbd: $!");	}	write_pid($env_vars, "nmbd", $pid);	print "DONE\n";# disable winbindd until the build-farm faked_users work with it#	unlink($env_vars->{WINBINDD_TEST_LOG});#	print "STARTING WINBINDD...";#	$pid = fork();#	if ($pid == 0) {#		open STDOUT, ">$env_vars->{WINBINDD_TEST_LOG}";#		open STDERR, '>&STDOUT';##		$ENV{WINBINDD_SOCKET_DIR} = $env_vars->{WINBINDD_SOCKET_DIR};##		my @optargs = ("-d0");#		if (defined($ENV{WINBINDD_OPTIONS})) {#			@optargs = split(/ /, $ENV{WINBINDD_OPTIONS});#		}##		$ENV{MAKE_TEST_BINARY} = $self->binpath("winbindd");#		exec($self->binpath("timelimit"), $winbindd_maxtime, $ENV{WINBINDD_VALGRIND}, $self->binpath("winbindd"), "-F", "-S", "--no-process-group", "-s", $env_vars->{SERVERCONFFILE}, @optargs) or die("Unable to start winbindd: $!");#	}#	write_pid($env_vars, "winbindd", $pid);#	print "DONE\n";	unlink($env_vars->{SMBD_TEST_LOG});	print "STARTING SMBD...";	$pid = fork();	if ($pid == 0) {		open STDOUT, ">$env_vars->{SMBD_TEST_LOG}";		open STDERR, '>&STDOUT';		$ENV{WINBINDD_SOCKET_DIR} = $env_vars->{WINBINDD_SOCKET_DIR};		$ENV{MAKE_TEST_BINARY} = $self->binpath("smbd");		my @optargs = ("-d0");		if (defined($ENV{SMBD_OPTIONS})) {			@optargs = split(/ /, $ENV{SMBD_OPTIONS});		}		my @preargs = ($self->binpath("timelimit"), $smbd_maxtime);		if(defined($ENV{SMBD_VALGRIND})) {			@preargs = split(/ /,$ENV{SMBD_VALGRIND});		}		exec(@preargs, $self->binpath("smbd"), "-F", "-S", "--no-process-group", "-s", $env_vars->{SERVERCONFFILE}, @optargs) or die("Unable to start smbd: $!");	}	write_pid($env_vars, "smbd", $pid);	print "DONE\n";	return 0;}sub create_clientconf($$$){	my ($self, $prefix, $domain) = @_;	my $lockdir = "$prefix/locks";	my $logdir = "$prefix/logs";	my $piddir = "$prefix/pid";	my $privatedir = "$prefix/private";	my $scriptdir = "$RealBin/..";	my $conffile = "$prefix/smb.conf";	my $torture_interfaces='127.0.0.6/8,127.0.0.7/8,127.0.0.8/8,127.0.0.9/8,127.0.0.10/8,127.0.0.11/8';	open(CONF, ">$conffile");	print CONF "[global]	workgroup = $domain	private dir = $privatedir	pid directory = $piddir	lock directory = $lockdir	log file = $logdir/log.\%m	log level = 0	name resolve order = bcast	netbios name = TORTURE_6	interfaces = $torture_interfaces	panic action = $scriptdir/gdb_backtrace \%d %\$(MAKE_TEST_BINARY)	passdb backend = tdbsam	";	close(CONF);}sub provision($$$){	my ($self, $prefix, $role) = @_;	##	## setup the various environment variables we need	##	my %ret = ();	my $server = "LOCALHOST2";	my $server_ip = "127.0.0.2";	my $domain = "SAMBA-TEST";	my $username = `PATH=/usr/ucb:$ENV{PATH} whoami`;	chomp $username;	my $password = "test";	my $srcdir="$RealBin/..";	my $scriptdir="$srcdir/selftest";	my $prefix_abs = abs_path($prefix);	my @dirs = ();	my $shrdir="$prefix_abs/share";	push(@dirs,$shrdir);	my $libdir="$prefix_abs/lib";	push(@dirs,$libdir);	my $piddir="$prefix_abs/pid";	push(@dirs,$piddir);	my $privatedir="$prefix_abs/private";	push(@dirs,$privatedir);	my $lockdir="$prefix_abs/lockdir";	push(@dirs,$lockdir);	my $logdir="$prefix_abs/logs";	push(@dirs,$logdir);	# this gets autocreated by winbindd	my $wbsockdir="$prefix_abs/winbindd";	my $wbsockprivdir="$lockdir/winbindd_privileged";	## 	## create the test directory layout	##	mkdir($prefix_abs, 0777);	print "CREATE TEST ENVIRONMENT IN '$prefix'...";	system("rm -rf $prefix_abs/*");	mkdir($_, 0777) foreach(@dirs);	my $conffile="$libdir/server.conf";	open(CONF, ">$conffile") or die("Unable to open $conffile");	print CONF "[global]	workgroup = $domain	private dir = $privatedir	pid directory = $piddir	lock directory = $lockdir	log file = $logdir/log.\%m	log level = 0	name resolve order = bcast	netbios name = $server	interfaces = $server_ip/8	bind interfaces only = yes	panic action = $scriptdir/gdb_backtrace %d %\$(MAKE_TEST_BINARY)	passdb backend = tdbsam	; Necessary to add the build farm hacks	add user script = /bin/false	add machine script = /bin/false	kernel oplocks = no	kernel change notify = no	syslog = no	printing = bsd	printcap name = /dev/null";	if ($role eq "dc") {		print CONF "\tdomain logons = yes\n";		print CONF "\tdomain master = yes\n";	}print CONF "	winbindd:socket dir = $wbsockdir[tmp]	path = $shrdir	read only = no	smbd:sharedelay = 100000	map hidden = yes	map system = yes	create mask = 755[hideunread]	copy = tmp	hide unreadable = yes[hideunwrite]	copy = tmp	hide unwriteable files = yes[print1]	copy = tmp	printable = yes	printing = test[print2]	copy = print1[print3]	copy = print1[print4]	copy = print1	";	close(CONF);	##	## create a test account	##	open(PWD, "|".$self->binpath("smbpasswd")." -c $conffile -L -s -a $username");	print PWD "$password\n$password\n";	close(PWD) or die("Unable to set password for test account");	print "DONE\n";	$ret{SERVER_IP} = $server_ip;	$ret{NMBD_TEST_LOG} = "$prefix/nmbd_test.log";	$ret{WINBINDD_TEST_LOG} = "$prefix/winbindd_test.log";	$ret{SMBD_TEST_LOG} = "$prefix/smbd_test.log";	$ret{SERVERCONFFILE} = $conffile;	$ret{CONFIGURATION} ="-s $conffile";	$ret{SERVER} = $server;	$ret{USERNAME} = $username;	$ret{DOMAIN} = $domain;	$ret{NETBIOSNAME} = $server;	$ret{PASSWORD} = $password;	$ret{PIDDIR} = $piddir;	$ret{WINBINDD_SOCKET_DIR} = $wbsockdir;	$ret{WINBINDD_PRIV_PIPE_DIR} = $wbsockprivdir;	return \%ret;}sub wait_for_start($$){	my ($self, $envvars) = @_;	# give time for nbt server to register its names	print "delaying for nbt name registration\n";	sleep(10);	# This will return quickly when things are up, but be slow if we need to wait for (eg) SSL init 	system($self->binpath("nmblookup") ." $envvars->{CONFIGURATION} -U $envvars->{SERVER_IP} __SAMBA__");	system($self->binpath("nmblookup") ." $envvars->{CONFIGURATION} __SAMBA__");	system($self->binpath("nmblookup") ." $envvars->{CONFIGURATION} -U 127.255.255.255 __SAMBA__");	system($self->binpath("nmblookup") ." $envvars->{CONFIGURATION} -U $envvars->{SERVER_IP} $envvars->{SERVER}");	system($self->binpath("nmblookup") ." $envvars->{CONFIGURATION} $envvars->{SERVER}");	# make sure smbd is also up set	print "wait for smbd\n";	system($self->binpath("smbclient") ." $envvars->{CONFIGURATION} -L $envvars->{SERVER_IP} -U% -p 139 | head -2");	system($self->binpath("smbclient") ." $envvars->{CONFIGURATION} -L $envvars->{SERVER_IP} -U% -p 139 | head -2");	print $self->getlog_env($envvars);}1;

⌨️ 快捷键说明

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