xref: /freebsd/contrib/netbsd-tests/sbin/sysctl/t_perm.sh (revision 0b3105a37d7adcadcb720112fed4dc4e8040be99)
1# $NetBSD: t_perm.sh,v 1.6 2012/03/18 09:46:50 jruoho Exp $
2#
3# Copyright (c) 2011 The NetBSD Foundation, Inc.
4# All rights reserved.
5#
6# This code is derived from software contributed to The NetBSD Foundation
7# by Jukka Ruohonen.
8#
9# Redistribution and use in source and binary forms, with or without
10# modification, are permitted provided that the following conditions
11# are met:
12# 1. Redistributions of source code must retain the above copyright
13#    notice, this list of conditions and the following disclaimer.
14# 2. Redistributions in binary form must reproduce the above copyright
15#    notice, this list of conditions and the following disclaimer in the
16#    documentation and/or other materials provided with the distribution.
17#
18# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
19# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
20# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
22# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28# POSSIBILITY OF SUCH DAMAGE.
29#
30file="/tmp/d_sysctl.out"
31
32clean() {
33
34	if [ -f $file ]; then
35		rm $file
36	fi
37}
38
39sysctl_write() {
40
41	deadbeef="3735928559"
42
43	sysctl $1 | cut -d= -f1 > $file
44
45	if [ ! -f $file ]; then
46		atf_fail "sysctl failed"
47	fi
48
49	while read line; do
50
51		node=$(echo $line)
52
53		case $node in
54
55		"$1."*)
56			atf_check -s not-exit:0 -e ignore \
57				-x sysctl -w $node=$deadbeef
58			;;
59		esac
60
61	done < $file
62
63	# A functional verification that $deadbeef
64	# was not actually written to the node.
65	#
66	if [ ! -z $(sysctl $1 | grep $deadbeef) ]; then
67		atf_fail "value was written"
68	fi
69}
70
71# ddb.
72#
73atf_test_case sysctl_ddb cleanup
74sysctl_ddb_head() {
75	atf_set "require.user" "unprivileged"
76	atf_set "descr" "Test writing to 'ddb' sysctl node as an user"
77}
78
79sysctl_ddb_body() {
80	sysctl_write "ddb"
81}
82
83sysctl_ddb_cleanup() {
84	clean
85}
86
87# hw.
88#
89atf_test_case sysctl_hw cleanup
90sysctl_hw_head() {
91	atf_set "require.user" "unprivileged"
92	atf_set "descr" "Test writing to 'hw' sysctl node as an user"
93}
94
95sysctl_hw_body() {
96	sysctl_write "hw"
97}
98
99sysctl_hw_cleanup() {
100	clean
101}
102
103# kern.
104#
105atf_test_case sysctl_kern cleanup
106sysctl_kern_head() {
107	atf_set "require.user" "unprivileged"
108	atf_set "descr" "Test writing to 'kern' " \
109		"sysctl node as an user (PR kern/44946)"
110}
111
112sysctl_kern_body() {
113	sysctl_write "kern"
114}
115
116sysctl_kern_cleanup() {
117	clean
118}
119
120# machdep.
121#
122atf_test_case sysctl_machdep cleanup
123sysctl_machdep_head() {
124	atf_set "require.user" "unprivileged"
125	atf_set "descr" "Test writing to 'machdep' sysctl node as an user"
126}
127
128sysctl_machdep_body() {
129	sysctl_write "machdep"
130}
131
132sysctl_machdep_cleanup() {
133	clean
134}
135
136# net.
137#
138atf_test_case sysctl_net cleanup
139sysctl_net_head() {
140	atf_set "require.user" "unprivileged"
141	atf_set "descr" "Test writing to 'net' sysctl node as an user"
142}
143
144sysctl_net_body() {
145	sysctl_write "net"
146}
147
148sysctl_net_cleanup() {
149	clean
150}
151
152# security.
153#
154atf_test_case sysctl_security cleanup
155sysctl_security_head() {
156	atf_set "require.user" "unprivileged"
157	atf_set "descr" "Test writing to 'security' sysctl node as an user"
158}
159
160sysctl_security_body() {
161	sysctl_write "security"
162}
163
164sysctl_security_cleanup() {
165	clean
166}
167
168# vfs.
169#
170atf_test_case sysctl_vfs cleanup
171sysctl_vfs_head() {
172	atf_set "require.user" "unprivileged"
173	atf_set "descr" "Test writing to 'vfs' sysctl node as an user"
174}
175
176sysctl_vfs_body() {
177	sysctl_write "vfs"
178}
179
180sysctl_vfs_cleanup() {
181	clean
182}
183
184# vm.
185#
186atf_test_case sysctl_vm cleanup
187sysctl_vm_head() {
188	atf_set "require.user" "unprivileged"
189	atf_set "descr" "Test writing to 'vm' sysctl node as an user"
190}
191
192sysctl_vm_body() {
193	sysctl_write "vm"
194}
195
196sysctl_vm_cleanup() {
197	clean
198}
199
200atf_init_test_cases() {
201	atf_add_test_case sysctl_ddb
202	atf_add_test_case sysctl_hw
203	atf_add_test_case sysctl_kern
204	atf_add_test_case sysctl_machdep
205	atf_add_test_case sysctl_net
206	atf_add_test_case sysctl_security
207	atf_add_test_case sysctl_vfs
208	atf_add_test_case sysctl_vm
209}
210