1#! /bin/sh
2
3# Common functions for Samba build scripts.
4
5# Copyright (C) 2001 by Martin Pool <mbp@samba.org> and others
6
7# The following variables are passed in by the calling script.  They
8# originate in either the buildfarm scripts or the configured
9# Makefile.
10
11# PREFIX = Installed prefix of samba test installation.  Used to
12# locate binaries, configuration files, etc.  
13
14# XXX: It's pretty bad to clobber the installed configuration file and
15# other data in $prefix, because somebody might unwittingly run this
16# with prefix=/usr.  
17
18# Really what we want is a consistent way to pass the location of the
19# configuration and all other files into *all* Samba programs
20# (smbclient, smd, ...) and be able to set them to a temporary
21# directory when testing.  Some of them take a -c parameter, but tpot
22# says it's not done consistently.
23
24template_setup() {
25	cat template/$1 | \
26              sed "s|PREFIX|$prefix|g" | \
27	      sed "s|BUILD_FARM|$test_root|g" | \
28	      sed "s|WHOAMI|$whoami|g" | \
29	      sed "s|LOGLEVEL|$loglevel|g" \
30        > $prefix/$2
31	echo "template_setup: Created $prefix/$2"
32}
33
34template_smb_conf_setup() {
35    template_setup "basicsmb.smb.conf$1" "lib/smb.conf$1"
36}
37
38test_smb_conf_setup() {
39    echo "test_smb_conf_setup: Configuring: "
40    echo "    PREFIX=$prefix"
41    echo "    BUILD_FARM=$test_root"
42    echo "    WHOAMI=$whoami"
43    echo "    LOGLEVEL=$loglevel"
44    echo "    TREE=$tree"
45
46    case "$prefix" in
47    /usr*|/|//)
48        echo "** I don't want to clobber your installation in "
49	echo "**     $prefix"
50	echo "** by running tests there.  Please reconfigure this source tree to"
51	echo "** use a different prefix."
52	exit 1
53    esac
54
55#   Please keep these names under 15 characters,
56#   so that the final name is 31 characters or fewer.
57
58    template_smb_conf_setup 
59    template_smb_conf_setup .hostsequiv
60    template_smb_conf_setup .validusers
61    template_smb_conf_setup .invalidusers
62    template_smb_conf_setup .preexec
63    template_smb_conf_setup .preexec_close
64    template_smb_conf_setup .preexec_cl_fl
65
66    template_smb_conf_setup .share
67    template_smb_conf_setup .user
68    template_smb_conf_setup .server
69    template_smb_conf_setup .domain
70
71    template_setup preexec lib/preexec
72
73    touch $prefix/lib/smb.conf.
74    touch $prefix/lib/smb.conf.localhost
75
76	echo "127.0.0.1    localhost">$prefix/lib/lmhosts
77	echo "127.0.0.2    BUILDFARM">>$prefix/lib/lmhosts
78    echo "127.0.0.3    SHARE">>$prefix/lib/lmhosts
79    echo "127.0.0.4    USER">>$prefix/lib/lmhosts
80    echo "127.0.0.5    SERVER">>$prefix/lib/lmhosts
81    echo "127.0.0.6    DOMAIN">>$prefix/lib/lmhosts
82    echo "127.0.0.7    HOSTSEQUIV">>$prefix/lib/lmhosts
83    echo "127.0.0.7    VALIDUSERS">>$prefix/lib/lmhosts
84    echo "127.0.0.7    INVALIDUSERS">>$prefix/lib/lmhosts
85    echo "127.0.0.7    PREEXEC">>$prefix/lib/lmhosts
86    echo "127.0.0.7    PREEXEC_CLOSE">>$prefix/lib/lmhosts
87    echo "127.0.0.7    PREEXEC_CL_FL">>$prefix/lib/lmhosts
88
89
90	echo "127.0.0.1" > $prefix/lib/hosts.equiv
91
92}
93
94test_smbpasswd() {
95	test_smbpasswd_password="$1"
96	rm -f $prefix/private/smbpasswd
97	echo "( echo $test_smbpasswd_password ; echo $test_smbpasswd_password; ) | $prefix/bin/smbpasswd -L -D $loglevel -s -a $whoami"
98	( echo $test_smbpasswd_password; echo $test_smbpasswd_password; ) | $prefix/bin/smbpasswd -L -D $loglevel -s -a $whoami
99	status=$?
100	if [ $status = 0 ]; then
101	    echo "smbpasswd correctly set initial password ($test_smbpasswd_password)"
102	else
103	    echo "smbpasswd failed to set initial password ($test_smbpasswd_password)! (status $status)"
104	    return 1
105	fi
106	return 0
107}
108
109test_smbpasswd_remote() {
110	test_smbpasswd_rem_password="$1"
111	test_smbpasswd_rem_newpassword="$2"
112	echo "( echo $test_smbpasswd_rem_password; echo $test_smbpasswd_rem_newpassword; echo $test_smbpasswd_rem_newpassword; ) | $prefix/bin/smbpasswd -r localhost -s -U $whoami"
113	( echo $test_smbpasswd_rem_password; echo $test_smbpasswd_rem_newpassword; echo $test_smbpasswd_rem_newpassword; ) | $prefix/bin/smbpasswd -r localhost -s -U $whoami
114	status=$?
115	if [ $status = 0 ]; then
116	    echo "smbpasswd correctly remotely changed password ($test_smbpasswd_rem_password -> $test_smbpasswd_rem_newpassword)"
117	else
118	    echo "smbpasswd failed to remotely changed password ($test_smbpasswd_rem_password -> $test_smbpasswd_rem_newpassword)! (status $status)"
119	    return 1
120	fi
121	return 0
122}
123
124test_smbpasswd_local() {
125	test_smbpasswd_newpassword="$2"
126	echo "( echo $test_smbpasswd_newpassword ; echo $test_smbpasswd_newpassword; ) | $prefix/bin/smbpasswd -L -s $whoami"
127	( echo $test_smbpasswd_newpassword ; echo $test_smbpasswd_newpassword; ) | $prefix/bin/smbpasswd -L -s $whoami
128	status=$?
129	if [ $status = 0 ]; then
130	    echo "smbpasswd correctly locally changed password ($test_smbpasswd_password -> $test_smbpasswd_newpassword)"
131	else
132	    echo "smbpasswd failed to locallly changed password ($test_smbpasswd_password -> $test_smbpasswd_newpassword)! (status $status)"
133	    return 1
134	fi
135	return 0
136}
137
138test_listfilesauth() {
139	remote_name="$1"
140	echo $prefix/bin/smbclient //$remote_name/samba  -n buildclient -U$whoami%$password -c 'ls'
141	$prefix/bin/smbclient //$remote_name/samba  -n buildclient -U$whoami%$password -c 'ls'
142	status=$?
143	if [ $status = 0 ]; then
144		echo "listed files OK"
145	else 
146		echo "listing files with smbd failed with status $status"
147		return 1
148	fi
149	return 0
150}
151
152test_listfilesnpw() {
153	remote_name="$1"
154	echo $prefix/bin/smbclient //$remote_name/samba -n buildclient -U$whoami%  -c 'ls'
155	$prefix/bin/smbclient //$remote_name/samba -n buildclient -U$whoami% -c 'ls'
156	status=$?
157	if [ $status = 0 ]; then
158		echo "smbd listed files with NO PASSWORD on an authenticated share!"
159		return 1
160	else 
161		echo "listing files with smbd failed with status $status (correct)"
162	fi
163	return 0
164}
165
166test_listfilesauth_should_deny() {
167	remote_name="$1"
168	echo $prefix/bin/smbclient //$remote_name/samba -n buildclient -U$whoami%$password  -c 'ls'
169	$prefix/bin/smbclient //$remote_name/samba -n buildclient -U$whoami%$password -c 'ls'
170	status=$?
171	if [ $status = 0 ]; then
172		echo "smbd LISTED FILES despite smb.conf entires to the contary!"
173		return 1
174	else 
175		echo "listing files with smbd failed with status $status (correct)"
176	fi
177	return 0
178}
179
180echo "LIBSMB_PROG=$LIBSMB_PROG" >&2
181
182
183
184# Give sensible defaults to some variables.  
185
186# "What's my age again?"
187
188if [ ! $USER = "" ]; then
189    whoami=$USER
190else 
191    if [ ! $LOGNAME = "" ]; then
192	whoami=$LOGNAME
193    else
194	whoami=build
195    fi
196fi
197
198
199
200if test -z "$loglevel"
201then
202    loglevel=1
203fi
204
205