pw_usermod_test.sh revision 316257
1# $FreeBSD: stable/10/usr.sbin/pw/tests/pw_usermod_test.sh 316257 2017-03-30 06:20:58Z ngie $
2
3# Import helper functions
4. $(atf_get_srcdir)/helper_functions.shin
5
6# Test modifying a user
7atf_test_case user_mod
8user_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
19atf_test_case user_mod_noupdate
20user_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
31atf_test_case user_mod_comments
32user_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
42atf_test_case user_mod_comments_noupdate
43user_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
54atf_test_case user_mod_comments_invalid
55user_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
68atf_test_case user_mod_comments_invalid_noupdate
69user_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
82atf_test_case user_mod_name
83user_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
93atf_test_case user_mod_name_noupdate
94user_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
103atf_test_case user_mod_rename_multigroups
104user_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
117atf_test_case user_mod_nogroups
118user_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}
132
133atf_test_case user_mod_rename
134user_mod_rename_body() {
135	populate_etc_skel
136
137	atf_check -s exit:0 ${PW} useradd foo
138	atf_check -s exit:0 ${PW} usermod foo -l bar
139	atf_check -s exit:0 -o match:"^bar:.*" \
140		grep "^bar:.*" ${HOME}/master.passwd
141}
142
143atf_test_case user_mod_rename_too_long
144user_mod_rename_too_long_body() {
145	populate_etc_skel
146
147	atf_check -s exit:0 ${PW} useradd foo
148	atf_check -s exit:64 -e match:"too long" ${PW} usermod foo \
149		-l name_very_very_very_very_very_long
150}
151
152atf_test_case user_mod_h
153user_mod_h_body() {
154	populate_etc_skel
155
156	atf_check -s exit:0 ${PW} useradd foo
157	atf_check -s exit:0 ${PW} usermod foo -h 0 <<- EOF
158	$(echo a)
159	EOF
160	passhash=`awk -F ':' '/^foo:/ {print $2}' $HOME/master.passwd`
161	atf_check -s exit:0 -o inline:$passhash \
162		$(atf_get_srcdir)/crypt $passhash "a"
163	atf_check -s exit:0 ${PW} usermod foo -h - <<- EOF
164	$(echo b)
165	EOF
166	atf_check -s exit:0 -o match:"^foo:\*:.*" \
167		grep "^foo" ${HOME}/master.passwd
168	atf_check -e inline:"pw: Bad file descriptor 'a': invalid\n" \
169		-s exit:64 ${PW} usermod foo -h a <<- EOF
170	$(echo a)
171	EOF
172}
173
174atf_test_case user_mod_H
175user_mod_H_body() {
176	populate_etc_skel
177
178	atf_check -s exit:0 ${PW} useradd foo
179	atf_check -s exit:0 ${PW} usermod foo -H 0 <<- EOF
180	$(echo a)
181	EOF
182	atf_check -s exit:0 -o match:"^foo:a:.*" \
183		grep "^foo" ${HOME}/master.passwd
184	atf_check -s exit:64 -e inline:"pw: -H expects a file descriptor\n" \
185		${PW} usermod foo -H -
186}
187
188atf_test_case user_mod_renamehome
189user_mod_renamehome_body() {
190	populate_root_etc_skel
191
192	mkdir -p ${HOME}/home
193	atf_check -s exit:0 ${RPW} useradd foo -m
194	test -d ${HOME}/home/foo || atf_fail "Directory not created"
195	atf_check -s exit:0 ${RPW} usermod foo -l bar -d /home/bar -m
196	test -d ${HOME}/home/bar || atf_fail "Directory not created"
197}
198
199atf_test_case user_mod_uid
200user_mod_uid_body() {
201	populate_etc_skel
202
203	atf_check -s exit:0 ${PW} useradd foo
204	atf_check -s exit:0 ${PW} usermod foo -u 5000
205}
206
207atf_test_case user_mod_w_error
208user_mod_w_error_body() {
209	populate_etc_skel
210
211	atf_check -s exit:0 ${PW} useradd foo
212	atf_check -s exit:1 -e match:"pw: Invalid value for default password" \
213		${PW} usermod foo -w invalid_value
214}
215
216atf_test_case user_mod_w_no
217user_mod_w_no_body() {
218	populate_etc_skel
219
220	atf_check -s exit:0 ${PW} useradd foo
221	atf_check -s exit:0 ${PW} usermod foo -w no
222	atf_check -s exit:0 -o match:"^foo:\*" grep "^foo:" $HOME/master.passwd
223}
224
225atf_test_case user_mod_w_none
226user_mod_w_none_body() {
227	populate_etc_skel
228
229	atf_check -s exit:0 ${PW} useradd foo
230	atf_check -s exit:0 ${PW} usermod foo -w none
231	atf_check -s exit:0 -o match:"^foo::" grep "^foo:" $HOME/master.passwd
232}
233
234atf_test_case user_mod_w_random
235user_mod_w_random_body() {
236	populate_etc_skel
237
238	atf_check -s exit:0 ${PW} useradd foo
239	password=`${PW} usermod foo -w random | cat`
240	passhash=`awk -F ':' '/^foo:/ {print $2}' $HOME/master.passwd`
241	atf_check -s exit:0 -o inline:$passhash \
242		$(atf_get_srcdir)/crypt $passhash "$password"
243}
244
245atf_test_case user_mod_w_yes
246user_mod_w_yes_body() {
247	populate_etc_skel
248
249	atf_check -s exit:0 ${PW} useradd foo
250	atf_check -s exit:0 ${PW} usermod foo -w yes
251	passhash=`awk -F ':' '/^foo:/ {print $2}' $HOME/master.passwd`
252	atf_check -s exit:0 -o inline:$passhash \
253		$(atf_get_srcdir)/crypt $passhash "foo"
254}
255
256atf_test_case user_mod_m
257user_mod_m_body() {
258	populate_root_etc_skel
259
260	mkdir -p ${HOME}/home
261	mkdir -p ${HOME}/skel
262	echo "entry" > ${HOME}/skel/.file
263	atf_check -s exit:0 ${RPW} useradd foo
264	! test -d ${HOME}/home/foo || atf_fail "Directory should not have been created"
265	atf_check -s exit:0 ${RPW} usermod foo -m -k /skel
266	test -d ${HOME}/home/foo || atf_fail "Directory should have been created"
267	test -f ${HOME}/home/foo/.file || atf_fail "Skell files not added"
268	echo "entry" > ${HOME}/skel/.file2
269	atf_check -s exit:0 ${RPW} usermod foo -m -k /skel
270	test -f ${HOME}/home/foo/.file2 || atf_fail "Skell files not added"
271	echo > ${HOME}/home/foo/.file2
272	atf_check -s exit:0 ${RPW} usermod foo -m -k /skel
273	atf_check -s exit:0 -o inline:"\n" cat ${HOME}/home/foo/.file2
274}
275
276
277atf_init_test_cases() {
278	atf_add_test_case user_mod
279	atf_add_test_case user_mod_noupdate
280	atf_add_test_case user_mod_comments
281	atf_add_test_case user_mod_comments_noupdate
282	atf_add_test_case user_mod_comments_invalid
283	atf_add_test_case user_mod_comments_invalid_noupdate
284	atf_add_test_case user_mod_nogroups
285	atf_add_test_case user_mod_rename
286	atf_add_test_case user_mod_name_noupdate
287	atf_add_test_case user_mod_rename_too_long
288	atf_add_test_case user_mod_rename_multigroups
289	atf_add_test_case user_mod_h
290	atf_add_test_case user_mod_H
291	atf_add_test_case user_mod_renamehome
292	atf_add_test_case user_mod_uid
293	atf_add_test_case user_mod_w_error
294	atf_add_test_case user_mod_w_no
295	atf_add_test_case user_mod_w_none
296	atf_add_test_case user_mod_w_random
297	atf_add_test_case user_mod_w_yes
298	atf_add_test_case user_mod_m
299}
300