TODO... selftest: add Samba34 target
[metze/samba/wip.git] / selftest / target / Samba34.pm
1 #!/usr/bin/perl
2 # Copyright (C) 2009 Stefan Metzmacher <metze@samba.org>
3 # Published under the GNU GPL, v3 or later.
4
5 package Samba34;
6
7 use strict;
8 use Cwd qw(abs_path);
9 use FindBin qw($RealBin);
10 use POSIX;
11
12 use target::Samba3;
13 use target::Samba4;
14
15 sub new($$) {
16         my ($classname, $bindir) = @_;
17         my $self = {
18                 bindir => $bindir,
19                 target3 => new Samba3($bindir),
20                 target4 => new Samba4($bindir, undef, "../source4/setup", "4")
21         };
22         bless $self;
23         return $self;
24 }
25
26 sub teardown_env($$)
27 {
28         my ($self, $envvars) = @_;
29
30         return 0;
31 }
32
33 sub getlog_env($$)
34 {
35         my ($self, $envvars) = @_;
36
37         return "";
38 }
39
40 sub check_env($$)
41 {
42         my ($self, $envvars) = @_;
43
44         return 1;
45 }
46
47 sub setup_franky_dc($$)
48 {
49         my ($self, $path) = @_;
50         my $ret = undef;
51         my $target3 = $self->{target3};
52         my $target4 = $self->{target4};
53
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});
58
59         my $domsid = "S-1-5-21-123260556-2972382748-1729953856";
60
61         my $ctx4 = $target4->provision_raw_prepare($path, "domain controller",
62                                                    "FRANKYDC4",
63                                                    "FRANKYDC",
64                                                    "4",
65                                                    "frankydc4pass",
66                                                    "127.0.0.4");
67
68         push (@{$ctx4->{provision_options}}, "--domain-sid=$domsid");
69
70         $ctx4->{tmpdir} = "$ctx4->{prefix_abs}/tmp";
71         push(@{$ctx4->{directories}}, "$ctx4->{tmpdir}");
72
73         $ctx4->{sysvoldir} = "$ctx4->{prefix_abs}/sysvol";
74         push(@{$ctx4->{directories}}, "$ctx4->{sysvoldir}");
75
76         $ctx4->{netlogondir} = "$ctx4->{sysvoldir}/$ctx4->{dnsname}/scripts";
77         push(@{$ctx4->{directories}}, "$ctx4->{sysvoldir}/$ctx4->{dnsname}");
78         push(@{$ctx4->{directories}}, "$ctx4->{netlogondir}");
79
80         $ctx4->{smb_conf_extra_options} = "
81
82         # Samba3 options
83         security = user
84         auth methods = netlogond guest
85         auth_netlogond:socket = $ctx4->{ncalrpcdir}/DEFAULT
86         auth_netlogond:machinepwscript = $net4 -d -1 machinepw $ctx4->{netbiosname}\$
87         domain master = yes
88         domain logons = yes
89         winbindd:socket dir = $ctx4->{winbindd_socket_dir}
90         log file = $ctx4->{prefix_abs}/smbd3.log
91         kernel oplocks = no
92         kernel change notify = no
93         syslog = no
94         printing = bsd
95         printcap name = /dev/null
96         idmap uid = 100000-200000
97         idmap gid = 100000-200000
98
99         # Samba4 options
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
103
104         # Share defaults
105         smbd:sharedelay = 100000
106         smbd:writetimeupdatedelay = 500000
107         map hidden = yes
108         map system = yes
109         create mask = 755
110         vfs objects = $bindir_abs/xattr_tdb.so $bindir_abs/streams_depot.so
111
112 [tmp]
113         path = $ctx4->{tmpdir}
114         read only = no
115
116 [sysvol]
117         path = $ctx4->{sysvoldir}
118         read only = no
119
120 [netlogon]
121         path = $ctx4->{netlogondir}
122         read only = no
123
124 ";
125
126         my $env4 = $target4->provision_raw_step1($ctx4);
127
128         $env4 = $target4->provision_raw_step2($ctx4, $env4);
129
130         $ret->{s4} = $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};
151
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};
168
169         $ret->{USERNAME}                        = "metze";
170         $ret->{PASSWORD}                        = "geheim";
171
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});
177         }
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});
183
184         my $newuser_cmd = join(" ", @newuser_options);
185         (system($newuser_cmd) == 0) or die("Unable to add new user: \n$newuser_cmd\n");
186
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");
191
192         my $maxruntime = ($ENV{SMBD_MAXTIME} or 7500);
193         $target3->check_or_start($ret->{s3},
194                                  $maxruntime,   # nmbd
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;
201
202         $target3->wait_for_start($ret->{s3});
203         $target4->wait_for_start($ret->{s4});
204
205         $self->{vars}->{franky_dc} = $ret;
206
207         return $ret;
208 }
209
210 sub setup_env($$$)
211 {
212         my ($self, $envname, $path) = @_;
213
214         if ($envname eq "franky_dc") {
215                 return $self->setup_franky_dc("$path/franky_dc");
216         }
217
218         die("Samba34 can't provide environment '$envname'");
219 }
220
221 sub stop($)
222 {
223         my ($self) = @_;
224 }
225
226 1;