kern_securelevel revision 252987
1238405Sjkim#!/bin/sh
2238405Sjkim#-
3238405Sjkim# Copyright (c) 2012-2013 Devin Teske
4238405Sjkim# All rights reserved.
5238405Sjkim#
6238405Sjkim# Redistribution and use in source and binary forms, with or without
7238405Sjkim# modification, are permitted provided that the following conditions
8238405Sjkim# are met:
9238405Sjkim# 1. Redistributions of source code must retain the above copyright
10238405Sjkim#    notice, this list of conditions and the following disclaimer.
11238405Sjkim# 2. Redistributions in binary form must reproduce the above copyright
12238405Sjkim#    notice, this list of conditions and the following disclaimer in the
13238405Sjkim#    documentation and/or other materials provided with the distribution.
14238405Sjkim#
15238405Sjkim# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16238405Sjkim# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17238405Sjkim# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18238405Sjkim# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19238405Sjkim# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20238405Sjkim# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21238405Sjkim# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22238405Sjkim# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23238405Sjkim# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24238405Sjkim# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25238405Sjkim# SUCH DAMAGE.
26238405Sjkim#
27238405Sjkim# $FreeBSD: head/usr.sbin/bsdconfig/security/kern_securelevel 252987 2013-07-07 18:51:44Z dteske $
28238405Sjkim#
29238405Sjkim############################################################ INCLUDES
30238405Sjkim
31238405SjkimBSDCFG_SHARE="/usr/share/bsdconfig"
32238405Sjkim. $BSDCFG_SHARE/common.subr || exit 1
33238405Sjkimf_dprintf "%s: loading includes..." "$0"
34238405Sjkimf_include $BSDCFG_SHARE/dialog.subr
35238405Sjkimf_include $BSDCFG_SHARE/mustberoot.subr
36238405Sjkimf_include $BSDCFG_SHARE/sysrc.subr
37238405Sjkim
38238405SjkimBSDCFG_LIBE="/usr/libexec/bsdconfig" APP_DIR="130.security"
39238405Sjkimf_include_lang $BSDCFG_LIBE/$APP_DIR/include/messages.subr
40238405Sjkim
41238405SjkimSECURELEVEL_HELPFILE=$BSDCFG_LIBE/$APP_DIR/include/securelevel.hlp
42238405Sjkim
43238405Sjkimipgm=$( f_index_menusel_keyword $BSDCFG_LIBE/$APP_DIR/INDEX "$pgm" )
44238405Sjkim[ $? -eq $SUCCESS -a "$ipgm" ] && pgm="$ipgm"
45238405Sjkim
46238405Sjkim############################################################ FUNCTIONS
47238405Sjkim
48238405Sjkim# dialog_menu_main
49238405Sjkim#
50238405Sjkim# Display the dialog(1)-based application main menu.
51238405Sjkim#
52238405Sjkimdialog_menu_main()
53238405Sjkim{
54238405Sjkim	local prompt="$msg_securelevels_menu_text"
55238405Sjkim	local menu_list="
56238405Sjkim		'$msg_disabled'       '$msg_disable_securelevels'
57238405Sjkim		'$msg_secure'         '$msg_secure_mode'
58238405Sjkim		'$msg_highly_secure'  '$msg_highly_secure_mode'
59238405Sjkim		'$msg_network_secure' '$msg_network_secure_mode'
60238405Sjkim	" # END-QUOTE
61238405Sjkim	local defaultitem= # Calculated below
62238405Sjkim	local hline="$hline_select_securelevel_to_operate_at"
63238405Sjkim
64238405Sjkim	local height width rows
65238405Sjkim	eval f_dialog_menu_size height width rows \
66238405Sjkim	                        \"\$DIALOG_TITLE\"     \
67238405Sjkim	                        \"\$DIALOG_BACKTITLE\" \
68238405Sjkim	                        \"\$prompt\"           \
69238405Sjkim	                        \"\$hline\"            \
70238405Sjkim	                        $menu_list
71238405Sjkim
72238405Sjkim	case "$( f_sysrc_get kern_securelevel_enable )" in
73238405Sjkim	[Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1)
74238405Sjkim		case "$( f_sysrc_get kern_securelevel )" in
75238405Sjkim		1) defaultitem="$msg_secure"         ;;
76238405Sjkim		2) defaultitem="$msg_highly_secure"  ;;
77238405Sjkim		3) defaultitem="$msg_network_secure" ;;
78238405Sjkim		esac ;;
79238405Sjkim	*)
80238405Sjkim		defaultitem="$msg_disabled"
81238405Sjkim	esac
82238405Sjkim
83238405Sjkim	local menu_choice
84238405Sjkim	menu_choice=$( eval $DIALOG \
85238405Sjkim		--title \"\$DIALOG_TITLE\"         \
86238405Sjkim		--backtitle \"\$DIALOG_BACKTITLE\" \
87238405Sjkim		--hline \"\$hline\"                \
88238405Sjkim		--ok-label \"\$msg_ok\"            \
89238405Sjkim		--cancel-label \"\$msg_cancel\"    \
90238405Sjkim		--help-button                      \
91238405Sjkim		--help-label \"\$msg_help\"        \
92238405Sjkim		${USE_XDIALOG:+--help \"\"}        \
93238405Sjkim		--default-item \"\$defaultitem\"   \
94238405Sjkim		--menu \"\$prompt\"                \
95238405Sjkim		$height $width $rows               \
96238405Sjkim		$menu_list                         \
97238405Sjkim		2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
98238405Sjkim	)
99238405Sjkim	local retval=$?
100238405Sjkim	f_dialog_menutag_store -s "$menu_choice"
101238405Sjkim	return $retval
102238405Sjkim}
103238405Sjkim
104238405Sjkim############################################################ MAIN
105238405Sjkim
106238405Sjkim# Incorporate rc-file if it exists
107238405Sjkim[ -f "$HOME/.bsdconfigrc" ] && f_include "$HOME/.bsdconfigrc"
108238405Sjkim
109238405Sjkim#
110238405Sjkim# Process command-line arguments
111238405Sjkim#
112238405Sjkimwhile getopts h$GETOPTS_STDARGS flag; do
113238405Sjkim	case "$flag" in
114238405Sjkim	h|\?) f_usage $BSDCFG_LIBE/$APP_DIR/USAGE "PROGRAM_NAME" "$pgm" ;;
115238405Sjkim	esac
116238405Sjkimdone
117238405Sjkimshift $(( $OPTIND - 1 ))
118238405Sjkim
119238405Sjkim#
120238405Sjkim# Initialize
121238405Sjkim#
122238405Sjkimf_dialog_title "$msg_securelevels_menu_title"
123238405Sjkimf_dialog_backtitle "${ipgm:+bsdconfig }$pgm"
124238405Sjkimf_mustberoot_init
125238405Sjkim
126238405Sjkim#
127238405Sjkim# Launch application main menu (loop for additional `Help' button)
128238405Sjkim#
129238405Sjkimwhile :; do
130238405Sjkim	dialog_menu_main
131238405Sjkim	retval=$?
132238405Sjkim	f_dialog_menutag_fetch mtag
133238405Sjkim
134238405Sjkim	if [ $retval -eq 2 ]; then
135238405Sjkim		# The Help button was pressed
136238405Sjkim		f_show_help "$SECURELEVEL_HELPFILE"
137238405Sjkim		continue
138238405Sjkim	elif [ $retval -ne 0 ]; then
139238405Sjkim		f_die
140238405Sjkim	fi
141238405Sjkim
142238405Sjkim	break
143238405Sjkimdone
144238405Sjkim
145238405Sjkimcase "$mtag" in
146238405Sjkim"$msg_disabled")
147238405Sjkim	f_sysrc_set kern_securelevel_enable "NO"
148238405Sjkim	;;
149238405Sjkim"$msg_secure")
150238405Sjkim	f_sysrc_set kern_securelevel_enable "YES"
151238405Sjkim	f_sysrc_set kern_securelevel "1" 
152238405Sjkim	;;
153238405Sjkim"$msg_highly_secure")
154238405Sjkim	f_sysrc_set kern_securelevel_enable "YES"
155238405Sjkim	f_sysrc_set kern_securelevel "2" 
156238405Sjkim	;;
157238405Sjkim"$msg_network_secure")
158238405Sjkim	f_sysrc_set kern_securelevel_enable "YES"
159238405Sjkim	f_sysrc_set kern_securelevel "3" 
160238405Sjkim	;;
161238405Sjkim*)
162238405Sjkim	f_die 1 "$msg_unknown_kern_securelevel_selection"
163238405Sjkimesac
164238405Sjkim
165238405Sjkimexit $SUCCESS
166238405Sjkim
167238405Sjkim################################################################################
168238405Sjkim# END
169238405Sjkim################################################################################
170238405Sjkim