Fix for https://bugzilla.samba.org/show_bug.cgi?id=9634
[samba.git] / source4 / setup / tests / blackbox_group.sh
1 #!/bin/sh
2
3 if [ $# -lt 1 ]; then
4 cat <<EOF
5 Usage: blackbox_group.sh PREFIX
6 EOF
7 exit 1;
8 fi
9
10 PREFIX="$1"
11 shift 1
12
13 . `dirname $0`/../../../testprogs/blackbox/subunit.sh
14
15
16 rm -rf $PREFIX/simple-dc
17 mkdir -p $PREFIX
18 testit "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
19 samba_tool="./bin/samba-tool"
20
21 CONFIG="--configfile=$PREFIX/simple-dc/etc/smb.conf"
22
23 #creation of two test users
24 testit "user add" $PYTHON $samba_tool user create $CONFIG --given-name="User" --surname="Tester" --initial="UT" testuser testp@ssw0Rd
25 testit "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
28 user_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 }
34 testit "user getgroups primary only" user_getgroups_primary_only
35
36 #test creation of six different groups
37 testit "group add" $PYTHON $samba_tool group add $CONFIG --group-scope='Domain' --group-type='Security' --description='DomainSecurityGroup' --mail-address='dsg@samba.org' --notes='Notes' dsg
38 testit "group add" $PYTHON $samba_tool group add $CONFIG --group-scope='Global' --group-type='Security' --description='GlobalSecurityGroup' --mail-address='gsg@samba.org' --notes='Notes' gsg
39 testit "group add" $PYTHON $samba_tool group add $CONFIG --group-scope='Universal' --group-type='Security' --description='UniversalSecurityGroup' --mail-address='usg@samba.org' --notes='Notes' usg
40 testit "group add" $PYTHON $samba_tool group add $CONFIG --group-scope='Domain' --group-type='Distribution' --description='DomainDistributionGroup' --mail-address='ddg@samba.org' --notes='Notes' ddg
41 testit "group add" $PYTHON $samba_tool group add $CONFIG --group-scope='Global' --group-type='Distribution' --description='GlobalDistributionGroup' --mail-address='gdg@samba.org' --notes='Notes' gdg
42 testit "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
45 testit "group addmembers" $PYTHON $samba_tool group addmembers $CONFIG dsg testuser,testuser1
46 testit "group addmembers" $PYTHON $samba_tool group addmembers $CONFIG gsg testuser,testuser1
47 testit "group addmembers" $PYTHON $samba_tool group addmembers $CONFIG usg testuser,testuser1
48 testit "group addmembers" $PYTHON $samba_tool group addmembers $CONFIG ddg testuser,testuser1
49 testit "group addmembers" $PYTHON $samba_tool group addmembers $CONFIG gdg testuser,testuser1
50 testit "group addmembers" $PYTHON $samba_tool group addmembers $CONFIG udg testuser,testuser1
51
52 # test samba-tool user getgroups command
53 user_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 }
65 testit "user getgroups" user_getgroups
66
67 # test samba-tool user getgroups --full-dn command
68 user_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 }
82 testit "user getgroups full-dn" user_getgroups
83
84 # test settings a users primary group
85 user_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 }
93 testit "user setprimarygroup" $PYTHON $samba_tool user setprimarygroup $CONFIG testuser dsg
94 testit "user getgroups primary first" user_getgroups_primary_first dsg
95 testit "user setprimarygroup" $PYTHON $samba_tool user setprimarygroup $CONFIG testuser gsg
96 testit "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
102 testit "group removemembers" $PYTHON $samba_tool group removemembers $CONFIG dsg testuser,testuser1
103 testit "group removemembers" $PYTHON $samba_tool group removemembers $CONFIG gsg testuser,testuser1
104 testit "group removemembers" $PYTHON $samba_tool group removemembers $CONFIG usg testuser,testuser1
105 testit "group removemembers" $PYTHON $samba_tool group removemembers $CONFIG ddg testuser,testuser1
106 testit "group removemembers" $PYTHON $samba_tool group removemembers $CONFIG gdg testuser,testuser1
107 testit "group removemembers" $PYTHON $samba_tool group removemembers $CONFIG udg testuser,testuser1
108
109 # creation of two test contacts
110 testit "contact create" $PYTHON $samba_tool contact create $CONFIG --given-name="Con" --surname="Tester" --initial="CT" testcontact
111 testit "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
114 testit "group addmembers contact" $PYTHON $samba_tool group addmembers $CONFIG dsg testcontact,testcontact1 --object-types=contact
115 testit "group addmembers contact" $PYTHON $samba_tool group addmembers $CONFIG gsg testcontact,testcontact1 --object-types=contact
116 testit "group addmembers contact" $PYTHON $samba_tool group addmembers $CONFIG usg testcontact,testcontact1 --object-types=contact
117 testit "group addmembers contact" $PYTHON $samba_tool group addmembers $CONFIG ddg testcontact,testcontact1 --object-types=contact
118 testit "group addmembers contact" $PYTHON $samba_tool group addmembers $CONFIG gdg testcontact,testcontact1 --object-types=contact
119 testit "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
122 testit "group removemembers contact" $PYTHON $samba_tool group removemembers $CONFIG dsg testcontact,testcontact1 --object-types=contact
123 testit "group removemembers contact" $PYTHON $samba_tool group removemembers $CONFIG gsg testcontact,testcontact1 --object-types=contact
124 testit "group removemembers contact" $PYTHON $samba_tool group removemembers $CONFIG usg testcontact,testcontact1 --object-types=contact
125 testit "group removemembers contact" $PYTHON $samba_tool group removemembers $CONFIG ddg testcontact,testcontact1 --object-types=contact
126 testit "group removemembers contact" $PYTHON $samba_tool group removemembers $CONFIG gdg testcontact,testcontact1 --object-types=contact
127 testit "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
130 testit_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
133 testit "group addmembers contact object-type all" $PYTHON $samba_tool group addmembers $CONFIG dsg testcontact --object-types=all
134
135 # test listing contacts as group members
136 testit_grep "group listmembers contact" "^testcontact" $PYTHON $samba_tool group listmembers $CONFIG dsg
137
138 # test listing contacts as group members
139 # Make sure that the test contact is listed, because it does not have the
140 # accountExpires attribute and can not expire.
141 testit_grep "group listmembers contact hide-expired" "^testcontact" $PYTHON $samba_tool group listmembers $CONFIG dsg --hide-expired
142 testit_grep "group listmembers contact hide-disabled" "^testcontact" $PYTHON $samba_tool group listmembers $CONFIG dsg --hide-disabled
143
144 # test remove contact with --object-types=all
145 testit "group removemembers contact object-type all" $PYTHON $samba_tool group removemembers $CONFIG dsg testcontact --object-types=all
146
147 # add test contact by DN
148 testit "group addmembers contact dn" $PYTHON $samba_tool group addmembers $CONFIG dsg --member-dn=CN=testcontact,DC=foo,DC=example,DC=com
149
150 # remove test contact by DN
151 testit "group removemembers contact dn" $PYTHON $samba_tool group removemembers $CONFIG dsg --member-dn=CN=testcontact,DC=foo,DC=example,DC=com
152
153 # delete test contacts
154 testit "contact delete" $PYTHON $samba_tool contact delete $CONFIG testcontact
155 testit "contact delete" $PYTHON $samba_tool contact delete $CONFIG testcontact1
156
157 # creation of two test contacts with the same name in different OUs
158 testit "ou create" $PYTHON $samba_tool ou create $CONFIG OU=tconou1
159 testit "ou create" $PYTHON $samba_tool ou create $CONFIG OU=tconou2
160 testit "contact create ou" $PYTHON $samba_tool contact create $CONFIG testcontact --ou=OU=tconou1
161 testit "contact create ou" $PYTHON $samba_tool contact create $CONFIG testcontact --ou=OU=tconou2
162
163 # expect failure here, since there are multiple results for testcontact
164 testit_expect_failure "group addmembers contact same name failure" $PYTHON $samba_tool group addmembers $CONFIG dsg testcontact
165
166 # add both contacts by DN
167 testit "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
168
169 # remove both contacts by DN
170 testit "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
171
172 # delete both contacts by DN
173 testit "contact delete" $PYTHON $samba_tool contact delete $CONFIG CN=testcontact,OU=tconou1
174 testit "contact delete" $PYTHON $samba_tool contact delete $CONFIG CN=testcontact,OU=tconou2
175
176 #test adding test users to all groups by their cn
177 #testit "group addmembers" $samba_tool group addmembers $CONFIG dsg "User UT. Tester,User1 UT. Tester"
178 #testit "group addmembers" $samba_tool group addmembers $CONFIG gsg "User UT. Tester,User1 UT. Tester"
179 #testit "group addmembers" $samba_tool group addmembers $CONFIG usg "User UT. Tester,User1 UT. Tester"
180 #testit "group addmembers" $samba_tool group addmembers $CONFIG ddg "User UT. Tester,User1 UT. Tester"
181 #testit "group addmembers" $samba_tool group addmembers $CONFIG gdg "User UT. Tester,User1 UT. Tester"
182 #testit "group addmembers" $samba_tool group addmembers $CONFIG udg "User UT. Tester,User1 UT. Tester"
183
184 #test removing test users from all groups by their cn
185 #testit "group removemembers" $samba_tool group removemembers $CONFIG dsg "User UT. Tester,User1 UT. Tester"
186 #testit "group removemembers" $samba_tool group removemembers $CONFIG gsg "User UT. Tester,User1 UT. Tester"
187 #testit "group removemembers" $samba_tool group removemembers $CONFIG usg "User UT. Tester,User1 UT. Tester"
188 #testit "group removemembers" $samba_tool group removemembers $CONFIG ddg "User UT. Tester,User1 UT. Tester"
189 #testit "group removemembers" $samba_tool group removemembers $CONFIG gdg "User UT. Tester,User1 UT. Tester"
190 #testit "group removemembers" $samba_tool group removemembers $CONFIG ugg "User UT. Tester,User1 UT. Tester"
191
192 # delete test users
193 testit "user delete" $PYTHON $samba_tool user delete $CONFIG testuser
194 testit "user delete" $PYTHON $samba_tool user delete $CONFIG testuser1
195
196 # creation of two new test users without spaces in cn
197 # testit fails when spaces are used in arguments
198 testit "user add" $PYTHON $samba_tool user create $CONFIG --given-name="User" --surname="Tester" --initial="UT" --use-username-as-cn testuser testp@ssw0Rd
199 testit "user add" $PYTHON $samba_tool user create $CONFIG --given-name="User1" --surname="Tester" --initial="UT" --use-username-as-cn testuser1 testp@ssw0Rd
200
201 # test adding test users to all groups by their DN
202 testit "group addmembers" $PYTHON $samba_tool group addmembers $CONFIG dsg --member-dn=CN=testuser,CN=Users,DC=foo,DC=example,DC=com
203
204 testit "group addmembers" $PYTHON $samba_tool group addmembers $CONFIG dsg --member-dn=CN=testuser1,CN=Users,DC=foo,DC=example,DC=com
205 testit "group addmembers" $PYTHON $samba_tool group addmembers $CONFIG gsg --member-dn=CN=testuser,CN=Users,DC=foo,DC=example,DC=com
206 testit "group addmembers" $PYTHON $samba_tool group addmembers $CONFIG gsg --member-dn=CN=testuser1,CN=Users,DC=foo,DC=example,DC=com
207 testit "group addmembers" $PYTHON $samba_tool group addmembers $CONFIG usg --member-dn=CN=testuser,CN=Users,DC=foo,DC=example,DC=com
208 testit "group addmembers" $PYTHON $samba_tool group addmembers $CONFIG usg --member-dn=CN=testuser1,CN=Users,DC=foo,DC=example,DC=com
209 testit "group addmembers" $PYTHON $samba_tool group addmembers $CONFIG ddg --member-dn=CN=testuser,CN=Users,DC=foo,DC=example,DC=com
210 testit "group addmembers" $PYTHON $samba_tool group addmembers $CONFIG ddg --member-dn=CN=testuser1,CN=Users,DC=foo,DC=example,DC=com
211
212 # add two members by DN and listofmembers in one call
213 testit "group addmembers" $PYTHON $samba_tool group addmembers $CONFIG gdg --member-dn=CN=testuser,CN=Users,DC=foo,DC=example,DC=com testuser1
214
215 # add two members by DN with one call
216 testit "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
217
218 # test removing test users from all groups by their DN
219 testit "group removemembers" $PYTHON $samba_tool group removemembers $CONFIG dsg --member-dn=CN=testuser,CN=Users,DC=foo,DC=example,DC=com
220 testit "group removemembers" $PYTHON $samba_tool group removemembers $CONFIG dsg --member-dn=CN=testuser1,CN=Users,DC=foo,DC=example,DC=com
221 testit "group removemembers" $PYTHON $samba_tool group removemembers $CONFIG gsg --member-dn=CN=testuser,CN=Users,DC=foo,DC=example,DC=com
222 testit "group removemembers" $PYTHON $samba_tool group removemembers $CONFIG gsg --member-dn=CN=testuser1,CN=Users,DC=foo,DC=example,DC=com
223 testit "group removemembers" $PYTHON $samba_tool group removemembers $CONFIG usg --member-dn=CN=testuser,CN=Users,DC=foo,DC=example,DC=com
224 testit "group removemembers" $PYTHON $samba_tool group removemembers $CONFIG usg --member-dn=CN=testuser1,CN=Users,DC=foo,DC=example,DC=com
225 testit "group removemembers" $PYTHON $samba_tool group removemembers $CONFIG ddg --member-dn=CN=testuser,CN=Users,DC=foo,DC=example,DC=com
226 testit "group removemembers" $PYTHON $samba_tool group removemembers $CONFIG ddg --member-dn=CN=testuser1,CN=Users,DC=foo,DC=example,DC=com
227
228 # remove two members by DN and listofmembers in one call
229 testit "group removemembers" $PYTHON $samba_tool group removemembers $CONFIG gdg --member-dn=CN=testuser,CN=Users,DC=foo,DC=example,DC=com testuser1
230
231 # remove two members by DN with one call
232 testit "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
233
234 # test --member-base-dn option - expect failure here, due to invalid base
235 testit_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
236
237 # test --member-base-dn option
238 testit "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
239 testit "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
240
241 #test deletion of the groups
242 testit "group delete" $PYTHON $samba_tool group delete $CONFIG dsg
243 testit "group delete" $PYTHON $samba_tool group delete $CONFIG gsg
244 testit "group delete" $PYTHON $samba_tool group delete $CONFIG usg
245 testit "group delete" $PYTHON $samba_tool group delete $CONFIG ddg
246 testit "group delete" $PYTHON $samba_tool group delete $CONFIG gdg
247 testit "group delete" $PYTHON $samba_tool group delete $CONFIG udg
248
249 # delete test users
250 testit "user delete" $PYTHON $samba_tool user delete $CONFIG testuser
251 testit "user delete" $PYTHON $samba_tool user delete $CONFIG testuser1
252
253 #test listing of all groups
254 testit "group list" $PYTHON $samba_tool group list $CONFIG
255
256 #test listing of members of a particular group
257 testit "group listmembers" $PYTHON $samba_tool group listmembers $CONFIG Users
258
259 exit $failed