]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/blob - usr.sbin/pw/tests/pw_usermod_test.sh
MFC r322677: pw usermod: handle empty secondary group lists (-G '')
[FreeBSD/stable/10.git] / usr.sbin / pw / tests / pw_usermod_test.sh
1 # $FreeBSD$
2
3 # Import helper functions
4 . $(atf_get_srcdir)/helper_functions.shin
5
6 # Test modifying a user
7 atf_test_case user_mod
8 user_mod_body() {
9         populate_etc_skel
10
11         atf_check -s exit:67 -e match:"no such user" ${PW} usermod test
12         atf_check -s exit:0 ${PW} useradd test
13         atf_check -s exit:0 ${PW} usermod test
14         atf_check -s exit:0 -o match:"^test:.*" \
15                 grep "^test:.*" $HOME/master.passwd
16 }
17
18 # Test modifying a user with option -N
19 atf_test_case user_mod_noupdate
20 user_mod_noupdate_body() {
21         populate_etc_skel
22
23         atf_check -s exit:67 -e match:"no such user" ${PW} usermod test -N
24         atf_check -s exit:0 ${PW} useradd test
25         atf_check -s exit:0 -o match:"^test:.*" ${PW} usermod test -N
26         atf_check -s exit:0 -o match:"^test:.*" \
27                 grep "^test:.*" $HOME/master.passwd
28 }
29
30 # Test modifying a user with comments
31 atf_test_case user_mod_comments
32 user_mod_comments_body() {
33         populate_etc_skel
34
35         atf_check -s exit:0 ${PW} useradd test -c "Test User,home,123,456"
36         atf_check -s exit:0 ${PW} usermod test -c "Test User,work,123,456"
37         atf_check -s exit:0 -o match:"^test:.*:Test User,work,123,456:" \
38                 grep "^test:.*:Test User,work,123,456:" $HOME/master.passwd
39 }
40
41 # Test modifying a user with comments with option -N
42 atf_test_case user_mod_comments_noupdate
43 user_mod_comments_noupdate_body() {
44         populate_etc_skel
45
46         atf_check -s exit:0 ${PW} useradd test -c "Test User,home,123,456"
47         atf_check -s exit:0 -o match:"^test:.*:Test User,work,123,456:" \
48                 ${PW} usermod test -c "Test User,work,123,456" -N
49         atf_check -s exit:0 -o match:"^test:.*:Test User,home,123,456:" \
50                 grep "^test:.*:Test User,home,123,456:" $HOME/master.passwd
51 }
52
53 # Test modifying a user with invalid comments
54 atf_test_case user_mod_comments_invalid
55 user_mod_comments_invalid_body() {
56         populate_etc_skel
57
58         atf_check -s exit:0 ${PW} useradd test
59         atf_check -s exit:65 -e match:"invalid character" \
60                 ${PW} usermod test -c "Test User,work,123:456,456"
61         atf_check -s exit:1 -o empty \
62                 grep "^test:.*:Test User,work,123:456,456:" $HOME/master.passwd
63         atf_check -s exit:0 -o match:"^test:\*" \
64                 grep "^test:\*" $HOME/master.passwd
65 }
66
67 # Test modifying a user with invalid comments with option -N
68 atf_test_case user_mod_comments_invalid_noupdate
69 user_mod_comments_invalid_noupdate_body() {
70         populate_etc_skel
71
72         atf_check -s exit:0 ${PW} useradd test
73         atf_check -s exit:65 -e match:"invalid character" \
74                 ${PW} usermod test -c "Test User,work,123:456,456" -N
75         atf_check -s exit:1 -o empty \
76                 grep "^test:.*:Test User,work,123:456,456:" $HOME/master.passwd
77         atf_check -s exit:0 -o match:"^test:\*" \
78                 grep "^test:\*" $HOME/master.passwd
79 }
80
81 # Test modifying a user name with -l
82 atf_test_case user_mod_name
83 user_mod_name_body() {
84         populate_etc_skel
85
86         atf_check -s exit:0 ${PW} useradd foo
87         atf_check -s exit:0 ${PW} usermod foo -l "bar"
88         atf_check -s exit:0 -o match:"^bar:.*" \
89                 grep "^bar:.*" $HOME/master.passwd
90 }
91
92 # Test modifying a user name with -l with option -N
93 atf_test_case user_mod_name_noupdate
94 user_mod_name_noupdate_body() {
95         populate_etc_skel
96
97         atf_check -s exit:0 ${PW} useradd foo
98         atf_check -s exit:0 -o match:"^bar:.*" ${PW} usermod foo -l "bar" -N
99         atf_check -s exit:0 -o match:"^foo:.*" \
100                 grep "^foo:.*" $HOME/master.passwd
101 }
102
103 atf_test_case user_mod_rename_multigroups
104 user_mod_rename_multigroups_body() {
105         populate_etc_skel
106
107         atf_check -s exit:0 ${PW} groupadd test1
108         atf_check -s exit:0 ${PW} groupadd test2
109         atf_check -s exit:0 ${PW} useradd foo -G test1,test2
110         atf_check -o match:"foo" -s exit:0 ${PW} groupshow test1
111         atf_check -o match:"foo" -s exit:0 ${PW} groupshow test2
112         atf_check -s exit:0 ${PW} usermod foo -l bar
113         atf_check -o match:"bar" -s exit:0 ${PW} groupshow test1
114         atf_check -o match:"bar" -s exit:0 ${PW} groupshow test2
115 }
116
117 atf_test_case user_mod_nogroups
118 user_mod_nogroups_body() {
119         populate_etc_skel
120
121         atf_check -s exit:0 ${PW} groupadd test1
122         atf_check -s exit:0 ${PW} groupadd test2
123         atf_check -s exit:0 ${PW} groupadd test3
124         atf_check -s exit:0 ${PW} groupadd test4
125         atf_check -s exit:0 ${PW} useradd foo -G test1,test2
126         atf_check -o match:"foo" -s exit:0 ${PW} groupshow test1
127         atf_check -o match:"foo" -s exit:0 ${PW} groupshow test2
128         atf_check -s exit:0 ${PW} usermod foo -G test3,test4
129         atf_check -s exit:0 -o inline:"test3\ntest4\n" \
130                 awk -F\: '$4 == "foo" { print $1 }' ${HOME}/group
131         atf_check -s exit:0 ${PW} usermod foo -G ""
132         atf_check -s exit:0 -o empty \
133                 awk -F\: '$4 == "foo" { print $1 }' ${HOME}/group
134 }
135
136 atf_test_case user_mod_rename
137 user_mod_rename_body() {
138         populate_etc_skel
139
140         atf_check -s exit:0 ${PW} useradd foo
141         atf_check -s exit:0 ${PW} usermod foo -l bar
142         atf_check -s exit:0 -o match:"^bar:.*" \
143                 grep "^bar:.*" ${HOME}/master.passwd
144 }
145
146 atf_test_case user_mod_rename_too_long
147 user_mod_rename_too_long_body() {
148         populate_etc_skel
149
150         atf_check -s exit:0 ${PW} useradd foo
151         atf_check -s exit:64 -e match:"too long" ${PW} usermod foo \
152                 -l name_very_very_very_very_very_long
153 }
154
155 atf_test_case user_mod_h
156 user_mod_h_body() {
157         populate_etc_skel
158
159         atf_check -s exit:0 ${PW} useradd foo
160         atf_check -s exit:0 ${PW} usermod foo -h 0 <<- EOF
161         $(echo a)
162         EOF
163         passhash=`awk -F ':' '/^foo:/ {print $2}' $HOME/master.passwd`
164         atf_check -s exit:0 -o inline:$passhash \
165                 $(atf_get_srcdir)/crypt $passhash "a"
166         atf_check -s exit:0 ${PW} usermod foo -h - <<- EOF
167         $(echo b)
168         EOF
169         atf_check -s exit:0 -o match:"^foo:\*:.*" \
170                 grep "^foo" ${HOME}/master.passwd
171         atf_check -e inline:"pw: Bad file descriptor 'a': invalid\n" \
172                 -s exit:64 ${PW} usermod foo -h a <<- EOF
173         $(echo a)
174         EOF
175 }
176
177 atf_test_case user_mod_H
178 user_mod_H_body() {
179         populate_etc_skel
180
181         atf_check -s exit:0 ${PW} useradd foo
182         atf_check -s exit:0 ${PW} usermod foo -H 0 <<- EOF
183         $(echo a)
184         EOF
185         atf_check -s exit:0 -o match:"^foo:a:.*" \
186                 grep "^foo" ${HOME}/master.passwd
187         atf_check -s exit:64 -e inline:"pw: -H expects a file descriptor\n" \
188                 ${PW} usermod foo -H -
189 }
190
191 atf_test_case user_mod_renamehome
192 user_mod_renamehome_body() {
193         populate_root_etc_skel
194
195         mkdir -p ${HOME}/home
196         atf_check -s exit:0 ${RPW} useradd foo -m
197         test -d ${HOME}/home/foo || atf_fail "Directory not created"
198         atf_check -s exit:0 ${RPW} usermod foo -l bar -d /home/bar -m
199         test -d ${HOME}/home/bar || atf_fail "Directory not created"
200 }
201
202 atf_test_case user_mod_uid
203 user_mod_uid_body() {
204         populate_etc_skel
205
206         atf_check -s exit:0 ${PW} useradd foo
207         atf_check -s exit:0 ${PW} usermod foo -u 5000
208 }
209
210 atf_test_case user_mod_w_error
211 user_mod_w_error_body() {
212         populate_etc_skel
213
214         atf_check -s exit:0 ${PW} useradd foo
215         atf_check -s exit:1 -e match:"pw: Invalid value for default password" \
216                 ${PW} usermod foo -w invalid_value
217 }
218
219 atf_test_case user_mod_w_no
220 user_mod_w_no_body() {
221         populate_etc_skel
222
223         atf_check -s exit:0 ${PW} useradd foo
224         atf_check -s exit:0 ${PW} usermod foo -w no
225         atf_check -s exit:0 -o match:"^foo:\*" grep "^foo:" $HOME/master.passwd
226 }
227
228 atf_test_case user_mod_w_none
229 user_mod_w_none_body() {
230         populate_etc_skel
231
232         atf_check -s exit:0 ${PW} useradd foo
233         atf_check -s exit:0 ${PW} usermod foo -w none
234         atf_check -s exit:0 -o match:"^foo::" grep "^foo:" $HOME/master.passwd
235 }
236
237 atf_test_case user_mod_w_random
238 user_mod_w_random_body() {
239         populate_etc_skel
240
241         atf_check -s exit:0 ${PW} useradd foo
242         password=`${PW} usermod foo -w random | cat`
243         passhash=`awk -F ':' '/^foo:/ {print $2}' $HOME/master.passwd`
244         atf_check -s exit:0 -o inline:$passhash \
245                 $(atf_get_srcdir)/crypt $passhash "$password"
246 }
247
248 atf_test_case user_mod_w_yes
249 user_mod_w_yes_body() {
250         populate_etc_skel
251
252         atf_check -s exit:0 ${PW} useradd foo
253         atf_check -s exit:0 ${PW} usermod foo -w yes
254         passhash=`awk -F ':' '/^foo:/ {print $2}' $HOME/master.passwd`
255         atf_check -s exit:0 -o inline:$passhash \
256                 $(atf_get_srcdir)/crypt $passhash "foo"
257 }
258
259 atf_test_case user_mod_m
260 user_mod_m_body() {
261         populate_root_etc_skel
262
263         mkdir -p ${HOME}/home
264         mkdir -p ${HOME}/skel
265         echo "entry" > ${HOME}/skel/.file
266         atf_check -s exit:0 ${RPW} useradd foo
267         ! test -d ${HOME}/home/foo || atf_fail "Directory should not have been created"
268         atf_check -s exit:0 ${RPW} usermod foo -m -k /skel
269         test -d ${HOME}/home/foo || atf_fail "Directory should have been created"
270         test -f ${HOME}/home/foo/.file || atf_fail "Skell files not added"
271         echo "entry" > ${HOME}/skel/.file2
272         atf_check -s exit:0 ${RPW} usermod foo -m -k /skel
273         test -f ${HOME}/home/foo/.file2 || atf_fail "Skell files not added"
274         echo > ${HOME}/home/foo/.file2
275         atf_check -s exit:0 ${RPW} usermod foo -m -k /skel
276         atf_check -s exit:0 -o inline:"\n" cat ${HOME}/home/foo/.file2
277 }
278
279
280 atf_init_test_cases() {
281         atf_add_test_case user_mod
282         atf_add_test_case user_mod_noupdate
283         atf_add_test_case user_mod_comments
284         atf_add_test_case user_mod_comments_noupdate
285         atf_add_test_case user_mod_comments_invalid
286         atf_add_test_case user_mod_comments_invalid_noupdate
287         atf_add_test_case user_mod_nogroups
288         atf_add_test_case user_mod_rename
289         atf_add_test_case user_mod_name_noupdate
290         atf_add_test_case user_mod_rename_too_long
291         atf_add_test_case user_mod_rename_multigroups
292         atf_add_test_case user_mod_h
293         atf_add_test_case user_mod_H
294         atf_add_test_case user_mod_renamehome
295         atf_add_test_case user_mod_uid
296         atf_add_test_case user_mod_w_error
297         atf_add_test_case user_mod_w_no
298         atf_add_test_case user_mod_w_none
299         atf_add_test_case user_mod_w_random
300         atf_add_test_case user_mod_w_yes
301         atf_add_test_case user_mod_m
302 }