s3:tests: Add test for changing the local user password with smbpasswd
[vlendec/samba-autobuild/.git] / source3 / script / tests / test_smbpasswd.sh
1 #!/bin/sh
2 #
3 # Blackbox tests for smbpasswd
4 #
5 # Copyright (c) 2015-2016 Andreas Schneider <asn@samba.org>
6 #
7
8 if [ $# -lt 4 ]; then
9 cat <<EOF
10 Usage: test_smbpasswd.sh SERVER USERNAME PASSWORD
11 EOF
12 exit 1;
13 fi
14
15 SERVER=$1
16 SERVER_IP=$2
17 USERNAME=$3
18 PASSWORD=$4
19 shift 4
20
21 incdir=$(dirname $0)/../../../testprogs/blackbox
22 . $incdir/subunit.sh
23
24 failed=0
25
26 samba_bindir="$BINDIR"
27 samba_srcdir="$SRCDIR"
28
29 samba_texpect="$samba_bindir/texpect"
30 samba_smbpasswd="$samba_bindir/smbpasswd"
31
32 samba_test_user="alice_smbpasswd"
33 samba_test_user_pwd="Secret007"
34 samba_test_user_new_pwd="Secret008"
35
36 create_local_smb_user()
37 {
38         user=$1
39         password=$2
40
41         tmpfile=$PREFIX/smbpasswd_create_user_script
42         cat > $tmpfile <<EOF
43 expect New SMB password:
44 send $password\n
45 expect Retype new SMB password:
46 send $password\n
47 EOF
48
49         cmd='UID_WRAPPER_INITIAL_RUID=0 UID_WRAPPER_INITIAL_EUID=0 $samba_texpect $tmpfile $samba_smbpasswd -c $SMB_CONF_PATH -a $user 2>&1'
50         eval echo "$cmd"
51         out=$(eval $cmd)
52         ret=$?
53
54         rm -f $tmpfile
55
56         if [ $ret -ne 0 ]; then
57                 echo "Failed to create smb user $user"
58                 return 1
59         fi
60
61         getent passwd $user
62         ret=$?
63         if [ $ret -ne 0 ]; then
64                 echo "Failed to create smb user $user"
65                 return 1
66         fi
67 }
68
69 delete_local_smb_user()
70 {
71         user=$1
72
73         # This also deletes the unix account!
74         UID_WRAPPER_INITIAL_RUID=0 UID_WRAPPER_INITIAL_EUID=0 $samba_smbpasswd -c $SMB_CONF_PATH -x $user
75         ret=$?
76         if [ $ret -ne 0 ]; then
77                 echo "Failed to delete smb user $user"
78                 return 1
79         fi
80 }
81
82 test_smbpasswd()
83 {
84         user=$1
85         oldpwd=$2
86         newpwd=$3
87
88         user_id=$(id -u $user)
89
90         tmpfile=$PREFIX/smbpasswd_change_password_script
91         cat > $tmpfile <<EOF
92 expect Old SMB password:
93 send $oldpwd\n
94 expect New SMB password:
95 send $newpwd\n
96 expect Retype new SMB password:
97 send $newpwd\n
98 EOF
99
100         cmd='UID_WRAPPER_INITIAL_RUID=$user_id UID_WRAPPER_INITIAL_EUID=$user_id $samba_texpect $tmpfile $samba_smbpasswd -c $SMB_CONF_PATH -r $SERVER 2>&1'
101         eval echo "$cmd"
102         out=$(eval $cmd)
103         ret=$?
104         rm -f $tmpfile
105         if [ $ret -ne 0 ]; then
106                 echo "Failed to change user password $user"
107                 return 1
108         fi
109
110         prompt="Password changed for user $user"
111         echo "$out" | grep "$prompt" >/dev/null 2>&1
112         ret=$?
113         if [ $ret -ne 0 ]; then
114                 echo "Failed to change password for user $user"
115                 echo "$out"
116                 return 1
117         fi
118 }
119
120 testit "Create user $samba_test_user" \
121         create_local_smb_user $samba_test_user $samba_test_user_pwd \
122         || failed=$(expr $failed + 1)
123
124 testit "Change user password" \
125         test_smbpasswd $samba_test_user $samba_test_user_pwd $samba_test_user_new_pwd \
126         || failed=$(expr $failed + 1)
127
128 testit "Delete user $samba_test_user" \
129         delete_local_smb_user $samba_test_user \
130         || failed=$(expr $failed + 1)
131
132 exit $failed