1#!/bin/sh
2
3if [ $# -lt 1 ]; then
4cat <<EOF
5Usage: blackbox_group.sh PREFIX
6EOF
7exit 1;
8fi
9
10PREFIX="$1"
11shift 1
12
13. `dirname $0`/../../../testprogs/blackbox/subunit.sh
14
15
16rm -rf $PREFIX/simple-dc
17mkdir -p $PREFIX
18testit "simple-dc" $PYTHON $BINDIR/samba-tool domain provision --server-role="dc" --domain=FOO --realm=foo.example.com --domain-sid=S-1-5-21-4177067393-1453636373-93818738 --targetdir=$PREFIX/simple-dc --use-ntvfs
19samba_tool="./bin/samba-tool"
20
21CONFIG="--configfile=$PREFIX/simple-dc/etc/smb.conf"
22
23#creation of two test users
24testit "user add" $PYTHON $samba_tool user create $CONFIG --given-name="User" --surname="Tester" --initial="UT" testuser testp@ssw0Rd
25testit "user add" $PYTHON $samba_tool user create $CONFIG --given-name="User1" --surname="Tester" --initial="UT" testuser1 testp@ssw0Rd
26
27# test samba-tool user getgroups command
28user_getgroups_primary_only() {
29	res=$($PYTHON $samba_tool user getgroups $CONFIG testuser)
30
31	primary_group=$(echo $res)
32	echo $primary_group | grep -q "^Domain Users$" || return 1
33}
34testit "user getgroups primary only" user_getgroups_primary_only
35
36#test creation of six different groups
37testit "group add" $PYTHON $samba_tool group add $CONFIG --group-scope='Domain' --group-type='Security' --description='DomainSecurityGroup' --mail-address='dsg@samba.org' --notes='Notes' dsg
38testit "group add" $PYTHON $samba_tool group add $CONFIG --group-scope='Global' --group-type='Security' --description='GlobalSecurityGroup' --mail-address='gsg@samba.org' --notes='Notes' gsg
39testit "group add" $PYTHON $samba_tool group add $CONFIG --group-scope='Universal' --group-type='Security' --description='UniversalSecurityGroup' --mail-address='usg@samba.org' --notes='Notes' usg
40testit "group add" $PYTHON $samba_tool group add $CONFIG --group-scope='Domain' --group-type='Distribution' --description='DomainDistributionGroup' --mail-address='ddg@samba.org' --notes='Notes' ddg
41testit "group add" $PYTHON $samba_tool group add $CONFIG --group-scope='Global' --group-type='Distribution' --description='GlobalDistributionGroup' --mail-address='gdg@samba.org' --notes='Notes' gdg
42testit "group add" $PYTHON $samba_tool group add $CONFIG --group-scope='Universal' --group-type='Distribution' --description='UniversalDistributionGroup' --mail-address='udg@samba.org' --notes='Notes' udg
43
44#test adding test users to all groups by their username
45testit "group addmembers" $PYTHON $samba_tool group addmembers $CONFIG dsg testuser,testuser1
46testit "group addmembers" $PYTHON $samba_tool group addmembers $CONFIG gsg testuser,testuser1
47testit "group addmembers" $PYTHON $samba_tool group addmembers $CONFIG usg testuser,testuser1
48testit "group addmembers" $PYTHON $samba_tool group addmembers $CONFIG ddg testuser,testuser1
49testit "group addmembers" $PYTHON $samba_tool group addmembers $CONFIG gdg testuser,testuser1
50testit "group addmembers" $PYTHON $samba_tool group addmembers $CONFIG udg testuser,testuser1
51
52# test samba-tool user getgroups command
53user_getgroups() {
54	groups="dsg gsg usg ddg gdg udg"
55
56	res=$($PYTHON $samba_tool user getgroups $CONFIG testuser)
57	for g in $groups ; do
58		echo "$res" | grep -q "^${g}$" || return 1
59	done
60
61	# the users primary group is expected in the first line
62	primary_group=$(echo "$res" | head -1)
63	echo $primary_group | grep -q "^Domain Users$" || return 1
64}
65testit "user getgroups" user_getgroups
66
67# test samba-tool user getgroups --full-dn command
68user_getgroups_full_dn() {
69	groups="dsg gsg usg ddg gdg udg"
70
71	res=$($PYTHON $samba_tool user getgroups --full-dn $CONFIG testuser)
72	for g in $groups ; do
73		group_dn=$($PYTHON $samba_tool group show $CONFIG $g --attributes=dn)
74		echo "$res" | grep -q "^${group_dn}$" || return 1
75	done
76
77	# the users primary group is expected in the first line
78	primary_group=$(echo "$res" | head -1)
79	group_dn=$($PYTHON $samba_tool group show $CONFIG "Domain Users" --attributes=dn)
80	echo $primary_group | grep -q "^${group_dn}$" || return 1
81}
82testit "user getgroups full-dn" user_getgroups
83
84# test settings a users primary group
85user_getgroups_primary_first() {
86	expected_primary_group=$1
87	res=$($PYTHON $samba_tool user getgroups $CONFIG testuser)
88
89	# the users primary group is expected in the first line
90	primary_group=$(echo "$res" | head -1)
91	echo $primary_group | grep -q "^${expected_primary_group}$" || return 1
92}
93testit "user setprimarygroup" $PYTHON $samba_tool user setprimarygroup $CONFIG testuser dsg
94testit "user getgroups primary first" user_getgroups_primary_first dsg
95testit "user setprimarygroup" $PYTHON $samba_tool user setprimarygroup $CONFIG testuser gsg
96testit "user getgroups primary first" user_getgroups_primary_first gsg
97
98# reset group (without testit, because I do not know how to quote the groupname)
99$PYTHON $samba_tool user setprimarygroup $CONFIG testuser 'Domain Users'
100
101#test removing test users from all groups by their username
102testit "group removemembers" $PYTHON $samba_tool group removemembers $CONFIG dsg testuser,testuser1
103testit "group removemembers" $PYTHON $samba_tool group removemembers $CONFIG gsg testuser,testuser1
104testit "group removemembers" $PYTHON $samba_tool group removemembers $CONFIG usg testuser,testuser1
105testit "group removemembers" $PYTHON $samba_tool group removemembers $CONFIG ddg testuser,testuser1
106testit "group removemembers" $PYTHON $samba_tool group removemembers $CONFIG gdg testuser,testuser1
107testit "group removemembers" $PYTHON $samba_tool group removemembers $CONFIG udg testuser,testuser1
108
109# creation of two test contacts
110testit "contact create" $PYTHON $samba_tool contact create $CONFIG --given-name="Con" --surname="Tester" --initial="CT" testcontact
111testit "contact create" $PYTHON $samba_tool contact create $CONFIG --given-name="Con1" --surname="Tester" --initial="CT" testcontact1
112
113# test adding test contacts to all groups by their cn
114testit "group addmembers contact" $PYTHON $samba_tool group addmembers $CONFIG dsg testcontact,testcontact1 --object-types=contact
115testit "group addmembers contact" $PYTHON $samba_tool group addmembers $CONFIG gsg testcontact,testcontact1 --object-types=contact
116testit "group addmembers contact" $PYTHON $samba_tool group addmembers $CONFIG usg testcontact,testcontact1 --object-types=contact
117testit "group addmembers contact" $PYTHON $samba_tool group addmembers $CONFIG ddg testcontact,testcontact1 --object-types=contact
118testit "group addmembers contact" $PYTHON $samba_tool group addmembers $CONFIG gdg testcontact,testcontact1 --object-types=contact
119testit "group addmembers contact" $PYTHON $samba_tool group addmembers $CONFIG udg testcontact,testcontact1 --object-types=contact
120
121# test removing test contacts from all groups by their cn
122testit "group removemembers contact" $PYTHON $samba_tool group removemembers $CONFIG dsg testcontact,testcontact1 --object-types=contact
123testit "group removemembers contact" $PYTHON $samba_tool group removemembers $CONFIG gsg testcontact,testcontact1 --object-types=contact
124testit "group removemembers contact" $PYTHON $samba_tool group removemembers $CONFIG usg testcontact,testcontact1 --object-types=contact
125testit "group removemembers contact" $PYTHON $samba_tool group removemembers $CONFIG ddg testcontact,testcontact1 --object-types=contact
126testit "group removemembers contact" $PYTHON $samba_tool group removemembers $CONFIG gdg testcontact,testcontact1 --object-types=contact
127testit "group removemembers contact" $PYTHON $samba_tool group removemembers $CONFIG udg testcontact,testcontact1 --object-types=contact
128
129# should not find test contact, because --object-types=user is specified
130testit_expect_failure "group addmembers contact failure" $PYTHON $samba_tool group addmembers $CONFIG dsg testcontact --object-types=user
131
132# test add contact with --object-types=all
133testit "group addmembers contact object-type all" $PYTHON $samba_tool group addmembers $CONFIG dsg testcontact --object-types=all
134
135# test remove contact with --object-types=all
136testit "group removemembers contact object-type all" $PYTHON $samba_tool group removemembers $CONFIG dsg testcontact --object-types=all
137
138# add test contact by DN
139testit "group addmembers contact dn" $PYTHON $samba_tool group addmembers $CONFIG dsg --member-dn=CN=testcontact,DC=foo,DC=example,DC=com
140
141# remove test contact by DN
142testit "group removemembers contact dn" $PYTHON $samba_tool group removemembers $CONFIG dsg --member-dn=CN=testcontact,DC=foo,DC=example,DC=com
143
144# delete test contacts
145testit "contact delete" $PYTHON $samba_tool contact delete $CONFIG testcontact
146testit "contact delete" $PYTHON $samba_tool contact delete $CONFIG testcontact1
147
148# creation of two test contacts with the same name in different OUs
149testit "ou create" $PYTHON $samba_tool ou create $CONFIG OU=tconou1
150testit "ou create" $PYTHON $samba_tool ou create $CONFIG OU=tconou2
151testit "contact create ou" $PYTHON $samba_tool contact create $CONFIG testcontact --ou=OU=tconou1
152testit "contact create ou" $PYTHON $samba_tool contact create $CONFIG testcontact --ou=OU=tconou2
153
154# expect failure here, since there are multiple results for testcontact
155testit_expect_failure "group addmembers contact same name failure" $PYTHON $samba_tool group addmembers $CONFIG dsg testcontact
156
157# add both contacts by DN
158testit "group addmembers contact dn" $PYTHON $samba_tool group addmembers $CONFIG dsg --member-dn=CN=testcontact,OU=tconou1,DC=foo,DC=example,DC=com --member-dn=CN=testcontact,OU=tconou2,DC=foo,DC=example,DC=com
159
160# remove both contacts by DN
161testit "group removemembers contact dn" $PYTHON $samba_tool group removemembers $CONFIG dsg --member-dn=CN=testcontact,OU=tconou1,DC=foo,DC=example,DC=com --member-dn=CN=testcontact,OU=tconou2,DC=foo,DC=example,DC=com
162
163# delete both contacts by DN
164testit "contact delete" $PYTHON $samba_tool contact delete $CONFIG CN=testcontact,OU=tconou1
165testit "contact delete" $PYTHON $samba_tool contact delete $CONFIG CN=testcontact,OU=tconou2
166
167#test adding test users to all groups by their cn
168#testit "group addmembers" $samba_tool group addmembers $CONFIG dsg "User UT. Tester,User1 UT. Tester"
169#testit "group addmembers" $samba_tool group addmembers $CONFIG gsg "User UT. Tester,User1 UT. Tester"
170#testit "group addmembers" $samba_tool group addmembers $CONFIG usg "User UT. Tester,User1 UT. Tester"
171#testit "group addmembers" $samba_tool group addmembers $CONFIG ddg "User UT. Tester,User1 UT. Tester"
172#testit "group addmembers" $samba_tool group addmembers $CONFIG gdg "User UT. Tester,User1 UT. Tester"
173#testit "group addmembers" $samba_tool group addmembers $CONFIG udg "User UT. Tester,User1 UT. Tester"
174
175#test removing test users from all groups by their cn
176#testit "group removemembers" $samba_tool group removemembers $CONFIG dsg "User UT. Tester,User1 UT. Tester"
177#testit "group removemembers" $samba_tool group removemembers $CONFIG gsg "User UT. Tester,User1 UT. Tester"
178#testit "group removemembers" $samba_tool group removemembers $CONFIG usg "User UT. Tester,User1 UT. Tester"
179#testit "group removemembers" $samba_tool group removemembers $CONFIG ddg "User UT. Tester,User1 UT. Tester"
180#testit "group removemembers" $samba_tool group removemembers $CONFIG gdg "User UT. Tester,User1 UT. Tester"
181#testit "group removemembers" $samba_tool group removemembers $CONFIG ugg "User UT. Tester,User1 UT. Tester"
182
183# delete test users
184testit "user delete" $PYTHON $samba_tool user delete $CONFIG testuser
185testit "user delete" $PYTHON $samba_tool user delete $CONFIG testuser1
186
187# creation of two new test users without spaces in cn
188# testit fails when spaces are used in arguments
189testit "user add" $PYTHON $samba_tool user create $CONFIG --given-name="User" --surname="Tester" --initial="UT" --use-username-as-cn testuser testp@ssw0Rd
190testit "user add" $PYTHON $samba_tool user create $CONFIG --given-name="User1" --surname="Tester" --initial="UT" --use-username-as-cn testuser1 testp@ssw0Rd
191
192# test adding test users to all groups by their DN
193testit "group addmembers" $PYTHON $samba_tool group addmembers $CONFIG dsg --member-dn=CN=testuser,CN=Users,DC=foo,DC=example,DC=com
194
195testit "group addmembers" $PYTHON $samba_tool group addmembers $CONFIG dsg --member-dn=CN=testuser1,CN=Users,DC=foo,DC=example,DC=com
196testit "group addmembers" $PYTHON $samba_tool group addmembers $CONFIG gsg --member-dn=CN=testuser,CN=Users,DC=foo,DC=example,DC=com
197testit "group addmembers" $PYTHON $samba_tool group addmembers $CONFIG gsg --member-dn=CN=testuser1,CN=Users,DC=foo,DC=example,DC=com
198testit "group addmembers" $PYTHON $samba_tool group addmembers $CONFIG usg --member-dn=CN=testuser,CN=Users,DC=foo,DC=example,DC=com
199testit "group addmembers" $PYTHON $samba_tool group addmembers $CONFIG usg --member-dn=CN=testuser1,CN=Users,DC=foo,DC=example,DC=com
200testit "group addmembers" $PYTHON $samba_tool group addmembers $CONFIG ddg --member-dn=CN=testuser,CN=Users,DC=foo,DC=example,DC=com
201testit "group addmembers" $PYTHON $samba_tool group addmembers $CONFIG ddg --member-dn=CN=testuser1,CN=Users,DC=foo,DC=example,DC=com
202
203# add two members by DN and listofmembers in one call
204testit "group addmembers" $PYTHON $samba_tool group addmembers $CONFIG gdg --member-dn=CN=testuser,CN=Users,DC=foo,DC=example,DC=com testuser1
205
206# add two members by DN with one call
207testit "group addmembers" $PYTHON $samba_tool group addmembers $CONFIG udg --member-dn=CN=testuser,CN=Users,DC=foo,DC=example,DC=com --member-dn=CN=testuser1,CN=Users,DC=foo,DC=example,DC=com
208
209# test removing test users from all groups by their DN
210testit "group removemembers" $PYTHON $samba_tool group removemembers $CONFIG dsg --member-dn=CN=testuser,CN=Users,DC=foo,DC=example,DC=com
211testit "group removemembers" $PYTHON $samba_tool group removemembers $CONFIG dsg --member-dn=CN=testuser1,CN=Users,DC=foo,DC=example,DC=com
212testit "group removemembers" $PYTHON $samba_tool group removemembers $CONFIG gsg --member-dn=CN=testuser,CN=Users,DC=foo,DC=example,DC=com
213testit "group removemembers" $PYTHON $samba_tool group removemembers $CONFIG gsg --member-dn=CN=testuser1,CN=Users,DC=foo,DC=example,DC=com
214testit "group removemembers" $PYTHON $samba_tool group removemembers $CONFIG usg --member-dn=CN=testuser,CN=Users,DC=foo,DC=example,DC=com
215testit "group removemembers" $PYTHON $samba_tool group removemembers $CONFIG usg --member-dn=CN=testuser1,CN=Users,DC=foo,DC=example,DC=com
216testit "group removemembers" $PYTHON $samba_tool group removemembers $CONFIG ddg --member-dn=CN=testuser,CN=Users,DC=foo,DC=example,DC=com
217testit "group removemembers" $PYTHON $samba_tool group removemembers $CONFIG ddg --member-dn=CN=testuser1,CN=Users,DC=foo,DC=example,DC=com
218
219# remove two members by DN and listofmembers in one call
220testit "group removemembers" $PYTHON $samba_tool group removemembers $CONFIG gdg --member-dn=CN=testuser,CN=Users,DC=foo,DC=example,DC=com testuser1
221
222# remove two members by DN with one call
223testit "group removemembers" $PYTHON $samba_tool group removemembers $CONFIG udg --member-dn=CN=testuser,CN=Users,DC=foo,DC=example,DC=com --member-dn=CN=testuser1,CN=Users,DC=foo,DC=example,DC=com
224
225# test --member-base-dn option - expect failure here, due to invalid base
226testit_expect_failure "group addmembers with invalid search member base" $PYTHON $samba_tool group addmembers $CONFIG dsg testcontact --member-base-dn=OU=doesnotexist,DC=foo,DC=example,DC=com
227
228# test --member-base-dn option
229testit "group addmembers with member search base" $PYTHON $samba_tool group addmembers $CONFIG dsg testuser --member-base-dn=CN=Users,DC=foo,DC=example,DC=com
230testit "group removemembers with member search base" $PYTHON $samba_tool group removemembers $CONFIG dsg testuser --member-base-dn=CN=Users,DC=foo,DC=example,DC=com
231
232#test deletion of the groups
233testit "group delete" $PYTHON $samba_tool group delete $CONFIG dsg
234testit "group delete" $PYTHON $samba_tool group delete $CONFIG gsg
235testit "group delete" $PYTHON $samba_tool group delete $CONFIG usg
236testit "group delete" $PYTHON $samba_tool group delete $CONFIG ddg
237testit "group delete" $PYTHON $samba_tool group delete $CONFIG gdg
238testit "group delete" $PYTHON $samba_tool group delete $CONFIG udg
239
240# delete test users
241testit "user delete" $PYTHON $samba_tool user delete $CONFIG testuser
242testit "user delete" $PYTHON $samba_tool user delete $CONFIG testuser1
243
244#test listing of all groups
245testit "group list" $PYTHON $samba_tool group list $CONFIG
246
247#test listing of members of a particular group
248testit "group listmembers" $PYTHON $samba_tool group listmembers $CONFIG Users
249
250exit $failed
251