1275657Sbrd# $FreeBSD: stable/11/usr.sbin/pw/tests/pw_usermod_test.sh 322919 2017-08-26 00:35:49Z emaste $
2275657Sbrd
3275657Sbrd# Import helper functions
4275657Sbrd. $(atf_get_srcdir)/helper_functions.shin
5275657Sbrd
6275657Sbrd# Test modifying a user
7275657Sbrdatf_test_case user_mod
8275657Sbrduser_mod_body() {
9275657Sbrd	populate_etc_skel
10275657Sbrd
11275657Sbrd	atf_check -s exit:67 -e match:"no such user" ${PW} usermod test
12275657Sbrd	atf_check -s exit:0 ${PW} useradd test
13275657Sbrd	atf_check -s exit:0 ${PW} usermod test
14275657Sbrd	atf_check -s exit:0 -o match:"^test:.*" \
15275657Sbrd		grep "^test:.*" $HOME/master.passwd
16275657Sbrd}
17275657Sbrd
18275829Sbrd# Test modifying a user with option -N
19275829Sbrdatf_test_case user_mod_noupdate
20275829Sbrduser_mod_noupdate_body() {
21275829Sbrd	populate_etc_skel
22275829Sbrd
23275829Sbrd	atf_check -s exit:67 -e match:"no such user" ${PW} usermod test -N
24275829Sbrd	atf_check -s exit:0 ${PW} useradd test
25275829Sbrd	atf_check -s exit:0 -o match:"^test:.*" ${PW} usermod test -N
26275829Sbrd	atf_check -s exit:0 -o match:"^test:.*" \
27275829Sbrd		grep "^test:.*" $HOME/master.passwd
28275829Sbrd}
29275829Sbrd
30275657Sbrd# Test modifying a user with comments
31275657Sbrdatf_test_case user_mod_comments
32275657Sbrduser_mod_comments_body() {
33275657Sbrd	populate_etc_skel
34275657Sbrd
35275657Sbrd	atf_check -s exit:0 ${PW} useradd test -c "Test User,home,123,456"
36275657Sbrd	atf_check -s exit:0 ${PW} usermod test -c "Test User,work,123,456"
37275657Sbrd	atf_check -s exit:0 -o match:"^test:.*:Test User,work,123,456:" \
38275657Sbrd		grep "^test:.*:Test User,work,123,456:" $HOME/master.passwd
39275657Sbrd}
40275657Sbrd
41275829Sbrd# Test modifying a user with comments with option -N
42275829Sbrdatf_test_case user_mod_comments_noupdate
43275829Sbrduser_mod_comments_noupdate_body() {
44275829Sbrd	populate_etc_skel
45275829Sbrd
46275829Sbrd	atf_check -s exit:0 ${PW} useradd test -c "Test User,home,123,456"
47275829Sbrd	atf_check -s exit:0 -o match:"^test:.*:Test User,work,123,456:" \
48275829Sbrd		${PW} usermod test -c "Test User,work,123,456" -N
49275829Sbrd	atf_check -s exit:0 -o match:"^test:.*:Test User,home,123,456:" \
50275829Sbrd		grep "^test:.*:Test User,home,123,456:" $HOME/master.passwd
51275829Sbrd}
52275829Sbrd
53275657Sbrd# Test modifying a user with invalid comments
54275657Sbrdatf_test_case user_mod_comments_invalid
55275657Sbrduser_mod_comments_invalid_body() {
56275657Sbrd	populate_etc_skel
57275657Sbrd
58275657Sbrd	atf_check -s exit:0 ${PW} useradd test
59275657Sbrd	atf_check -s exit:65 -e match:"invalid character" \
60275657Sbrd		${PW} usermod test -c "Test User,work,123:456,456"
61275657Sbrd	atf_check -s exit:1 -o empty \
62275657Sbrd		grep "^test:.*:Test User,work,123:456,456:" $HOME/master.passwd
63275829Sbrd	atf_check -s exit:0 -o match:"^test:\*" \
64275829Sbrd		grep "^test:\*" $HOME/master.passwd
65275657Sbrd}
66275657Sbrd
67275829Sbrd# Test modifying a user with invalid comments with option -N
68275829Sbrdatf_test_case user_mod_comments_invalid_noupdate
69275829Sbrduser_mod_comments_invalid_noupdate_body() {
70275829Sbrd	populate_etc_skel
71275829Sbrd
72275829Sbrd	atf_check -s exit:0 ${PW} useradd test
73275829Sbrd	atf_check -s exit:65 -e match:"invalid character" \
74275829Sbrd		${PW} usermod test -c "Test User,work,123:456,456" -N
75275829Sbrd	atf_check -s exit:1 -o empty \
76275829Sbrd		grep "^test:.*:Test User,work,123:456,456:" $HOME/master.passwd
77275829Sbrd	atf_check -s exit:0 -o match:"^test:\*" \
78275829Sbrd		grep "^test:\*" $HOME/master.passwd
79275829Sbrd}
80275829Sbrd
81275657Sbrd# Test modifying a user name with -l
82275657Sbrdatf_test_case user_mod_name
83275657Sbrduser_mod_name_body() {
84275657Sbrd	populate_etc_skel
85275657Sbrd
86275657Sbrd	atf_check -s exit:0 ${PW} useradd foo
87275657Sbrd	atf_check -s exit:0 ${PW} usermod foo -l "bar"
88275657Sbrd	atf_check -s exit:0 -o match:"^bar:.*" \
89275657Sbrd		grep "^bar:.*" $HOME/master.passwd
90275657Sbrd}
91275829Sbrd
92275829Sbrd# Test modifying a user name with -l with option -N
93275829Sbrdatf_test_case user_mod_name_noupdate
94275829Sbrduser_mod_name_noupdate_body() {
95275829Sbrd	populate_etc_skel
96275829Sbrd
97275829Sbrd	atf_check -s exit:0 ${PW} useradd foo
98275829Sbrd	atf_check -s exit:0 -o match:"^bar:.*" ${PW} usermod foo -l "bar" -N
99275829Sbrd	atf_check -s exit:0 -o match:"^foo:.*" \
100275829Sbrd		grep "^foo:.*" $HOME/master.passwd
101275829Sbrd}
102275829Sbrd
103286196Sbaptatf_test_case user_mod_rename_multigroups
104286196Sbaptuser_mod_rename_multigroups_body() {
105286196Sbapt	populate_etc_skel
106286196Sbapt
107286196Sbapt	atf_check -s exit:0 ${PW} groupadd test1
108286196Sbapt	atf_check -s exit:0 ${PW} groupadd test2
109286196Sbapt	atf_check -s exit:0 ${PW} useradd foo -G test1,test2
110286196Sbapt	atf_check -o match:"foo" -s exit:0 ${PW} groupshow test1
111286196Sbapt	atf_check -o match:"foo" -s exit:0 ${PW} groupshow test2
112286196Sbapt	atf_check -s exit:0 ${PW} usermod foo -l bar
113286196Sbapt	atf_check -o match:"bar" -s exit:0 ${PW} groupshow test1
114286196Sbapt	atf_check -o match:"bar" -s exit:0 ${PW} groupshow test2
115286196Sbapt}
116286196Sbapt
117286196Sbaptatf_test_case user_mod_nogroups
118286196Sbaptuser_mod_nogroups_body() {
119286196Sbapt	populate_etc_skel
120286196Sbapt
121286196Sbapt	atf_check -s exit:0 ${PW} groupadd test1
122286196Sbapt	atf_check -s exit:0 ${PW} groupadd test2
123286196Sbapt	atf_check -s exit:0 ${PW} groupadd test3
124286196Sbapt	atf_check -s exit:0 ${PW} groupadd test4
125286196Sbapt	atf_check -s exit:0 ${PW} useradd foo -G test1,test2
126286196Sbapt	atf_check -o match:"foo" -s exit:0 ${PW} groupshow test1
127286196Sbapt	atf_check -o match:"foo" -s exit:0 ${PW} groupshow test2
128286196Sbapt	atf_check -s exit:0 ${PW} usermod foo -G test3,test4
129286196Sbapt	atf_check -s exit:0 -o inline:"test3\ntest4\n" \
130286196Sbapt		awk -F\: '$4 == "foo" { print $1 }' ${HOME}/group
131322919Semaste	atf_check -s exit:0 ${PW} usermod foo -G ""
132322919Semaste	atf_check -s exit:0 -o empty \
133322919Semaste		awk -F\: '$4 == "foo" { print $1 }' ${HOME}/group
134286196Sbapt}
135286196Sbapt
136284129Sbaptatf_test_case user_mod_rename
137284129Sbaptuser_mod_rename_body() {
138284129Sbapt	populate_etc_skel
139284129Sbapt
140284129Sbapt	atf_check -s exit:0 ${PW} useradd foo
141284129Sbapt	atf_check -s exit:0 ${PW} usermod foo -l bar
142284129Sbapt	atf_check -s exit:0 -o match:"^bar:.*" \
143284129Sbapt		grep "^bar:.*" ${HOME}/master.passwd
144284129Sbapt}
145284129Sbapt
146284129Sbaptatf_test_case user_mod_rename_too_long
147284129Sbaptuser_mod_rename_too_long_body() {
148284129Sbapt	populate_etc_skel
149284129Sbapt
150284129Sbapt	atf_check -s exit:0 ${PW} useradd foo
151284129Sbapt	atf_check -s exit:64 -e match:"too long" ${PW} usermod foo \
152284129Sbapt		-l name_very_very_very_very_very_long
153284129Sbapt}
154284129Sbapt
155285133Sbaptatf_test_case user_mod_h
156285133Sbaptuser_mod_h_body() {
157285133Sbapt	populate_etc_skel
158285133Sbapt
159285133Sbapt	atf_check -s exit:0 ${PW} useradd foo
160285133Sbapt	atf_check -s exit:0 ${PW} usermod foo -h 0 <<- EOF
161285133Sbapt	$(echo a)
162285133Sbapt	EOF
163302778Sasomers	passhash=`awk -F ':' '/^foo:/ {print $2}' $HOME/master.passwd`
164302778Sasomers	atf_check -s exit:0 -o inline:$passhash \
165302778Sasomers		$(atf_get_srcdir)/crypt $passhash "a"
166285133Sbapt	atf_check -s exit:0 ${PW} usermod foo -h - <<- EOF
167285133Sbapt	$(echo b)
168285133Sbapt	EOF
169285133Sbapt	atf_check -s exit:0 -o match:"^foo:\*:.*" \
170285133Sbapt		grep "^foo" ${HOME}/master.passwd
171286196Sbapt	atf_check -e inline:"pw: Bad file descriptor 'a': invalid\n" \
172285133Sbapt		-s exit:64 ${PW} usermod foo -h a <<- EOF
173285133Sbapt	$(echo a)
174285133Sbapt	EOF
175285133Sbapt}
176285133Sbapt
177285133Sbaptatf_test_case user_mod_H
178285133Sbaptuser_mod_H_body() {
179285133Sbapt	populate_etc_skel
180285133Sbapt
181285133Sbapt	atf_check -s exit:0 ${PW} useradd foo
182285133Sbapt	atf_check -s exit:0 ${PW} usermod foo -H 0 <<- EOF
183285133Sbapt	$(echo a)
184285133Sbapt	EOF
185285133Sbapt	atf_check -s exit:0 -o match:"^foo:a:.*" \
186285133Sbapt		grep "^foo" ${HOME}/master.passwd
187286196Sbapt	atf_check -s exit:64 -e inline:"pw: -H expects a file descriptor\n" \
188285133Sbapt		${PW} usermod foo -H -
189285133Sbapt}
190285133Sbapt
191286196Sbaptatf_test_case user_mod_renamehome
192286196Sbaptuser_mod_renamehome_body() {
193286196Sbapt	populate_root_etc_skel
194286196Sbapt
195286196Sbapt	mkdir -p ${HOME}/home
196286196Sbapt	atf_check -s exit:0 ${RPW} useradd foo -m
197286196Sbapt	test -d ${HOME}/home/foo || atf_fail "Directory not created"
198286196Sbapt	atf_check -s exit:0 ${RPW} usermod foo -l bar -d /home/bar -m
199286196Sbapt	test -d ${HOME}/home/bar || atf_fail "Directory not created"
200286196Sbapt}
201286196Sbapt
202286341Sbaptatf_test_case user_mod_uid
203286341Sbaptuser_mod_uid_body() {
204286341Sbapt	populate_etc_skel
205286341Sbapt
206286341Sbapt	atf_check -s exit:0 ${PW} useradd foo
207286341Sbapt	atf_check -s exit:0 ${PW} usermod foo -u 5000
208286341Sbapt}
209286341Sbapt
210302778Sasomersatf_test_case user_mod_w_error
211302778Sasomersuser_mod_w_error_body() {
212302778Sasomers	populate_etc_skel
213302778Sasomers
214302778Sasomers	atf_check -s exit:0 ${PW} useradd foo
215302778Sasomers	atf_check -s exit:1 -e match:"pw: Invalid value for default password" \
216302778Sasomers		${PW} usermod foo -w invalid_value
217302778Sasomers}
218302778Sasomers
219302778Sasomersatf_test_case user_mod_w_no
220302778Sasomersuser_mod_w_no_body() {
221302778Sasomers	populate_etc_skel
222302778Sasomers
223302778Sasomers	atf_check -s exit:0 ${PW} useradd foo
224302778Sasomers	atf_check -s exit:0 ${PW} usermod foo -w no
225302778Sasomers	atf_check -s exit:0 -o match:"^foo:\*" grep "^foo:" $HOME/master.passwd
226302778Sasomers}
227302778Sasomers
228302778Sasomersatf_test_case user_mod_w_none
229302778Sasomersuser_mod_w_none_body() {
230302778Sasomers	populate_etc_skel
231302778Sasomers
232302778Sasomers	atf_check -s exit:0 ${PW} useradd foo
233302778Sasomers	atf_check -s exit:0 ${PW} usermod foo -w none
234302778Sasomers	atf_check -s exit:0 -o match:"^foo::" grep "^foo:" $HOME/master.passwd
235302778Sasomers}
236302778Sasomers
237302778Sasomersatf_test_case user_mod_w_random
238302778Sasomersuser_mod_w_random_body() {
239302778Sasomers	populate_etc_skel
240302778Sasomers
241302778Sasomers	atf_check -s exit:0 ${PW} useradd foo
242302778Sasomers	password=`${PW} usermod foo -w random | cat`
243302778Sasomers	passhash=`awk -F ':' '/^foo:/ {print $2}' $HOME/master.passwd`
244302778Sasomers	atf_check -s exit:0 -o inline:$passhash \
245302778Sasomers		$(atf_get_srcdir)/crypt $passhash "$password"
246302778Sasomers}
247302778Sasomers
248302778Sasomersatf_test_case user_mod_w_yes
249302778Sasomersuser_mod_w_yes_body() {
250302778Sasomers	populate_etc_skel
251302778Sasomers
252302778Sasomers	atf_check -s exit:0 ${PW} useradd foo
253302778Sasomers	atf_check -s exit:0 ${PW} usermod foo -w yes
254302778Sasomers	passhash=`awk -F ':' '/^foo:/ {print $2}' $HOME/master.passwd`
255302778Sasomers	atf_check -s exit:0 -o inline:$passhash \
256302778Sasomers		$(atf_get_srcdir)/crypt $passhash "foo"
257302778Sasomers}
258302778Sasomers
259312650Sbaptatf_test_case user_mod_m
260312650Sbaptuser_mod_m_body() {
261312650Sbapt	populate_root_etc_skel
262302778Sasomers
263312650Sbapt	mkdir -p ${HOME}/home
264312650Sbapt	mkdir -p ${HOME}/skel
265312650Sbapt	echo "entry" > ${HOME}/skel/.file
266312650Sbapt	atf_check -s exit:0 ${RPW} useradd foo
267312650Sbapt	! test -d ${HOME}/home/foo || atf_fail "Directory should not have been created"
268312650Sbapt	atf_check -s exit:0 ${RPW} usermod foo -m -k /skel
269312650Sbapt	test -d ${HOME}/home/foo || atf_fail "Directory should have been created"
270312650Sbapt	test -f ${HOME}/home/foo/.file || atf_fail "Skell files not added"
271312650Sbapt	echo "entry" > ${HOME}/skel/.file2
272312650Sbapt	atf_check -s exit:0 ${RPW} usermod foo -m -k /skel
273312650Sbapt	test -f ${HOME}/home/foo/.file2 || atf_fail "Skell files not added"
274312650Sbapt	echo > ${HOME}/home/foo/.file2
275312650Sbapt	atf_check -s exit:0 ${RPW} usermod foo -m -k /skel
276312650Sbapt	atf_check -s exit:0 -o inline:"\n" cat ${HOME}/home/foo/.file2
277312650Sbapt}
278312650Sbapt
279312650Sbapt
280275657Sbrdatf_init_test_cases() {
281275657Sbrd	atf_add_test_case user_mod
282275829Sbrd	atf_add_test_case user_mod_noupdate
283275657Sbrd	atf_add_test_case user_mod_comments
284275829Sbrd	atf_add_test_case user_mod_comments_noupdate
285284129Sbapt	atf_add_test_case user_mod_comments_invalid
286284129Sbapt	atf_add_test_case user_mod_comments_invalid_noupdate
287286196Sbapt	atf_add_test_case user_mod_nogroups
288284129Sbapt	atf_add_test_case user_mod_rename
289275829Sbrd	atf_add_test_case user_mod_name_noupdate
290284129Sbapt	atf_add_test_case user_mod_rename_too_long
291286196Sbapt	atf_add_test_case user_mod_rename_multigroups
292285133Sbapt	atf_add_test_case user_mod_h
293285133Sbapt	atf_add_test_case user_mod_H
294286196Sbapt	atf_add_test_case user_mod_renamehome
295286341Sbapt	atf_add_test_case user_mod_uid
296302778Sasomers	atf_add_test_case user_mod_w_error
297302778Sasomers	atf_add_test_case user_mod_w_no
298302778Sasomers	atf_add_test_case user_mod_w_none
299302778Sasomers	atf_add_test_case user_mod_w_random
300302778Sasomers	atf_add_test_case user_mod_w_yes
301312650Sbapt	atf_add_test_case user_mod_m
302275657Sbrd}
303