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