2 # Copyright (C) 2009 Stefan Metzmacher <metze@samba.org>
3 # Published under the GNU GPL, v3 or later.
9 use FindBin qw($RealBin);
16 my ($classname, $bindir) = @_;
19 target3 => new Samba3($bindir),
20 target4 => new Samba4($bindir, undef, "../source4/setup", "4")
28 my ($self, $envvars) = @_;
35 my ($self, $envvars) = @_;
42 my ($self, $envvars) = @_;
47 sub setup_franky_dc($$)
49 my ($self, $path) = @_;
51 my $target3 = $self->{target3};
52 my $target4 = $self->{target4};
54 my $smbd_path = $target3->binpath("smbd");
55 my $net3 = $target3->binpath("net");
56 my $net4 = $target4->bindir_path("net");
57 my $bindir_abs = abs_path($self->{bindir});
59 my $domsid = "S-1-5-21-123260556-2972382748-1729953856";
61 my $ctx4 = $target4->provision_raw_prepare($path, "domain controller",
68 push (@{$ctx4->{provision_options}}, "--domain-sid=$domsid");
70 $ctx4->{tmpdir} = "$ctx4->{prefix_abs}/tmp";
71 push(@{$ctx4->{directories}}, "$ctx4->{tmpdir}");
73 $ctx4->{sysvoldir} = "$ctx4->{prefix_abs}/sysvol";
74 push(@{$ctx4->{directories}}, "$ctx4->{sysvoldir}");
76 $ctx4->{netlogondir} = "$ctx4->{sysvoldir}/$ctx4->{dnsname}/scripts";
77 push(@{$ctx4->{directories}}, "$ctx4->{sysvoldir}/$ctx4->{dnsname}");
78 push(@{$ctx4->{directories}}, "$ctx4->{netlogondir}");
80 $ctx4->{smb_conf_extra_options} = "
84 auth methods = netlogond guest
85 auth_netlogond:socket = $ctx4->{ncalrpcdir}/DEFAULT
86 auth_netlogond:machinepwscript = $net4 -d -1 machinepw $ctx4->{netbiosname}\$
89 winbindd:socket dir = $ctx4->{winbindd_socket_dir}
90 log file = $ctx4->{prefix_abs}/smbd3.log
92 kernel change notify = no
95 printcap name = /dev/null
96 idmap uid = 100000-200000
97 idmap gid = 100000-200000
100 server services = rpc ldap cldap kdc ntp_signd samba3_smb
101 dcerpc endpoint servers = epmapper srvsvc wkssvc samr netlogon lsarpc drsuapi winreg dssetup
102 samba3:smbd = $smbd_path
105 smbd:sharedelay = 100000
106 smbd:writetimeupdatedelay = 500000
110 vfs objects = $bindir_abs/xattr_tdb.so $bindir_abs/streams_depot.so
113 path = $ctx4->{tmpdir}
117 path = $ctx4->{sysvoldir}
121 path = $ctx4->{netlogondir}
126 my $env4 = $target4->provision_raw_step1($ctx4);
128 $env4 = $target4->provision_raw_step2($ctx4, $env4);
131 $ret->{s3}->{NMBD_TEST_LOG} = "$ctx4->{prefix_abs}/nmbd_test.log";
132 $ret->{s3}->{NMBD_TEST_LOG_POS} = 0;
133 $ret->{s3}->{WINBINDD_TEST_LOG} = "$ctx4->{prefix_abs}/winbindd_test.log";
134 $ret->{s3}->{WINBINDD_TEST_LOG_POS} = 0;
135 $ret->{s3}->{SMBD_TEST_LOG} = "$ctx4->{prefix_abs}/smbd_test.log";
136 $ret->{s3}->{SMBD_TEST_LOG_POS} = 0;
137 $ret->{s3}->{SERVERCONFFILE} = $env4->{SERVERCONFFILE};
138 $ret->{s3}->{CONFIGURATION} = "-s $env4->{SERVERCONFFILE}";
139 $ret->{s3}->{PIDDIR} = $env4->{PIDDIR};
140 $ret->{s3}->{WINBINDD_SOCKET_DIR} = $env4->{WINBINDD_SOCKET_DIR};
141 $ret->{s3}->{WINBINDD_PRIV_PIPE_DIR} = $env4->{WINBINDD_PRIV_PIPE_DIR};
142 $ret->{s3}->{SOCKET_WRAPPER_DEFAULT_IFACE}=$env4->{SOCKET_WRAPPER_DEFAULT_IFACE};
143 $ret->{s3}->{NSS_WRAPPER_PASSWD} = $env4->{NSS_WRAPPER_PASSWD};
144 $ret->{s3}->{NSS_WRAPPER_GROUP} = $env4->{NSS_WRAPPER_GROUP};
145 $ret->{s3}->{SERVER} = $env4->{SERVER};
146 $ret->{s3}->{SERVER_IP} = $env4->{SERVER_IP};
147 $ret->{s3}->{NETBIOSNAME} = $env4->{NETBIOSNAME};
148 $ret->{s3}->{DOMAIN} = $env4->{DOMAIN};
149 $ret->{s3}->{USERNAME} = $env4->{USERNAME};
150 $ret->{s3}->{PASSWORD} = $env4->{PASSWORD};
152 $ret->{SERVERCONFFILE} = $env4->{SERVERCONFFILE};
153 $ret->{CONFIGURATION} = "-s $env4->{SERVERCONFFILE}";
154 $ret->{PIDDIR} = $env4->{PIDDIR};
155 $ret->{WINBINDD_SOCKET_DIR} = $env4->{WINBINDD_SOCKET_DIR};
156 $ret->{WINBINDD_PRIV_PIPE_DIR} = $env4->{WINBINDD_PRIV_PIPE_DIR};
157 $ret->{SOCKET_WRAPPER_DEFAULT_IFACE} = $env4->{SOCKET_WRAPPER_DEFAULT_IFACE};
158 $ret->{NSS_WRAPPER_PASSWD} = $env4->{NSS_WRAPPER_PASSWD};
159 $ret->{NSS_WRAPPER_GROUP} = $env4->{NSS_WRAPPER_GROUP};
160 $ret->{KRB5_CONFIG} = $env4->{KRB5_CONFIG};
161 $ret->{NCALRPCDIR} = $env4->{NCALRPCDIR};
162 $ret->{LOCKDIR} = $env4->{LOCKDIR};
163 $ret->{SERVER} = $env4->{SERVER};
164 $ret->{SERVER_IP} = $env4->{SERVER_IP};
165 $ret->{NETBIOSNAME} = $env4->{NETBIOSNAME};
166 $ret->{DOMAIN} = $env4->{DOMAIN};
167 $ret->{REALM} = $env4->{REALM};
169 $ret->{USERNAME} = "metze";
170 $ret->{PASSWORD} = "geheim";
172 my @newuser_options = ();
173 push (@newuser_options, "NSS_WRAPPER_PASSWD=\"$ret->{NSS_WRAPPER_PASSWD}\"");
174 push (@newuser_options, "NSS_WRAPPER_GROUP=\"$ret->{NSS_WRAPPER_GROUP}\"");
175 if (defined($ENV{PYTHON})) {
176 push (@newuser_options, $ENV{PYTHON});
178 push (@newuser_options, "../source4/setup/newuser");
179 push (@newuser_options, split(' ', $ret->{CONFIGURATION}));
180 push (@newuser_options, "--quiet");
181 push (@newuser_options, $ret->{USERNAME});
182 push (@newuser_options, $ret->{PASSWORD});
184 my $newuser_cmd = join(" ", @newuser_options);
185 (system($newuser_cmd) == 0) or die("Unable to add new user: \n$newuser_cmd\n");
187 my $setlocalsid = "$net3 $ret->{s3}->{CONFIGURATION} setlocalsid $domsid";
188 (system("$setlocalsid") == 0) or die("Failed to run[$?]: $setlocalsid");
189 my $setdomainsid = "$net3 $ret->{s3}->{CONFIGURATION} setdomainsid $domsid";
190 (system("$setdomainsid") == 0) or die("Failed to run[$?]: $setdomainsid");
192 my $maxruntime = ($ENV{SMBD_MAXTIME} or 7500);
193 $target3->check_or_start($ret->{s3},
195 $maxruntime, # don't start winbindd
196 "skip"); # don't start smbd
197 my $tmp = $ENV{SMB_CONF_PATH};
198 $ENV{SMB_CONF_PATH} = $ret->{SERVERCONFFILE};
199 $target4->check_or_start($ret->{s4}, $maxruntime);
200 $ENV{SMB_CONF_PATH} = $tmp;
202 $target3->wait_for_start($ret->{s3});
203 $target4->wait_for_start($ret->{s4});
205 $self->{vars}->{franky_dc} = $ret;
212 my ($self, $envname, $path) = @_;
214 if ($envname eq "franky_dc") {
215 return $self->setup_franky_dc("$path/franky_dc");
218 die("Samba34 can't provide environment '$envname'");