r22077: Import only necessary test variables, more refactoring.
[nivanova/samba-autobuild/.git] / source4 / script / tests / mktestdc.sh
1 #!/bin/sh
2 # Build a test environment for running Samba
3
4 if [ $# -lt 1 ]
5 then
6         echo "$0 PREFIX"
7         exit 1
8 fi
9
10 PREFIX=$1
11
12 if test -z "$SHARE_BACKEND"; then
13         SHARE_BACKEND=classic
14 fi
15
16 if test -z "$SMBD_LOGLEVEL"; then
17         SMBD_LOGLEVEL=1
18 fi
19
20 SERVER_ROLE="domain controller"
21 DOMAIN=SAMBADOMAIN
22 USERNAME=administrator
23 REALM=SAMBA.EXAMPLE.COM
24 DNSNAME="samba.example.com"
25 BASEDN="dc=samba,dc=example,dc=com"
26 PASSWORD=penguin
27 AUTH="-U$USERNAME%$PASSWORD"
28 SRCDIR=`pwd`
29 ROOT=$USER
30 SERVER=localhost
31 NETBIOSNAME=localtest
32 if test -z "$ROOT"; then
33     ROOT=$LOGNAME
34 fi
35 if test -z "$ROOT"; then
36     ROOT=`whoami`
37 fi
38
39 oldpwd=`pwd`
40 srcdir=`dirname $0`/../..
41 mkdir -p $PREFIX || exit $?
42 cd $PREFIX
43 PREFIX_ABS=`pwd`
44 cd $oldpwd
45
46 TEST_DATA_PREFIX=$PREFIX_ABS
47
48 TMPDIR=$PREFIX_ABS/tmp
49 ETCDIR=$PREFIX_ABS/etc
50 PIDDIR=$PREFIX_ABS/pid
51 CONFFILE=$ETCDIR/smb.conf
52 KRB5_CONFIG=$ETCDIR/krb5.conf
53 PRIVATEDIR=$PREFIX_ABS/private
54 NCALRPCDIR=$PREFIX_ABS/ncalrpc
55 LOCKDIR=$PREFIX_ABS/lockdir
56
57 WINBINDD_SOCKET_DIR=$PREFIX_ABS/winbind_socket
58 CONFIGURATION="--configfile=$CONFFILE"
59 LDAPDIR=$PREFIX_ABS/ldap
60
61 rm -rf $PREFIX/*
62 mkdir -p $PRIVATEDIR $ETCDIR $PIDDIR $NCALRPCDIR $LOCKDIR $TMPDIR $LDAPDIR/db $LDAPDIR/db/bdb-logs $LDAPDIR/db/tmp
63
64 if [ -z "$VALGRIND" ]; then
65     nativeiconv="true"
66 else
67     nativeiconv="false"
68 fi
69
70 cat >$CONFFILE<<EOF
71 [global]
72         iconv:native = $nativeiconv
73         netbios name = $NETBIOSNAME
74         netbios aliases = $SERVER
75         workgroup = $DOMAIN
76         realm = $REALM
77         private dir = $PRIVATEDIR
78         pid directory = $PIDDIR
79         ncalrpc dir = $NCALRPCDIR
80         lock dir = $LOCKDIR
81         share backend = $SHARE_BACKEND
82         setup directory = $SRCDIR/setup
83         js include = $SRCDIR/scripting/libjs
84         winbindd socket directory = $WINBINDD_SOCKET_DIR
85         name resolve order = bcast
86         interfaces = 127.0.0.1/8
87         tls dh params file = $DHFILE
88         panic action = $SRCDIR/script/gdb_backtrace %PID% %PROG%
89         wins support = yes
90         server role = $SERVER_ROLE
91         max xmit = 32K
92         server max protocol = SMB2
93         notify:inotify = false
94         ldb:nosync = true
95         torture:basedir = $TEST_DATA_PREFIX
96
97         system:anonymous = true
98 #We don't want to pass our self-tests if the PAC code is wrong
99         gensec:require_pac = true
100         log level = $SMBD_LOGLEVEL
101
102 [tmp]
103         path = $TMPDIR
104         read only = no
105         ntvfs handler = posix
106         posix:sharedelay = 100000
107         posix:eadb = $LOCKDIR/eadb.tdb
108
109 [cifs]
110         read only = no
111         ntvfs handler = cifs
112         cifs:server = $SERVER
113         cifs:user = $USERNAME
114         cifs:password = $PASSWORD
115         cifs:domain = $DOMAIN
116         cifs:share = tmp
117
118 [simple]
119         path = $TMPDIR
120         read only = no
121         ntvfs handler = simple
122
123 [cifsposixtestshare]
124         copy = simple
125         ntvfs handler = cifsposix   
126 EOF
127
128 ## Override default share.ldb file
129 rm -f $PRIVATEDIR/share.ldb
130 cat >$PRIVATEDIR/share.ldif<<EOF
131 ### Shares basedn
132 dn: @INDEXLIST
133 @IDXATTR: name
134
135 dn: @ATTRIBUTES
136 cn: CASE_INSENSITIVE
137 dc: CASE_INSENSITIVE
138 name: CASE_INSENSITIVE
139 dn: CASE_INSENSITIVE
140 objectClass: CASE_INSENSITIVE
141
142 dn: CN=Shares
143 objectClass: top
144 objectClass: organizationalUnit
145 cn: Shares
146
147 ### Default IPC$ Share
148 dn: CN=IPC$,CN=Shares
149 objectClass: top
150 objectClass: share
151 cn: IPC$
152 name: IPC$
153 type: IPC
154 path: /tmp
155 comment: Remote IPC
156 max-connections: -1
157 available: True
158 readonly: True
159 browseable: False
160 ntvfs-handler: default
161
162 ### Default ADMIN$ Share
163 dn: CN=ADMIN$,CN=Shares
164 objectClass: top
165 objectClass: share
166 cn: ADMIN$
167 name: ADMIN$
168 type: DISK
169 path: /tmp
170 comment: Remote Admin
171 max-connections: -1
172 available: True
173 readonly: True
174 browseable: False
175 ntvfs-handler: default
176
177 dn: CN=tmp,CN=Shares
178 objectClass: top
179 objectClass: share
180 cn: tmp
181 name: tmp
182 type: DISK
183 path: $TMPDIR
184 comment: Temp Dir for Tests
185 readonly: False
186 ntvfs-handler: posix
187 posix-sharedelay: 100000
188 posix-eadb: $LOCKDIR/eadb.tdb
189
190 dn: CN=cifs,CN=Shares
191 objectClass: top
192 objectClass: share
193 cn: cifs
194 name: cifs
195 type: DISK
196 readonly: False
197 ntvfs-handler: cifs
198 cifs-server: $SERVER
199 cifs-user: $USERNAME
200 cifs-password: $PASSWORD
201 cifs-domain: $DOMAIN
202 cifs-share: tmp
203 EOF
204
205 $srcdir/bin/ldbadd -H $PRIVATEDIR/share.ldb < $PRIVATEDIR/share.ldif >/dev/null || exit 1
206
207 . `dirname $0`/mk-keyblobs.sh
208
209 cat >$KRB5_CONFIG<<EOF
210 #Generated krb5.conf for $REALM
211
212 [libdefaults]
213  default_realm = $REALM
214  dns_lookup_realm = false
215  dns_lookup_kdc = false
216  ticket_lifetime = 24h
217  forwardable = yes
218
219 [realms]
220  $REALM = {
221   kdc = 127.0.0.1:88
222   admin_server = 127.0.0.1:88
223   default_domain = $DNSNAME
224  }
225  $DOMAIN = {
226   kdc = 127.0.0.1:88
227   admin_server = 127.0.0.1:88
228   default_domain = $DNSNAME
229  }
230
231 [appdefaults]
232         pkinit_anchors = FILE:$CAFILE
233
234 [kdc]
235         enable-pkinit = true
236         pkinit_identity = FILE:$KDCCERTFILE,$KEYFILE
237         pkinit_anchors = FILE:$CAFILE
238
239 [domain_realm]
240  .$DNSNAME = $REALM
241 EOF
242
243 #Ensure the config file is valid before we start
244 $srcdir/bin/testparm $CONFIGURATION -v --suppress-prompt >/dev/null 2>&1 || {
245     echo "">&2
246     echo "Failed to create configuration!" >&2
247     $srcdir/bin/testparm $CONFIGURATION  >&2
248     exit 1
249 }
250
251 ( $srcdir/bin/testparm $CONFIGURATION -v --suppress-prompt --parameter-name="netbios name" --section-name=global 2> /dev/null | grep -i ^$NETBIOSNAME ) >/dev/null 2>&1 || {
252     echo "$?" >&2
253     $srcdir/bin/testparm $CONFIGURATION -v --suppress-prompt --parameter-name="netbios name" --section-name=global --suppress-prompt 2> /dev/null | grep -i ^$NETBIOSNAME >&2
254     echo "Failed to create configuration!" >&2
255     exit 1
256 }
257
258 PROVISION_OPTIONS="$CONFIGURATION --host-name=$NETBIOSNAME --host-ip=127.0.0.1"
259 PROVISION_OPTIONS="$PROVISION_OPTIONS --quiet --domain $DOMAIN --realm $REALM"
260 PROVISION_OPTIONS="$PROVISION_OPTIONS --adminpass $PASSWORD --root=$ROOT"
261 PROVISION_OPTIONS="$PROVISION_OPTIONS --simple-bind-dn=cn=Manager,$BASEDN --password=$PASSWORD --root=$ROOT"
262 $srcdir/bin/smbscript $srcdir/setup/provision $PROVISION_OPTIONS >&2
263
264 LDAP_URI="ldapi://"`echo $LDAPDIR/ldapi | sed 's|/|%2F|g'`
265
266 . `dirname $0`/mk-openldap.sh
267
268 test -z "$FEDORA_DS_PREFIX" || {
269     . `dirname $0`/mk-fedora-ds.sh
270 }
271
272 cat >$PRIVATEDIR/wins_config.ldif<<EOF
273 dn: name=TORTURE_6,CN=PARTNERS
274 objectClass: wreplPartner
275 name: TORTURE_6
276 address: 127.0.0.6
277 pullInterval: 0
278 pushChangeCount: 0
279 type: 0x3
280 EOF
281
282 $srcdir/bin/ldbadd -H $PRIVATEDIR/wins_config.ldb < $PRIVATEDIR/wins_config.ldif >/dev/null || exit 1
283
284 echo "KRB5_CONFIG=$KRB5_CONFIG"
285 echo "PREFIX_ABS=$PREFIX_ABS"
286 echo "TEST_DATA_PREFIX=$TEST_DATA_PREFIX"
287 echo "CONFIGURATION=$CONFIGURATION"
288 echo "CONFFILE=$CONFFILE"
289 echo "SLAPD_CONF=$SLAPD_CONF"
290 echo "PIDDIR=$PIDDIR"
291 echo "AUTH=$AUTH"
292 echo "SERVER=$SERVER"
293 echo "NETBIOSNAME=$NETBIOSNAME"
294 echo "LDAP_URI=$LDAP_URI"
295 echo "DOMAIN=$DOMAIN"
296 echo "USERNAME=$USERNAME"
297 echo "REALM=$REALM"
298 echo "DNSNAME=$DNSNAME"
299 echo "BASEDN=$BASEDN"
300 echo "PASSWORD=$PASSWORD"
301 echo "SRCDIR=$SRCDIR"
302 echo "PREFIX=$PREFIX"
303 echo "LDAPDIR=$LDAPDIR"
304 echo "PROVISION_OPTIONS=$PROVISION_OPTIONS"
305 echo "PROVISION_ACI=$PROVISION_ACI"