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

📄 samba4.pm

📁 samba最新软件
💻 PM
📖 第 1 页 / 共 2 页
字号:
MRUwEwYKCZImiZPyLGQBGQwFc2FtYmExDjAMBgNVBAMMBXVzZXJzMRYwFAYDVQQDDA1BZG1pbmlzdHJhdG9yMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD0+OL7TQBj0RejbIH1+g5GeRaWaM9xF43uE5y7jUHEsi5owhZF5iIoHZeeL6cpDF5y1BZRs0JlA1VqMry1jjKlzFYVEMMFxB6esnXhl0Jpip1JkUMMXLOP1m/0dqayuHBWozj9f/cdyCJr0wJIX1Z8Pr+EjYRGPn/MF0xdl3JRlwIDAQABo4HSMIHPMA4GA1UdDwEB/wQEAwIFoDAoBgNVHSUEITAfBgcrBgEFAgMEBggrBgEFBQcDAgYKKwYBBAGCNxQCAjBIBgNVHREEQTA/oD0GBisGAQUCAqAzMDGgExsRU0FNQkEuRVhBTVBMRS5DT02hGjAYoAMCAQGhETAPGw1hZG1pbmlzdHJhdG9yMB8GA1UdIwQYMBaAFMLZufegDKLZs0VOyFXYK1L6M8oyMB0GA1UdDgQWBBQg81bLyfCA88C2B/BDjXlGuaFaxjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBBQUAA4GBAHsqSqul0hZCXn4t8Kfp3v/JLMiUMJihR1XOgzoaufLOQ1HNzFUHKuo1JEQ1+i5gHT/arLu/ZBF4BfQol7vW27gKIEt0fkRV8EvoPxXvSokHq0KuHCuPOhYNEP3wYiwB3g93NMCinWVlz0mh5aijEU7y/XrjlZxBKFFrTE+BJi1o-----END CERTIFICATE-----EOF	close(ADMINCERTFILE);}sub provision($$$$$$){	my ($self, $prefix, $server_role, $netbiosname, $netbiosalias, $swiface, $password) = @_;	my $smbd_loglevel = 1;	my $username = "administrator";	my $domain = "SAMBADOMAIN";	my $realm = "SAMBA.EXAMPLE.COM";	my $dnsname = "samba.example.com";	my $basedn = "dc=samba,dc=example,dc=com";	my $unix_name = ($ENV{USER} or $ENV{LOGNAME} or `whoami`);	chomp $unix_name;	my $unix_uid = $>;	my $unix_gids_str = $);	my @unix_gids = split(" ", $unix_gids_str);	my $srcdir="$RealBin/..";	-d $prefix or mkdir($prefix, 0777) or die("Unable to create $prefix");	my $prefix_abs = abs_path($prefix);	my $tmpdir = "$prefix_abs/tmp";	my $etcdir = "$prefix_abs/etc";	my $piddir = "$prefix_abs/pid";	my $conffile = "$etcdir/smb.conf";	my $krb5_config = "$etcdir/krb5.conf";	my $privatedir = "$prefix_abs/private";	my $ncalrpcdir = "$prefix_abs/ncalrpc";	my $lockdir = "$prefix_abs/lockdir";	my $winbindd_socket_dir = "$prefix_abs/winbind_socket";	my $ntp_signd_socket_dir = "$prefix_abs/ntp_signd_socket";	my $winbindd_priv_pipe_dir = "$privatedir/smbd.tmp/winbind_pipe";	my $nsswrap_passwd = "$etcdir/passwd";	my $nsswrap_group = "$etcdir/group";	my $configuration = "--configfile=$conffile";	my $ldapdir = "$privatedir/ldap";	my $tlsdir = "$privatedir/tls";	my $ifaceipv4 = "127.0.0.$swiface";	my $interfaces = "$ifaceipv4/8";	(system("rm -rf $prefix/*") == 0) or die("Unable to clean up");	mkdir($_, 0777) foreach ($privatedir, $etcdir, $piddir, $ncalrpcdir, $lockdir, 		$tmpdir, "$tmpdir/test1", "$tmpdir/test2");	my $localbasedn = $basedn;	$localbasedn = "CN=$netbiosname" if $server_role eq "member server";	open(CONFFILE, ">$conffile");	print CONFFILE "[global]	netbios name = $netbiosname	netbios aliases = $netbiosalias	workgroup = $domain	realm = $realm	private dir = $privatedir	pid directory = $piddir	ncalrpc dir = $ncalrpcdir	lock dir = $lockdir	setup directory = $self->{setupdir}	modules dir = $self->{bindir}/modules	js include = $srcdir/scripting/libjs	winbindd socket directory = $winbindd_socket_dir	ntp signd socket directory = $ntp_signd_socket_dir        winbind separator = /	name resolve order = bcast	interfaces = $interfaces	tls dh params file = $tlsdir/dhparms.pem	panic action = $srcdir/script/gdb_backtrace \%PID% \%PROG%	wins support = yes	server role = $server_role	max xmit = 32K	server max protocol = SMB2	notify:inotify = false	ldb:nosync = true	system:anonymous = true#We don't want to pass our self-tests if the PAC code is wrong	gensec:require_pac = true	log level = $smbd_loglevel[tmp]	path = $tmpdir	read only = no	ntvfs handler = posix	posix:sharedelay = 100000	posix:eadb = $lockdir/eadb.tdb	posix:oplocktimeout = 3[test1]	path = $tmpdir/test1	read only = no	ntvfs handler = posix	posix:sharedelay = 100000	posix:eadb = $lockdir/eadb.tdb	posix:oplocktimeout = 3[test2]	path = $tmpdir/test2	read only = no	ntvfs handler = posix	posix:sharedelay = 100000	posix:eadb = $lockdir/eadb.tdb	posix:oplocktimeout = 3[cifs]	read only = no	ntvfs handler = cifs	cifs:server = $netbiosname	cifs:share = tmp#There is no username specified here, instead the client is expected#to log in with kerberos, and smbd will used delegated credentials.[simple]	path = $tmpdir	read only = no	ntvfs handler = simple[sysvol]	path = $lockdir/sysvol	read only = yes[netlogon]	path = $lockdir/sysvol/$dnsname/scripts	read only = no[cifsposix]	copy = simple	ntvfs handler = cifsposix   ";	close(CONFFILE);	$self->mk_keyblobs($tlsdir);	open(KRB5CONF, ">$krb5_config");	print KRB5CONF "#Generated krb5.conf for $realm[libdefaults] default_realm = $realm dns_lookup_realm = false dns_lookup_kdc = false ticket_lifetime = 24h forwardable = yes[realms] $realm = {  kdc = 127.0.0.1:88  admin_server = 127.0.0.1:88  default_domain = $dnsname } $dnsname = {  kdc = 127.0.0.1:88  admin_server = 127.0.0.1:88  default_domain = $dnsname } $domain = {  kdc = 127.0.0.1:88  admin_server = 127.0.0.1:88  default_domain = $dnsname }[appdefaults]	pkinit_anchors = FILE:$tlsdir/ca.pem[kdc]	enable-pkinit = true	pkinit_identity = FILE:$tlsdir/kdc.pem,$tlsdir/key.pem	pkinit_anchors = FILE:$tlsdir/ca.pem[domain_realm] .$dnsname = $realm";	close(KRB5CONF);	open(PWD, ">$nsswrap_passwd");	print PWD "root:x:0:0:root gecos:$prefix_abs:/bin/false$unix_name:x:$unix_uid:$unix_gids[0]:$unix_name gecos:$prefix_abs:/bin/falsenobody:x:65534:65533:nobody gecos:$prefix_abs:/bin/false";	close(PWD);	open(GRP, ">$nsswrap_group");	print GRP "root:x:0:wheel:x:10:users:x:100:nobody:x:65533:nogroup:x:65534:nobody";	close(GRP);#Ensure the config file is valid before we start	if (system("$self->{bindir}/testparm $configuration -v --suppress-prompt >/dev/null 2>&1") != 0) {		system("$self->{bindir}/testparm -v --suppress-prompt $configuration >&2");		die("Failed to create a valid smb.conf configuration!");	}	(system("($self->{bindir}/testparm $configuration -v --suppress-prompt --parameter-name=\"netbios name\" --section-name=global 2> /dev/null | grep -i \"^$netbiosname\" ) >/dev/null 2>&1") == 0) or die("Failed to create a valid smb.conf configuration! $self->{bindir}/testparm $configuration -v --suppress-prompt --parameter-name=\"netbios name\" --section-name=global");	my @provision_options = ();	push (@provision_options, "NSS_WRAPPER_PASSWD=\"$nsswrap_passwd\"");	push (@provision_options, "NSS_WRAPPER_GROUP=\"$nsswrap_group\"");	if (defined($ENV{GDB_PROVISION})) {		push (@provision_options, "gdb --args");	}	if (defined($ENV{VALGRIND_PROVISION})) {		push (@provision_options, "valgrind");	}	if (defined($ENV{PROVISION_EJS})) {		push (@provision_options, "$self->{bindir}/smbscript");		push (@provision_options, "$self->{setupdir}/provision.js");	} else {#		push (@provision_options, "$self->{bindir}/smbpython");		push (@provision_options, "$self->{setupdir}/provision");	}	push (@provision_options, split(' ', $configuration));	push (@provision_options, "--host-name=$netbiosname");	push (@provision_options, "--host-ip=$ifaceipv4");	push (@provision_options, "--quiet");	push (@provision_options, "--domain=$domain");	push (@provision_options, "--realm=$realm");	push (@provision_options, "--adminpass=$password");	push (@provision_options, "--krbtgtpass=krbtgt$password");	push (@provision_options, "--machinepass=machine$password");	push (@provision_options, "--root=$unix_name");	push (@provision_options, "--simple-bind-dn=cn=Manager,$localbasedn");	push (@provision_options, "--password=$password");	push (@provision_options, "--server-role=\"$server_role\"");	my $ldap_uri= "$ldapdir/ldapi";	$ldap_uri =~ s|/|%2F|g;	$ldap_uri = "ldapi://$ldap_uri";	my $ret = {		KRB5_CONFIG => $krb5_config,		PIDDIR => $piddir,		SERVER => $netbiosname,		SERVER_IP => $ifaceipv4,		NETBIOSNAME => $netbiosname,		NETBIOSALIAS => $netbiosalias,		LDAP_URI => $ldap_uri,		DOMAIN => $domain,		USERNAME => $username,		REALM => $realm,		PASSWORD => $password,		LDAPDIR => $ldapdir,		WINBINDD_SOCKET_DIR => $winbindd_socket_dir,		WINBINDD_PRIV_PIPE_DIR => $winbindd_priv_pipe_dir,		NCALRPCDIR => $ncalrpcdir,		LOCKDIR => $lockdir,		CONFIGURATION => $configuration,		SOCKET_WRAPPER_DEFAULT_IFACE => $swiface,		NSS_WRAPPER_PASSWD => $nsswrap_passwd,		NSS_WRAPPER_GROUP => $nsswrap_group,	};	if (defined($self->{ldap})) {                push (@provision_options, "--ldap-backend=$ldap_uri");	        system("$self->{bindir}/smbpython $self->{setupdir}/provision-backend $configuration --ldap-manager-pass=$password --root=$unix_name --realm=$realm --domain=$domain --host-name=$netbiosname --ldap-backend-type=$self->{ldap}>&2") == 0 or die("backend provision failed");	        if ($self->{ldap} eq "openldap") {		       ($ret->{SLAPD_CONF}, $ret->{OPENLDAP_PIDFILE}) = $self->mk_openldap($ldapdir, $configuration) or die("Unable to create openldap directories");		       push (@provision_options, "--ldap-backend-type=openldap");	        } elsif ($self->{ldap} eq "fedora-ds") {		       ($ret->{FEDORA_DS_DIR}, $ret->{FEDORA_DS_PIDFILE}) = $self->mk_fedora_ds($ldapdir, $configuration) or die("Unable to create fedora ds directories");		       push (@provision_options, "--ldap-backend-type=fedora-ds");		       push (@provision_options, "'--aci=aci:: KHRhcmdldGF0dHIgPSAiKiIpICh2ZXJzaW9uIDMuMDthY2wgImZ1bGwgYWNjZXNzIHRvIGFsbCBieSBhbGwiO2FsbG93IChhbGwpKHVzZXJkbiA9ICJsZGFwOi8vL2FueW9uZSIpOykK'");                 }		$self->slapd_start($ret) or 			die("couldn't start slapd");	}	my $provision_cmd = join(" ", @provision_options);	(system($provision_cmd) == 0) or die("Unable to provision: \n$provision_cmd\n");	if (defined($self->{ldap})) {		$self->slapd_stop($ret) or 			die("couldn't stop slapd");        }	return $ret; }sub provision_member($$$){	my ($self, $prefix, $dcvars) = @_;	print "PROVISIONING MEMBER...";	my $ret = $self->provision($prefix,				   "member server",				   "localmember3",				   "localmember",				   3,				   "localmemberpass");	$ret or die("Unable to provision");	my $cmd = "";	$cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" ";	$cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" ";	$cmd .= "$self->{bindir}/net join $ret->{CONFIGURATION} $dcvars->{DOMAIN} member";	$cmd .= " -U$dcvars->{USERNAME}\%$dcvars->{PASSWORD}";	system($cmd) == 0 or die("Join failed\n$cmd");	$ret->{SMBD_TEST_FIFO} = "$prefix/smbd_test.fifo";	$ret->{SMBD_TEST_LOG} = "$prefix/smbd_test.log";	$ret->{SMBD_TEST_LOG_POS} = 0;	$ret->{DC_SERVER} = $dcvars->{SERVER};	$ret->{DC_SERVER_IP} = $dcvars->{SERVER_IP};	$ret->{DC_NETBIOSNAME} = $dcvars->{NETBIOSNAME};	$ret->{DC_NETBIOSALIAS} = $dcvars->{NETBIOSALIAS};	$ret->{DC_USERNAME} = $dcvars->{USERNAME};	$ret->{DC_PASSWORD} = $dcvars->{PASSWORD};	return $ret;}sub provision_dc($$){	my ($self, $prefix) = @_;	print "PROVISIONING DC...";	my $ret = $self->provision($prefix,				   "domain controller",				   "localdc1",				   "localdc",				   1,				   "localdcpass");	$self->add_wins_config("$prefix/private") or 		die("Unable to add wins configuration");	$ret->{SMBD_TEST_FIFO} = "$prefix/smbd_test.fifo";	$ret->{SMBD_TEST_LOG} = "$prefix/smbd_test.log";	$ret->{SMBD_TEST_LOG_POS} = 0;	return $ret;}sub teardown_env($$){	my ($self, $envvars) = @_;	my $pid;	close(DATA);	if (-f "$envvars->{PIDDIR}/smbd.pid" ) {		open(IN, "<$envvars->{PIDDIR}/smbd.pid") or die("unable to open smbd pid file");		$pid = <IN>;		close(IN);		# Give the process 20 seconds to exit.  gcov needs		# this time to write out the covarge data		my $count = 0;		until (kill(0, $pid) == 0) {		    # if no process sucessfully signalled, then we are done		    sleep(1);		    $count++;		    last if $count > 20;		}				# If it is still around, kill it		if ($count > 20) {		    print "smbd process $pid took more than $count seconds to exit, killing\n";		    kill 9, $pid;		}	}	my $failed = $? >> 8;	$self->slapd_stop($envvars) if ($self->{ldap});	print $self->getlog_env($envvars);	return $failed;}sub getlog_env($$){	my ($self, $envvars) = @_;	my $title = "SMBD LOG of: $envvars->{NETBIOSNAME}\n";	my $out = $title;	open(LOG, "<$envvars->{SMBD_TEST_LOG}");	seek(LOG, $envvars->{SMBD_TEST_LOG_POS}, SEEK_SET);	while (<LOG>) {		$out .= $_;	}	$envvars->{SMBD_TEST_LOG_POS} = tell(LOG);	close(LOG);	return "" if $out eq $title; 	return $out;}sub check_env($$){	my ($self, $envvars) = @_;	return 1 if (-p $envvars->{SMBD_TEST_FIFO});	print $self->getlog_env($envvars);	return 0;}sub setup_env($$$){	my ($self, $envname, $path) = @_;	if ($envname eq "dc") {		return $self->setup_dc("$path/dc");	} elsif ($envname eq "member") {		if (not defined($self->{vars}->{dc})) {			$self->setup_dc("$path/dc");		}		return $self->setup_member("$path/member", $self->{vars}->{dc});	} else {		die("Samba4 can't provide environment '$envname'");	}}sub setup_member($$$$){	my ($self, $path, $dc_vars) = @_;	my $env = $self->provision_member($path, $dc_vars);	$self->check_or_start($env, ($ENV{SMBD_MAXTIME} or 7500));	$self->wait_for_start($env);	return $env;}sub setup_dc($$){	my ($self, $path) = @_;	my $env = $self->provision_dc($path);	$self->check_or_start($env, 		($ENV{SMBD_MAXTIME} or 7500));	$self->wait_for_start($env);	$self->{vars}->{dc} = $env;	return $env;}sub stop($){	my ($self) = @_;}1;

⌨️ 快捷键说明

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